Docker:如何将容器及其数据克隆到一个新的
有没有办法将容器及其数据克隆到具有不同启动参数的新容器中?
目前,我只能启动一个新的克隆容器(从自定义图像),没有数据。
我告诉你我必须做什么:我启动了一个带有一些启动参数的“docker-jenkins”容器,然后configuration它,但是现在我注意到我忘记了一些重要的启动参数,所以我想重新启动相同的容器,添加更多的启动参数。 ..
问题是(如果我理解的很好),我不能修改现有的运行容器的起始参数,所以我的想法是开始一个克隆的(数据INCLUDED)具有不同的参数,但我不知道如何做…
有人能帮我吗?
1.使用卷
如果您的唯一要点是坚持您的数据,您需要使用卷。
数据卷是绕过联盟文件系统的一个或多个容器内的特定目录。 数据卷为持久或共享数据提供了一些有用的function:
- 当容器被创build时,卷被初始化。 如果容器的基础映像包含指定安装点上的数据,则在卷初始化时,现有数据将被复制到新卷中。 (请注意,在安装主机目录时这不适用。)
- 数据卷可以在容器之间共享和重用。
- 数据量的变化是直接进行的。
- 更新图像时,不会包含对数据量的更改。
- 即使容器本身被删除,数据量仍然存在。
资源:
从本质上说,你将一个文件夹从你的机器映射到你的容器。 当你杀死容器并产生一个新的实例(修改了参数),你的卷(与现有的数据)被重新映射。
例:
docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home 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