新しいホストへのボリューム移行のシミュレーション
実際のシナリオでは、scp、rsync、またはファイル共有サービスなどのツールを使用して、バックアップファイルを新しいホストに転送します。この実験(Lab)では、元のボリュームを削除し、データを復元するための新しいボリュームを作成することにより、移行をシミュレートします。
新しいホスト環境のシミュレーション
まず、古いコンテナをクリーンアップして、新しい環境への移行をシミュレートしましょう。
docker rm -f my-container data-generator
次に、新しいホストで最初から始めることをシミュレートするために、元のボリュームを削除しましょう。
docker volume rm my-data-volume
「新しいホスト」上のボリュームを表す新しいボリュームを作成します。
docker volume create my-new-host-volume
バックアップからのボリュームの復元
次に、バックアップを新しいボリュームに復元します。
docker run --rm -v my-new-host-volume:/destination -v $(pwd):/backup ubuntu bash -c "cd /destination && tar xvf /backup/my-data-volume-backup.tar"
このコマンドは次のことを行います。
- 一時的なコンテナを作成します。
- 新しいボリュームを
/destination にマウントします。
- 現在のディレクトリ(バックアップが配置されている場所)を
/backup にマウントします。
- tar アーカイブを
/destination ディレクトリに展開します。
復元されたデータの検証
すべてのデータが新しいボリュームに正しく復元されたことを確認しましょう。
docker run --rm -v my-new-host-volume:/data ubuntu ls -la /data
以前と同じファイル構造が表示されるはずです。
total 12
drwxr-xr-x 3 root root 4096 Oct 1 12:34 .
drwxr-xr-x 1 root root 4096 Oct 1 12:34 ..
drwxr-xr-x 2 root root 4096 Oct 1 12:34 config
-rw-r--r-- 1 root root 21 Oct 1 12:34 important.txt
-rw-r--r-- 1 root root 24 Oct 1 12:34 test.txt
データの整合性を確認するために、ファイルのコンテンツを確認します。
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/important.txt
出力:
This is important data
設定ファイルも確認します。
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/config/settings.conf
出力:
database_url=postgres://user:password@db:5432/mydb
新しいコンテナでの復元されたボリュームの使用
ボリュームを正常に「移行」したので、新しいコンテナで使用してみましょう。
docker run --name my-new-container -v my-new-host-volume:/app/data -d nginx
これにより、復元されたボリュームを /app/data にマウントする新しい Nginx コンテナが作成されます。
コンテナがボリュームデータにアクセスできることを確認しましょう。
docker exec my-new-container ls -la /app/data
以前と同じファイルが表示されるはずです。これにより、移行が成功したことが確認されます。
新しいボリュームを使用するためのアプリケーションの更新
実際のシナリオでは、ボリュームを新しいホストに移行した後、新しいボリューム名またはパスを使用するように Docker Compose ファイルまたはコンテナ実行コマンドを更新する必要があります。たとえば、Docker Compose を使用している場合は、docker-compose.yml ファイルを次のように更新できます。
version: "3"
services:
webapp:
image: nginx
volumes:
- my-new-host-volume:/app/data
volumes:
my-new-host-volume:
external: true
これにより、外部で作成された my-new-host-volume という名前のボリュームを使用するように Docker に指示します。
移行プロセスはこれで完了です!次のことを正常に実行しました。
- Docker ボリュームを作成し、データを追加しました。
- ボリュームデータをバックアップしました。
- シミュレートされた「新しいホスト」上に新しいボリュームを作成しました。
- バックアップデータを新しいボリュームに復元しました。
- データの整合性を検証しました。
- 新しいコンテナを移行されたボリュームに接続しました。