Docker Desktop for Windowsでボリュームのバックアップとリストア

Dockerボリュームのバックアップとリストア Docker

Docker Desktopで使用していたDockerボリュームをUbuntu on WSL2で動かすDockerサービスに移したかったので方法をメモ。

対象コンテナとボリュームの確認

Dockerの実行中のコンテナを確認。NAMESが「mysqld」のコンテナが対象コンテナ。

>docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                  NAMES
6160e4d8eaf0   wordpress:latest   "docker-entrypoint.s…"   11 minutes ago   Up 12 minutes   0.0.0.0:5000->80/tcp   wordpress
ff1d8befec31   mysql:5.7          "docker-entrypoint.s…"   12 minutes ago   Up 12 minutes   3306/tcp, 33060/tcp    mysqld

Dockerボリュームを確認。「ubuntu_db-store」が今回バックアップする対象ボリューム。

>docker volume ls
DRIVER    VOLUME NAME
local     ubuntu_db-store

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

バックアップ用のコンテナを作成

バックアップ対象のボリュームをマウントした使い捨てコンテナを作成して、ホストと共有しているディレクトリへバックアップファイルを作成します。

docker run --rm --volumes-from mysqld -v ${PWD}:/backup busybox tar cvf /backup/backup.tar /var/lib/mysql

これを実行すると「var/lib/mysql/」は以下のファイルリストが表示され、これらのファイルが「backup.tar」としてまとめられてカレントディレクトリに作成されます。

ボリュームのリストア

リストア先のコンテナを起動しておく

$ docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                   NAMES
c09e1c28fb0b   wordpress:latest   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:5000->80/tcp, :::5000->80/tcp   wordpress
5530c9d08346   mysql:5.7          "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   3306/tcp, 33060/tcp            mysqld

リストア用のコンテナ作成

リストア対象のコンテナのボリュームをマウントして、カレントディレクトリをバインドマウントし、その中にある「backup.tar」を解凍してリストア対象のボリュームにリストアします。

docker run --rm --volumes-from mysqld -v ${PWD}:/backup busybox tar xvf /backup/backup.tar
この記事を書いた人

PHPが好物な個人開発プログラマ。フリーランスエンジニアとしてWebサービス作ったりしてます。15年の経験を生かしてMENTAでメンターもやってます。WordPressやPHPでお困りのことがあればご相談に乗りますのでDMください。

Follow on SNS
Docker
SOHO MIND

Comments

タイトルとURLをコピーしました