Dockerボリュームのバックアップ方法
Dockerボリュームは、コンテナとは別に永続的なデータを保存するために使用されます。ボリュームに保持されているデータは、コンテナが停止した後もアクセス可能であり、状態を持つワークロードをコンテナ化することを可能にします。
ボリュームはコンテナよりも長持ちしますが、これは生産アプリケーションにとって十分な保護ではありません。災害後に復元できるように、ボリュームのバックアップを取るべきです。定期的にボリュームのバックアップを作成することで、Dockerホストが侵害されたりデータが誤って削除された場合でも、環境を復元できるようになります。
バックアップの管理
Dockerにはボリュームをバックアップしたり、その内容をエクスポートするための組み込み機構がありません。ボリュームにアクセスしてデータをバックアップ先にコピーするための独自のソリューションを設定する必要があります。
バックアップが必要なボリュームをマウントする一時的なコンテナを作成するのが、通常最も簡単な方法です。追加します
--volumes-from
Aへのフラッグ
docker run既存のコンテナのボリュームをバックアップコンテナに自動的にマウントするコマンド。これにより、次のようなツールを使用できます。
tarそして
gzipボリュームの内容のアーカイブを作業ディレクトリに配置します。
こちらがこの技術の完全な例です:
Create a container that stores data in the "mysql_data" volume
docker run -d \
--name mysql \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mysql \
mysql:8
Start a temporary container to back up the "mysql_data" volume
docker run --rm \
--volumes-from mysql
-v $PWD:/backup-dir \
ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql
その
--volumes-fromフラグは、一時的なバックアップコンテナがアクセスを受けることを意味します
mysqlコンテナの容量。その
/var/lib/mysqlバックアップコンテナ内のディレクトリは、これが使用されるパスであるため、ボリュームの内容を公開します。
mysqlコンテナ。パスをターニングすると、バックアップとして使用できるボリュームのアーカイブが生成されます。それは、設定されたバインドマウントのおかげで作業ディレクトリに預けられます。
-v
旗
その
--rmフラグは、コマンドが完了するとすぐにバックアップコンテナを削除します。これにより、アーカイブが作業ディレクトリに残り、長期保存に移動する準備ができます。バックアップ作成を自動化するには、追加することができます。
docker runcronタスクとしてコマンドを実行します。
バックアップを復元する
バックアップを復元するために、同様の手法を使用できます。既存のボリュームの内容を置き換える際は、バックアップアーカイブにバインドマウントされたボリュームを持つ別の一時コンテナを作成します。アーカイブの内容をボリュームのマウントパスに抽出してください。
docker run --rm \
--volumes-from mysql
-v $PWD:/backup-dir
bash -c "cd /var/lib/mysql && tar xvf /backup-dir/mysql-backup.tar"
これは、コンテナがボリュームをアクティブに使用している場合、リスクがある可能性があります。使用中のファイルを上書きすると、エラーや予期しない動作を引き起こす可能性があります。あなたは次のようなものを使用することができます。
docker stopコンテナを一時停止し、その後再起動するためのコマンド
docker startdocker stop mysql
Restore the backup
...
docker start mysql
新しいホストにバックアップを復元する場合は、コンテナを開始する前にボリュームを作成してください。
docker volume create new_volume次に、このボリュームを一時的なコンテナにマウントします:
docker run --rm \
-v new_volume:/var/lib/mysql
-v $PWD:/backup-dir \
ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql
アプリケーションコンテナを同じボリュームで開始すると、復元したファイルにアクセスできます:
docker run -d \
--name mysql \
-v new_volume:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mysql \
mysql:8
これらの手順をテストすることで、災害に直面した場合にもバックアップが使用可能であることを確認できます。
ボリュームの直接バックアップ
上記で概説した手順は、Dockerボリュームをバックアップするための推奨方法です。ただし、ボリュームがホストのファイルシステムに保存されている場所から直接コンテンツをコピーする方が適している場合もあります。
通常、あなたの巻の内容は次の場所にあります
/var/lib/docker/volumes各巻には、それぞれのサブディレクトリがあります。たとえば、
/var/lib/docker/volumes/mysqlこの最上位のパス内に、あなたは見つけることができます。
_dataボリューム内に保存されているすべてのファイルが格納されているフォルダー。
アーカイブする
/var/lib/docker/volumesディレクトリは、ホスト上のすべてを迅速にバックアップするための便利な方法です。使用する必要があります
sudoしかし、この道の下にあるすべては所有されています。
rootこの方法でボリュームをバックアップすることは、インストール間で移植性がないため、定期的な使用には推奨されません。Dockerのボリュームドライバーシステムにより、ボリュームデータはホストのファイルシステムに必ずしも保存されるわけではなく、ネットワーク共有や他のリモート位置にある可能性があります。この技術は、特定のマシンでメンテナンスを行う前に迅速なバックアップを取りたい場合にのみ試みるべきです。
要約
Dockerボリュームはアプリケーションの永続データを含んでいるため、注意して取り扱う必要があります。ホストが侵害された場合や、間違ってコンテナプロセスがファイルを削除した場合にデータ損失から保護するために、定期的なバックアップを作成することが重要です。
Dockerのインストールディレクトリをアーカイブすることでバックアップを作成できますが、これは可能な限り避けるべきです。一時的なバックアップコンテナは面倒に思えるかもしれませんが、それらは簡単にスクリプト化でき、ボリュームドライバー全体で予測可能な結果を提供します。
ボリュームバックアップアーカイブを作成したら、できるだけ早くリモートストレージにアップロードすることを忘れないでください。元の機械に保存されたバックアップは、アクセスを失ったりハードウェアの故障が発生した場合には役に立ちません。
