最終更新日:2023年02月11日レベル:★★★☆☆Dockerでデータを永続的に保存する際に利用するデータボリュームをバックアップ・リストアする方法をご紹介します。この記事の目次バックアップバックアップするDocker環境バックアップ実行リストアリストアするDocker環境リストア実行リストアの確認Dockerで環境を構築し運用するにあたり、データを永続化して保持したい場合が出てきます(Dockerで構築した場合、コンテナを破棄するとそのままではデータも消えてしまいます)。対策として「バインドマウント」という仕組みを使ってホスト側のファイルやディレクトリをコンテナ側にマウントする方法とともに「データボリューム」(または「ボリューム」)という仕組みがあります。一方でDockerで実運用を始めると障害対策などの理由で永続化したデータをバックアップする必要も出てきます。「バインドマウント」の場合であれば、ホスト側のファイルやディレクトリをバックアップすれば良いのですが、データボリュームの場合は単純にデータボリュームを構成するファイルをバックアップすれば良いというわけにはいきません。データボリュームの実態ファイルはLinuxの場合「/var/lib/docker/volumes/」以下にあります。EngineのVM(~/Library/Containers/Docker/Data/vms/0/)で動いているのでFinder等で直接参照できません。データボリューム名」で確認できます。今回は、データボリュームに保存したファイル類をバックアップ・リストアする方法をご紹介します。Composeで動かすものとし、docker-compose.ymlは下記のようなものとします。db_data:※mysql,およびphp-apacheのDockerfileの設定は省略します。今回の例では、データボリュームはMySQLのデータベースファイル(/var/lib/mysql/)の格納用に利用しており、データベースファイル全てをバックアップするものとします。次のコマンドでデータボリュームをバックアップします。コンテナ名」で指定したコンテナ経由でデータボリュームにアクセスします。ファイルのバックアップには「busybox」という軽量Unixを利用します。czf)実行後、コンテナは削除(--rm)されます。※注意点:この方法ではコンテナ「backupdb」を停止することができません。コンテナ「backupdb」を停止できる環境であれば次のコマンドでバックアップすることもできます。Composeで動かすものとし、docker-compose.ymlは下記のようなものとします。db_data:※mysql,およびphp-apacheのDockerfileの設定は省略します。リストア実行リストアするマシン(ホスト側:Dockerコンテナ側ではない)の適当なディレクトリにバックアップファイル(dbbackup.tar.gz)を準備します。※Dockerコンテナがアクセスできる権限を持つ場所にバックアップファイルを置くことに注意。リストアするコンテナのデータボリューム名を確認します。restore_test_db_dataコンテナの/var/lib/mysql/ディレクトリ内を確認します。undo_002/var/lib/mysql/ディレクトリ内の全てのファイル/ディレクトリを一旦削除します。/var/lib/mysql/*"削除確認:ファイルは何も残っていないことを確認します。..バックアップファイルを/var/lib/mysql/以下に展開します。/backup/dbbackup.tar.gzリストアの確認コンテナに入ります。bashbash-4.4#コンテナのMySQLにログインしデータベースが存在していることを確認します。sec)実際にデータベースにアクセスし、問題なければリストア完了です。Reserved.ツイート。