docker-compose版WordPressのボリュームバックアップ覚書

Fedora 32でdockerが動かない場合の対処例
Fedoraのdocker-composeで、自分用のWordPressを動かしております。 自分しか見られないWordPress...

自宅Fedoraサーバで、docker-compose版WordPressを動かしていました。

ローカルボリュームをマウントして運用していましたが。

コンテナのマイグレーションのため、コンテナ内からボリュームをバックアップするスクリプトを記録しておこうと思います。


docker-compose版Wordpressのボリュームバックアップスクリプト

調べておくこと

新しい環境ではPodmanを使用する予定ですが、docker-composeファイルを新しい環境にコピーしておきます。下記の確認に使用するためです。

  • 使用しているイメージ
    • mariadbなのかmysqlなのか
    • タグ(バージョン、fpm版かapache版か実装の違い等)
  • 環境変数
    • データベース名
    • ユーザ名
    • パスワード
  • サイトのURL

マイグレーション先の環境でポッドを作成する際、これらを合わせないと、コンテナがうまく動作しないためです。

また後述しますが、URLを変更する場合、データベース内の設定値も変える必要があります。

イメージのバックアップ

まずは、dockerで使用していたイメージを保存しました。

docker save -o image_mysql.tar mysql:latest
docker save -o image_mariadb.tar mariadb:latest
docker save -o image_wordpress.tar wordpress:latest

コンテナ環境は、普通に2年とか3年安定して動いてしまうのですね・・・いや4年とか。

タグはlatestなのに、2年前とか。タグの運用とはいったい。

何よりも気になるのは。

長期間使用しているからこそ、故障等で動かなくなった時のダメージは大きそうです。恐ろしい。しっかりバックアップしたいと思います。

コンテナのバックアップ

コンテナの状態も念のためバックアップしました。

docker container commit wp-db wp-db-image
docker image save -o container_wp-db.tar wp-db-image
docker container commit wp-web wp-web-image
docker image save -o container_wp-web.tar wp-web-image

ボリュームのバックアップ

ボリュームに関しては、docker-composeコマンドでコンテナを停止後、下記の動作のコンテナを一時的に動かしてバックアップしました。

  • docker run –rmコマンドで実行後に消えるコンテナを作成。
  • バックアップ元として、–volumes-fromオプションで、WordPressコンテナとデータベースコンテナそれぞれをマウント。
  • バックアップ先として、カレントディレクトリをコンテナ内から/backupへマウント。
  • tarコマンドで、該当のボリュームをアーカイブ・圧縮して/backupディレクトリに出力。
docker-compose stop
docker run --rm --volumes-from wordpress_wordpress_1 -v ${PWD}:/backup:z fedora tar zcvf /backup/volume_wp-web_html.tar.gz /var/www/html
rem ※22.11.20追記:データベースのボリュームはバックアップしてもマイグレートできない可能性が御座います
docker run --rm --volumes-from wordpress_db_1 -v ${PWD}:/backup:z fedora tar zcvf /backup/volume_wp-db_mysql.tar.gz /var/lib/mysql
docker-compose start

実行後、tar.gzファイルが生成されます。

こちらを、バックアップデータとして保存します。

データベースのダンプが別途必要

上記のデータベースボリュームは、マイグレーション先で使用できない可能性があります。

理由は、純粋にコンテンツのファイルが入っているわけではなく、データベースの実行状態を記録したファイルが入っているためです。

データベースにつきましては、別途、内容をダンプして保存しておく必要があると思います。

まずは、データベースの状態を確認してみました。

# DBコンテナでシェル実行
docker-exec -it wordpress_db_1 bash
mysql --user=wordpress --password=wordpress show databases; exit

続いてデータベースをダンプしてローカルディレクトリにコピーしました。

# mysqlをダンプ
docker exec wordpress_db_1 mysqldump --user=wordpress --password=wordpress wordpress > /tmp/mysqldump_wordpress.sql
# docker cpコマンドでコピー
docker cp wordpress_db_1:/tmp/mysqldump_wordpress.sql .

docker cpコマンドは便利ですね。

バックアップスクリプト全体

以上から、次の内容になりました。

