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
Comments