代码之家  ›  专栏  ›  技术社区  ›  DenCowboy

Docker卷:备份

  •  4
  • DenCowboy  · 技术社区  · 9 年前

    我已经创建了一个卷容器。以及从卷容器装载到en的容器。

    卷容器:

    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
    

    所以这很好。我能够删除并重新创建我的nexus容器,而不会丢失数据。卷容器(未处于运行状态)正在保存数据。

    但这种方法的瓶颈是卷容器。当我不小心删除这个容器时,所有数据都不见了。 这可能发生得很快,因为一些删除停止的容器的有用命令也会删除卷容器。

    因此,我想为我的卷容器创建备份。 我想办法:

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

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

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

    我读到关于 docker export 命令创建一个“新映像”,但我不喜欢这种方法,因为我的备份文件夹很大。

    1 回复  |  直到 9 年前
        1
  •  4
  •   Community CDub    8 年前

    不要使用数据卷容器:由于docker 1.9,您可以使用 docker volume create 相反Docker现在有 volume commands .

    以下示例还创建了 my-named-volume 卷,这次使用 docker卷创建 命令

    $ 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 .

    使用数据卷容器,您需要记住该容器中数据的路径( docker inspect -f '{{ (index .Mounts 0).Source }} ),将其写入文件,并在创建新的数据卷容器时使用该路径。
    我过去常常这样做 updateDataContainerPath.sh 。请参阅“ Reattaching orphaned docker volumes ".

    我不需要那种复杂的机制,因为docker 1.9和命名卷。