我希望复制包括所有数据的docker化应用程序,该示例使用三个容器:1)Web应用程序容器(例如CMS),2)数据库容器和3)数据卷容器(使用docker卷)。
通过docker-compose,我可以轻松地创建具有初始数据的相同实例的这些容器。但是,如果我想要在同一服务器上克隆一组正在运行的容器,并包括所有累积的数据,就像我克隆KVM容器一样,该怎么办?对于KVM,我会挂起或关闭虚拟机,使用类似virt-clone的工具进行克隆,然后启动克隆的客户机,它具有与原始客户机相同的所有数据。
一个用例是在进行重大更改或安装新版本插件之前,创建正在运行的开发Web服务器的克隆/快照。
使用Docker,这似乎不那么简单,因为数据不会自动与其容器一起复制。理想情况下,我想做一些简单的事情,例如
与此相关的问题是如何执行类似于docker化应用程序的KVM快照,并具有轻松返回先前状态的功能。最好的克隆、快照和还原应该可以在最少的停机时间内完成。
用什么方法来实现这些操作会更好呢?
通过docker-compose,我可以轻松地创建具有初始数据的相同实例的这些容器。但是,如果我想要在同一服务器上克隆一组正在运行的容器,并包括所有累积的数据,就像我克隆KVM容器一样,该怎么办?对于KVM,我会挂起或关闭虚拟机,使用类似virt-clone的工具进行克隆,然后启动克隆的客户机,它具有与原始客户机相同的所有数据。
一个用例是在进行重大更改或安装新版本插件之前,创建正在运行的开发Web服务器的克隆/快照。
使用Docker,这似乎不那么简单,因为数据不会自动与其容器一起复制。理想情况下,我想做一些简单的事情,例如
docker-compose clone
,最终得到第二组容器,与第一组完全相同,包括所有它们的数据。 Docker和docker-compose都没有提供克隆命令(截至1.8版本),因此我需要考虑各种方法,例如备份和还原数据/数据库或使用第三方工具,例如Flocker。与此相关的问题是如何执行类似于docker化应用程序的KVM快照,并具有轻松返回先前状态的功能。最好的克隆、快照和还原应该可以在最少的停机时间内完成。
用什么方法来实现这些操作会更好呢?
- 复制包含docker-compose文件的目录
- 暂停容器
- 创建第二组容器(但不一定要运行)
- 确定要复制的数据卷
- 备份这些数据卷
- 将数据卷还原到克隆的数据容器中
启动第二组容器
这是否是正确的做法,我该如何实现?我对如何在脚本中执行步骤4 (确定要复制的数据卷) 不太确定,因为命令
docker volume ls
只在Docker 1.9中可用。如何使用此方法类似于KVM快照?(可能使用ZFS的COW文件系统功能,我的Docker安装已经在使用)。
docker volume create, inspect, ls, rm
commands,但这些命令并不能完全提供克隆所需的功能。您有没有关于如何在脚本中确定要复制的数据卷的建议? - ChrisW