Docker Hubの使い方を (https://hub.docker.com/_/drupal/) 見てバックアップもしなくちゃなと思って Backup and restoreのモジュールを入れたのだが以下のようなメッセージが
以下のやり方でバックアップを作成しました。(DrupalのコンテナにPhpの拡張を入れるんでもよかったのかもですが)なお、今回はRancher desktopを使ってやってみてます。
-Drupalのバックアップ
docker commitでコンテナをイメージで保存
-Mysqlのバックアップ
Mysql dumpでデータベースのダンプを作成
では早速以下のようにやってみました。
-Drupalの起動
こちらのページを参考に以下のコマンドで
https://hub.docker.com/_/drupal/
docker network create --subnet 172.21.0.0/16 --attachable some-network
docker run -d --name some-mysql --network some-network -e MYSQL_DATABASE=drupal -e MYSQL_USER=user -e MYSQL_PASSWORD=password -e MYSQL_ROOT_PASSWORD=password mysql
docker run --name some-drupal --net some-network -p 8080:80 -d drupal
上記の環境変数で設定したDB設定をもとにDrupalサイトの設定を進めます。設定が終わると
Drupalの画面になります。
とりあえず適当に基本ページでコンテンツを作ってみます。
メニューにリンクもつけてページも/aboutとしてfrontページに設定します。こちらがfrontページ
-バックアップの作成
まずはDrupalのバックアップを
コマンドラインでまずはコンテナの動作を止めます。
docker stop some-drupal
続いてコンテナのイメージを作成します。ついでにイメージをファイルで保存
docker commit some-drupal some-drupal:v1
docker export some-drupal > some-drupal.tar
(確認はpodman imagesで、ファイルに出力は思った以上に時間がかかりました、感覚ですが10分以上)
次にmysqlのバックアップ。mysqlのコンテナに入って
docker exec -it some-mysql bash
Mysqlのダンプをとります。
mysqldump -uroot -p'password' drupal > mysqldump-v1
コンテナから抜けてダンプをPCに保存します。
docker cp some-mysql:/mysqldump-v1 .
(確認はlsコマンドで)
次にレストアをしてみます。
一度現状のコンテナを削除してみます。
docker stop some-mysql
docker rm some-drupal some-mysql
まずはmysqlとDrupal(先ほど保存したイメージから)起動します。
docker run -d --name some-mysql --network some-network -e MYSQL_DATABASE=drupal -e MYSQL_USER=user -e MYSQL_PASSWORD=password -e MYSQL_ROOT_PASSWORD=password mysql
docker run --name some-drupal --net some-network -p 8080:80 -d some-drupal:v1
mysqlのデータを戻します。
docker cp mysqldump-v1 some-mysql:/
docker exec -it some-mysql bash
コンテナにはいってダンプデータを戻します。
mysql -u root -p 'password' drupal < mysqldump-v1
exit
execでコンテナからから抜けてブラウザでサイトをみるともとに戻ってますね。