dockerデータボリュームvolumeのバックアップ、リカバリ、または移行
3575 ワード
1、vol_という名前の起動シンプルなコンテナとデータボリュームの作成(volume)
2、マウントディレクトリに入っていくつかのデータを書き込みます.この場合、コンテナ内の/dataディレクトリの下でこれらのデータを共有します.
3バックアップコンテナvol_simpleのデータボリュームデータ
まず、このコマンドは別の一時コンテナを起動し、このコンテナには2つのvolumeがマウントされています.最初のvolumeはvol_から来ています.simpleコンテナの共有、すなわちバックアップが必要なvolumeは、このコンテナの/dataディレクトリの下にvol_simpleコンテナデータボリューム内の同じデータ.2番目のvolumeは、ホストの現在のディレクトリをコンテナの/backupの下にマウントします.コンテナ実行後にバックアップするコンテンツ(/data)を/backup/dataにパッケージバックアップする.tar、次にコンテナを削除し、バックアップ後のdata.tarは現在のディレクトリの下に残っています.
4 volumeデータを新しいコンテナに復元
まず、データリカバリのターゲットとして新しいコンテナvol-bckを実行します.その後、2つのvolumeがマウントされた一時コンテナが起動し、最初のvolumはリカバリするvolumeと共有され、2つのコンテナ内の/dataディレクトリデータが一致し、空になります.2番目のvolumeはホストホストの現在のディレクトリをコンテナの/backupの下にマウントし、現在のディレクトリの下にdataがある.tarファイルは、このときコンテナ内の/backupディレクトリの下にもこのファイルがあり、このファイルを解包してコンテナのルートディレクトリの下に解放すると、コンテナの/dataディレクトリのデータが復元され、コンテナが削除され、vol-bckコンテナ内の/dataディレクトリのデータが共有volumeで復元されます.
[root@docker1 ~]# docker run -itd --name vol_simple -v /data ubuntu /bin/bash
90f3912df24c194cc59fe4a635a8c44fe7086098b2934507596ea9ed76284f00
2、マウントディレクトリに入っていくつかのデータを書き込みます.この場合、コンテナ内の/dataディレクトリの下でこれらのデータを共有します.
[root@docker1 ~]# docker inspect 90 | grep Source
"Source": "/var/lib/docker/volumes/6a36ff90c3e925549c6ba65694a4c35df302d77f66b4b164f056e39cb185a867/_data",
[root@docker1 ~]# cd /var/lib/docker/volumes/6a36ff90c3e925549c6ba65694a4c35df302d77f66b4b164f056e39cb185a867/_data
[root@docker1 _data]# ls
[root@docker1 _data]# touch a{1..10}.txt
[root@docker1 _data]# ls
a10.txt a1.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
[root@docker1 ~]# docker exec -it 90 /bin/bash
root@90f3912df24c:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@90f3912df24c:/# ls /data
a1.txt a10.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
root@90f3912df24c:/# exit
exit
3バックアップコンテナvol_simpleのデータボリュームデータ
[root@docker1 ~]# docker run --rm --volumes-from vol_simple -v $(pwd):/backup ubuntu tar cf /backup/data.tar /data
tar: Removing leading `/' from member names
[root@docker1 ~]# ls
data.tar
まず、このコマンドは別の一時コンテナを起動し、このコンテナには2つのvolumeがマウントされています.最初のvolumeはvol_から来ています.simpleコンテナの共有、すなわちバックアップが必要なvolumeは、このコンテナの/dataディレクトリの下にvol_simpleコンテナデータボリューム内の同じデータ.2番目のvolumeは、ホストの現在のディレクトリをコンテナの/backupの下にマウントします.コンテナ実行後にバックアップするコンテンツ(/data)を/backup/dataにパッケージバックアップする.tar、次にコンテナを削除し、バックアップ後のdata.tarは現在のディレクトリの下に残っています.
4 volumeデータを新しいコンテナに復元
[root@docker1 ~]# docker run -itd --name vol-bck -v /data ubuntu /bin/bash
3b3c668b9f294c60f03870e7765e486615e969e373ffee6179dd68090a0f2479
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b3c668b9f29 ubuntu "/bin/bash" 39 seconds ago Up 36 seconds vol-bck
90f3912df24c ubuntu "/bin/bash" 8 minutes ago Up 8 minutes vol_simple
[root@docker1 ~]# docker run --rm --volumes-from vol-bck -v $(pwd):/backup ubuntu tar xf /backup/data.tar -C /
[root@docker1 ~]# docker inspect 3b | grep Source
"Source": "/var/lib/docker/volumes/b0ff6a83862f7f36f0f2b91a611d6f506acaac757b557c3b5ab0238361eb2004/_data",
[root@docker1 ~]# cd /var/lib/docker/volumes/b0ff6a83862f7f36f0f2b91a611d6f506acaac757b557c3b5ab0238361eb2004/_data
[root@docker1 _data]# ls
a10.txt a1.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
[root@docker1 _data]# docker exec -it 3b /bin/bash
root@3b3c668b9f29:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@3b3c668b9f29:/# ls /data
a1.txt a10.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
まず、データリカバリのターゲットとして新しいコンテナvol-bckを実行します.その後、2つのvolumeがマウントされた一時コンテナが起動し、最初のvolumはリカバリするvolumeと共有され、2つのコンテナ内の/dataディレクトリデータが一致し、空になります.2番目のvolumeはホストホストの現在のディレクトリをコンテナの/backupの下にマウントし、現在のディレクトリの下にdataがある.tarファイルは、このときコンテナ内の/backupディレクトリの下にもこのファイルがあり、このファイルを解包してコンテナのルートディレクトリの下に解放すると、コンテナの/dataディレクトリのデータが復元され、コンテナが削除され、vol-bckコンテナ内の/dataディレクトリのデータが共有volumeで復元されます.