dockerデータボリュームvolumeのバックアップ、リカバリ、または移行

3575 ワード

1、vol_という名前の起動シンプルなコンテナとデータボリュームの作成(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で復元されます.