Docker卷:备份

我已经创build了一个卷容器。 还有一个容器从容器中安装。

卷容器:

docker run -d --name nexus-data nexus:1.0 echo "data-only container for Nexus" 

我的Nexus容器:

 docker run -d -p 8443:8443 -p 8081:8081 --name nexus --restart=always --volumes-from nexus-data nexus:1.0 

所以这工作正常。 我能够删除和重新创build我的nexus容器,而不会丢失数据。 卷容器(不处于运行状态)正在保存数据。

但是这种方法的瓶颈就是容器。 当我意外删除这个容器时,所有的数据都没有了。 这可以发生得很快,因为一些有用的命令将删除停止的容器也将删除卷容器。

所以我想为我的卷容器创build备份。 我试过的方法:

 $ docker cp nexus:/this/folder/ /home/ubuntu/backup-folder 

 $ docker import nexus > /home/ubuntu/backup.tar 

所以我有一个文件夹和一个.tar在我的主目录。 现在我想知道导入其中一个备份的正确方法是什么?

我读了有关docker export命令来创build一个“新的图像”,但我不喜欢这种方法,因为我的备份文件夹是相当大的。

简单地不要使用数据容器容器:自从docker 1.9以后,您可以使用docker volume create来代替。 Docker现在有卷命令 。

以下示例还使用docker volume create命令创build了my-named-volume卷。

 $ docker volume create --name my-named-volume -o size=20GB $ docker run -d -P \ -v my-named-volume:/opt/webapp \ --name web training/webapp python app.py 

这些卷被命名,由docker卷ls列出,您可以备份/var/lib/docker/volumes

使用数据卷容器,您需要记住该容器中的数据pathdocker inspect -f '{{ (index .Mounts 0).Source }} ),将其写入文件,并在您使用该path创build一个新的数据卷容器。
我曾经用updateDataContainerPath.sh来做到这一点。 请参阅“ 重新安装孤立的泊坞窗卷 ”。

自从docker 1.9和命名卷之后,我不需要这个复杂的机制。