LoginSignup
3
4

More than 3 years have passed since last update.

【Docker】データボリュームをバックアップ→リストア

Posted at

データが入ったDBがあると仮定して話を進めます。

ボリュームと紐づいているコンテナの名前を確認

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7b6a79314721        sample-app_web       "/bin/sh -c 'rm -f t…"   5 minutes ago       Up 5 minutes        0.0.0.0:3000->3000/tcp   sample-app_web_1
2ed21c2aac12        postgres            "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:5434->5432/tcp   sample-app_db_1

NAMESを参照。今回の場合はsample-app_db_1

コンテナをストップ

$ docker-compose stop

バックアップ

docker run --rm --volumes-from sample-app_db_1 -v `pwd`:/backup busybox tar cvf /backup/backup.tar /var/lib/postgresql/data

Postgresqlの場合の例です。
sample-app_db_1の部分に、先ほどのステップで確認したコンテナ名を設定
mysplの場合/var/lib/postgresql/dataの部分を/var/lib/mysqlに変更

(mysqlの場合)
$ docker run --rm --volumes-from sample-app_db_1 -v `pwd`:/backup busybox tar cvf /backup/backup.tar /var/lib/mysql

コンテナとボリュームを削除→コンテナを再作成

$ docker-compose down --volumes
$ docker-compose up -d

コンテナをストップ

$ docker-compose stop

リストア

$ docker run --rm --volumes-from sample-app_db_1 -v `pwd`:/backup busybox tar xvf /backup/backup.tar

(mysqlの場合)

同じ
$ docker run --rm --volumes-from sample-app_db_1 -v `pwd`:/backup busybox tar xvf /backup/backup.tar

最後に

本当はこの方法より、SQLによるダンプでバックアップを取るほうが望ましいらしいです。

まだ検証できていないので、興味がある方はご自身で調べてみてください。

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4