Docker:如何将容器及其数据克隆到一个新的

有没有办法将容器及其数据克隆到具有不同启动参数的新容器中?

目前,我只能启动一个新的克隆容器(从自定义图像),没有数据。

我告诉你我必须做什么:我启动了一个带有一些启动参数的“docker-jenkins”容器,然后configuration它,但是现在我注意到我忘记了一些重要的启动参数,所以我想重新启动相同的容器,添加更多的启动参数。 ..

问题是(如果我理解的很好),我不能修改现有的运行容器的起始参数,所以我的想法是开始一个克隆的(数据INCLUDED)具有不同的参数,但我不知道如何做…

有人能帮我吗?

1.使用卷

如果您的唯一要点是坚持您的数据,您需要使用卷。

数据卷是绕过联盟文件系统的一个或多个容器内的特定目录。 数据卷为持久或共享数据提供了一些有用的function:

  • 当容器被创build时,卷被初始化。 如果容器的基础映像包含指定安装点上的数据,则在卷初始化时,现有数据将被复制到新卷中。 (请注意,在安装主机目录时这不适用。)
  • 数据卷可以在容器之间共享和重用。
  • 数据量的变化是直接进行的。
  • 更新图像时,不会包含对数据量的更改。
  • 即使容器本身被删除,数据量仍然存在。

资源:

https://docs.docker.com/engine/tutorials/dockervolumes/

从本质上说,你将一个文件夹从你的机器映射到你的容器。 当你杀死容器并产生一个新的实例(修改了参数),你的卷(与现有的数据)被重新映射。

例:

docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins 

资源:

https://hub.docker.com/_/jenkins/


2.使用提交来创build快照

不同的路线是使用docker commit命令。

将容器的文件更改或设置提交到新映像可能很有用。 这允许您通过运行交互式shell来debugging容器,或者将工作数据集导出到其他服务器。 一般来说,最好使用Dockerfiles来以可logging和可维护的方式pipe理你的图像。

提交操作将不包含容器内安装的卷中包含的任何数据。 https://docs.docker.com/engine/reference/commandline/commit/

 $ docker ps ID IMAGE COMMAND CREATED STATUS PORTS c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours $ docker commit c3f279d17e0a svendowideit/testimage:version3 f5283438590d $ docker images REPOSITORY TAG ID CREATED SIZE svendowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB 

也可以使用更改的configuration进行提交:

 docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a svendowideit/testimage:version4