めもちょー

メモ帳代わりに使っています。

Wordpress + MySQLをdockerで動かす & MySQLのデータをdumpする

コンテナの作成

ネットワークを作成

名前解決のためにコンテナ間にネットワークを作る

$ docker network create -d bridge wp-net

MySQL側

mysql.envを用意

MYSQL_ROOT_PASSWORD=password
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=password

MySQLのコンテナを起動

$ docker container run -d --network wp-net --name mysql --mount "source=mysqlvolume,target=/var/lib/mysql" --mount "type=bind,source=$(pwd),target=/mysqlbackup" --env-file mysql.env mysql:5.7.28

Wordpress側

wordpress.envを用意

WORDPRESS_DB_HOST=mysql:3306
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=password

wordpressのコンテナを起動

$ docker container run -d --network wp-net -p 8081:80 --env-file wordpress.env --name wordpress wordpress:5.2.3-php7.3-apache

バックアップの実施

wordpressで適当に記事書く

wordpressで1記事書いてみる

mysqldump

mysqlコンテナでmysqldumpを行う
バックアップ先はBindしてあるので、ローカルにsqlファイルが保存される

$ docker container exec mysql bash -c "mysqldump -u root -ppassword -A > mysqlbackup/20220621.sql"

コンテナ/ボリューム削除

$ docker container stop mysql wordpress
$ docker container rm mysql wordpress
$ docker volume rm mysqlvolume

復元

# mysqlコンテナを再び起動
$ docker container run -d --network wp-net --name mysql --mount "source=mysqlvolume,target=/var/lib/mysql" --mount "type=bind,source=$(pwd),target=/mysqlbackup" --env-file mysql.env mysql:5.7.28
# 復元
$ docker container exec mysql bash -c "mysql -u root -ppassword < /mysqlbackup/20220621.sql"
# wordpressコンテナも再び起動
$ docker container run -d --network wp-net -p 8081:80 --env-file wordpress.env --name wordpress wordpress:5.2.3-php7.3-apache

見事、記事が復元されている