ウェブサイト検索

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 run

cronタスクとしてコマンドを実行します。

バックアップを復元する

バックアップを復元するために、同様の手法を使用できます。既存のボリュームの内容を置き換える際は、バックアップアーカイブにバインドマウントされたボリュームを持つ別の一時コンテナを作成します。アーカイブの内容をボリュームのマウントパスに抽出してください。

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 start
docker 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のインストールディレクトリをアーカイブすることでバックアップを作成できますが、これは可能な限り避けるべきです。一時的なバックアップコンテナは面倒に思えるかもしれませんが、それらは簡単にスクリプト化でき、ボリュームドライバー全体で予測可能な結果を提供します。

ボリュームバックアップアーカイブを作成したら、できるだけ早くリモートストレージにアップロードすることを忘れないでください。元の機械に保存されたバックアップは、アクセスを失ったりハードウェアの故障が発生した場合には役に立ちません。

関連記事: