ある Docker ホストから別のホストにデータをバックアップ、復元、または移行する必要がある場合は、通常、ボリュームが最適です。 ボリュームを使用しているコンテナを停止してから、ボリュームのディレクトリ( など /var/lib/docker/volumes/<volume-name>
)をバックアップできます。 バインドマウントなどの他の代替手段は、LinuxやmacOSなどのUNIXシステムや C:/Users/John
Windowsなど、 /tmp/source
特定のディレクトリ構造が使用可能なホストマシンのファイルシステムに依存します。
通常、データボリュームをバックアップする場合は、バックアップするボリュームを使用して新しいコンテナを実行し、tarコマンドを実行してボリュームの内容のアーカイブを作成します。
docker run --rm \
-v "$VOLUME_NAME":/backup-volume \
-v "$(pwd)":/backup \
busybox \
tar -zcvf /backup/my-backup.tar.gz /backup-volume
既存のバックアップを使用してボリュームを復元するには、ターゲットボリュームをマウントする新しいコンテナを実行し、tarコマンドを実行してアーカイブをターゲットボリュームに解凍します。
Googleですばやく検索すると、Dockerキャプテンブレットフィッシャーの このような ボリュームのバックアップに役立つ多数のbashスクリプトが返されます。 このスクリプトを使用すると、より単純な ./vackup export my-volume backup.tar.gz
. このようなスクリプトは完全に有効なアプローチですが、拡張機能チームは、このツールをDocker Desktopに統合して、より良い開発者エクスペリエンスを提供できるとしたらどうでしょうか。 興味深いことに、それはすべて、Bretのストリーミング ショーでライブになる前日に簡単なデモとして始まりました!
これで、Dockerデスクトップからボリュームをバックアップできます
新しい Volumes Backup & Share 拡張機能を使用して、数回クリックするだけでボリュームをバックアップできるようになりました。 この 拡張機能 はマーケットプレイスで入手でき、macOS、Windows、およびLinuxで動作します。 また、 GitHub で OSS コードをチェックして、拡張機能がどのように開発されたかを確認できます。
拡張機能で何ができますか?
この拡張機能を使用すると、次のことができます。
- ボリュームに保持されているデータ (Postgres や MySQL からのデータベースデータなど) を圧縮ファイルにバックアップします。
- バックアップを Docker Hub にアップロードして、誰とでも共有できます。
- 既存のバックアップから新しいボリュームを作成するか、既存のボリュームの状態を復元します。
- ローカルボリュームを別の Docker ホストに転送します (SSH 経由)。
- ボリュームのクローン作成、空化、削除などの他の基本的なボリューム操作。
以下のシナリオでは、John、Alex、Emma が Volume Backup & Share 拡張機能で Docker Desktop を使用しています。 ジョンは拡張機能を使用して、自分のボリューム(my-app-volume)をDocker Hubを介して他のチームメイトと共有しています。 ボリュームは、[レジストリにエクスポート] オプションを使用してイメージ (john/my-app-volume:0.0.1
) として Docker Hub にアップロードされます。 彼の同僚である Alex と Emma は、同じ拡張機能を使用して、[レジストリからインポート] オプションを使用して、Docker Hub から独自のボリュームにボリュームをインポートします。
さまざまな種類のボリューム バックアップを作成する
拡張機能からボリュームをバックアップする場合、バックアップの種類を選択できます。
- ローカルファイル: ホストファイルシステムの任意のディレクトリに、ボリュームの内容を含む圧縮ファイル(gzipで圧縮されたtarball)を作成します。
- ローカル・イメージ: ボリューム・データを既存のイメージ・ファイル・システムのディレクトリーに
/volume-data
保存します。このイメージのファイル・システムを調べると、バックアップが に保存され/volume-data
ていることがわかります。 - 新しいイメージ:新しく作成された イメージのディレクトリに
/volume-data
ボリュームデータを保存します。 - レジストリ: ローカル (
localhost:5000
など) でも、Docker Hub や GitHub Container Registry のようにホストされているかに関係なく、任意のイメージ レジストリにローカル ボリュームをプッシュします。これにより、数回クリックするだけでチームとボリュームを共有できます。> 現在、拡張機能によって Docker Hub にプッシュするためにサポートされている最大ボリューム サイズは 10 GB です。 この制限は、ユーザーから受け取ったフィードバックに応じて、拡張機能の将来のバージョンで変更される可能性があります。
ボリュームからの復元またはインポート
上記のさまざまな種類のボリューム バックアップと同様に、バックアップを新規または既存のボリュームにインポートまたは復元できます。
ボリュームを復元するのがローカル ファイル、ローカル イメージ、新しいイメージ、またはレジストリのいずれからでも選択できます。
ボリュームを別の Docker ホストに転送する
また、ボリュームの内容を、UbuntuサーバーやRaspberry Piなど、Dockerが実行されている別のホスト(Docker EngineまたはDocker Desktop)にコピーすることもできます。
拡張機能から、ローカル・ボリュームのコピー先の宛先ホスト( など) [email protected]
と宛先ボリュームの両方を指定できます。
> SSH を有効にして、ソースと宛先の Docker ホストの間で構成する必要があります。 known_hostsファイルにリモートホストのSSH公開キーがあることを確認します。
以下は、ローカルボリュームをDockerデスクトップからラズベリーパイに転送する例です。
その他の操作を実行する
拡張機能は、表示、複製、空、削除などの他のボリューム操作を提供します。
舞台裏でどのように機能しますか?
一言で言えば、バックアップまたは復元操作が実行されようとしているとき、拡張機能はデータの破損を防ぐために指定されたボリュームに接続されているすべてのコンテナーを停止し、操作が完了するとそれらを再起動します。
これらの操作はバックグラウンドで行われるため、より多くの操作を並行して実行したり、拡張機能画面を離れてDocker Desktopの他の部分に移動して、操作の実行中に作業を続行したりできます。
たとえば、ボリュームを使用してデータベースデータを保持するPostgresコンテナがある場合(つまり、 -v my-volume:/var/lib/postgresql/data
)、拡張機能はボリュームに接続されているPostgresコンテナを停止し、ボリューム内のすべてのファイルを含むファイルを生成 .tar.gz
してから、コンテナを起動し、指定したローカルディレクトリにファイルを配置します。
データベースのような開いているファイルの場合は、通常、好みのバックアップツールを使用してバックアップファイルを作成することをお勧めしますが、そのファイルをDockerボリュームに保存した場合でも、Dockerボリュームをイメージまたはtarballに取得してリモートストレージに移動して保管します。
次は何ですか?
拡張機能を試してみて、 ここでフィードバックをお寄せください。
また、Docker拡張機能を試したことがない場合は、拡張機能マーケットプレイスを探索して、それらのいくつかをインストールすることをお勧めします。 また、Windows、WSL2、macOS(IntelとAppleシリコンの両方)、Linuxのすべてのプラットフォームで独自のDocker拡張機能の開発を開始することもできます。
Extensions SDK の詳細については、 公式ドキュメントをご覧ください。 チュートリアル、設計ガイドライン、および拡張機能を構築するために必要なその他のすべてが含まれています。
拡張機能の準備ができたら、 こちらから拡張機能マーケットプレイスに送信できます。