# イメージのバックアップ
docker save -o image_mysql.tar mysql:latest
docker save -o image_wordpress.tar wordpress:latest
# コンテナのコミットとバックアップ
docker container commit wp-db wp-db-image
docker image save -o container_wp-db.tar wp-db-image
docker container commit wp-web wp-web-image
docker image save -o container_wp-web.tar wp-web-image
# mysqlをダンプ
docker exec wordpress_db_1 mysqldump --user=wordpress --password=wordpress wordpress > /tmp/mysqldump_wordpress.sql
# docker cpコマンドでコピー
docker cp wordpress_db_1:/tmp/mysqldump_wordpress.sql .
# ボリュームのバックアップ
docker-compose stop
docker run --rm --volumes-from wordpress_wordpress_1 -v ${PWD}:/backup:z fedora tar zcvf /backup/volume_wp-web_html.tar.gz /var/www/html
rem ※22.11.20追記:データベースのボリュームはバックアップしてもマイグレートできない可能性が御座います
docker run --rm --volumes-from wordpress_db_1 -v ${PWD}:/backup:z fedora tar zcvf /backup/volume_wp-db_mysql.tar.gz /var/lib/mysql
docker-compose start

リストア

WordPressポッドの作成はこちらの記事になります。

Podman.exe版WordPressポッドのコマンド覚書 phpMyAdmin付き
以前、FedoraのDockerで構築したWordPressサーバが御座います。 その後、FedoraがDockerのサポート...

作成したポッドにボリュームとmysqlのダンプをリストアしました。

:start
pushd %~dp0
set pod=wp-pod
set containers=wp-web wp-db wp-phpmyadmin

rem DBリストア
set container=wp-db
set fn=volume_%container%.tar.gz
podman exec wp-db sh -c "mysql --user=wordpress --password=wordpress wordpress < /backup/mysqldump_wordpress.sql"
rem podman exec -it wp-db bash

rem ボリュームをリストア
podman container stop %containers%

set container=wp-web
set fn=volume_%container%.tar.gz
podman run --rm --volumes-from %container% -v .:/backup fedora bash -c "cd / && tar zxvf /backup/%fn%"

podman container start %containers%

:end
popd

マイグレーション後の確認

同じ環境で、起動→バックアップ→削除→リストアを行うには問題ありませんが。

dockerからpodmanへ移行する際、たとえばURLやポート番号が変わると、設定の調整が必要になります。

wp-config.phpの調整

dockerではlinkオプションでコンテナ間のリンクを設定できました。

Podmanはlinkが存在しないため、たとえばMysqlの場合、環境変数WORDPRESS_DB_HOSTでIPアドレス 127.0.0.1を指定する必要があります。

すでに動作している環境では、wp-config.phpファイルにすでにホスト名が埋め込まれている場合があるため、直接編集が必要になります。

rem Webコンテナにvimをインストールする覚書
podman exec -it wp-web bash
apt update
apt install -y vim

コンテナ内にテキストエディタをインストールしてwp-confg.phpファイルを編集しました。

データベース設定値の調整

ポート番号やURLが変わると、データベース内のテーブルに埋め込まれた値を変更する必要が出ます。

基本的には、公式マニュアルに従って、URLを変更します。

https://ja.wordpress.org/support/article/changing-the-site-url/

データベースのバックアップと値の変更のため、phyMyAdminやadminer等のツールは、ほぼ必須だと思います。

こちらの記事にて、phpMyAdminを同じポッドで動かしています。

Podman.exe版WordPressポッドのコマンド覚書 phpMyAdmin付き
以前、FedoraのDockerで構築したWordPressサーバが御座います。 その後、FedoraがDockerのサポート...

phpMyAdminを使用して、次の操作をしました。

  1. 念のためphpMyAdminからWordPressのデータベースをエクスポート
  2. wp_optionsテーブルのoption_value列を変更

変更後、Webブラウザを一度終了してセッションをクリアします。

または別のWebブラウザで、新しいURLにアクセスして動作を確認しました。


バックアップしたWordPressは、FedoraのDocker環境で数年動かしていました。

ポッドに移行するタイミングで、イメージのバージョンを上げる事ができました。

またデータベースに関しては、ダンプしたデータを使用したため、MysqlからMariadbにイメージを変更後、リストアすることが可能でした。

移行が完了し、Windows 10でポッドが動くようになりましたので、しばらく使用して様子を見てみようと思います。

スポンサーリンク

フォローする

スポンサーリンク