用于克隆/快照Docker容器(包括其数据)的脚本?

Chr*_*isW 5 shell clone web-applications docker docker-compose

我想克隆一个包含所有数据的dockerized应用程序,在此示例中,它使用三个容器:1)Web应用程序容器(例如CMS),2)数据库容器和3)数据量容器(使用docker卷) 。

使用docker-compose,我可以仅使用初始数据轻松地创建这些容器的相同实例。但是,如果我想以与克隆KVM容器类似的方式在同一服务器上克隆一组正在运行的容器(包括其所有累积数据),该怎么办?使用KVM时,我将挂起或关闭VM,使用virt-clone之类进行克隆,然后启动克隆的guest虚拟机,该guest虚拟机具有与原始数据相同的所有数据。

一种用例是在进行重大更改之前或在安装新版本的插件之前,为正在运行的开发Web服务器创建克隆/快照。

使用Docker,这似乎并不那么简单,因为数据不会自动与其容器一起复制。理想情况下,我想做一些简单的事情docker-compose clone,最后得到与第一组相同的第二组容器,包括它们的所有数据。Docker和docker-compose都不提供克隆命令(从版本1.8开始),因此我需要考虑各种方法,例如备份和还原数据/数据库或使用第三方工具(例如Flocker)。

与此相关的是一个问题,该问题是如何执行与Docker化应用程序的KVM快照类似的功能,并能够轻松返回到先前的状态。最好是,克隆,快照和还原应尽可能减少停机时间。

完成这些任务的首选Docker方法是什么?

编辑:基于第一个答案,我将使我的问题更具体一些,以便希望能够到达编程步骤,以便能够执行类似的操作docker-compose-clonedocker-compose-snapshot使用bash或python脚本。克隆Docker卷的内容似乎是实现此目的的关键,因为每次我在同一yaml文件上运行docker-compose时,容器本身基本上都是克隆的。

通常,我的全克隆脚本需要

  1. 复制包含docker-compose文件的目录
  2. 暂时停止容器
  3. 创建(但不一定运行)第二组容器
  4. 确定要复制的数据量
  5. 备份这些数据量
  6. 将数据卷还原到克隆的数据容器中
  7. 启动第二组容器

    • 这将是正确的解决方法,我应该如何实施呢?我尤其不确定如何在脚本中执行步骤4(确定要复制的数据量),因为该命令docker volume ls仅在Docker 1.9中可用。

    • 我如何使用这种方法来做类似于KVM快照的事情?(可能使用ZFS的COW文件系统功能,而我的Docker安装已在使用该功能)。

dne*_*hin 0

使用 docker,您可以将所有状态保存在卷中。只要容器重复使用相同的卷(来自主机或数据卷容器),就可以从映像重新创建容器。

我不知道从数据卷容器导出卷的简单方法。我知道 docker 1.9 版本将添加一些用于与卷交互的顶级 api,但我不确定导出是否会立即可用。

如果您使用主机卷,则可以从 docker 外部管理状态。