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

Enr*_*oft 7 jenkins docker

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

目前我只能在没有数据的情况下启动一个新的克隆容器(来自自定义图像).

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

问题是(如果我理解的话)我无法修改现有运行容器的起始参数,所以我的想法是启动一个克隆的(数据包含)具有不同的参数,但我不明白该怎么做...

有人能帮我吗?

dba*_*rev 8

1.使用卷

如果您的唯一要点是保留数据,则需要使用Volumes.

数据卷是绕过Union文件系统的一个或多个容器中的特殊指定目录.数据卷为持久性或共享数据提供了几个有用的功能:

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

资源:

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

基本上,您将机器中的文件夹映射到容器中.当您终止容器并生成一个新实例(使用已修改的参数)时,将重新映射您的卷(使用现有数据).

例:

docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins
Run Code Online (Sandbox Code Playgroud)

资源:

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


2.使用commit创建快照

另一种方法是使用docker commit命令.

将容器的文件更改或设置提交到新映像中会很有用.这允许您通过运行交互式shell来调试容器,或将工作数据集导出到另一个服务器.通常,最好使用Dockerfiles以文档化和可维护的方式管理图像.

提交操作将不包括容器内安装的卷中包含的任何数据. 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
Run Code Online (Sandbox Code Playgroud)

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

docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a  svendowideit/testimage:version4
Run Code Online (Sandbox Code Playgroud)

  • 共享卷不是复制。因为这两个容器共享相同的数据。对一个容器的任何数据更改都会影响另一个容器。 (2认同)