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

时间:2016-10-29 10:26:35

标签: jenkins docker

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

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

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

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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:7)

<强> 1。使用卷

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

  

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

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

来源:

  

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。使用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

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

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

答案 1 :(得分:0)

要在 docker 中克隆一个容器,您可以使用 docker commit 并为容器创建一个快照

使用 docker images 查看 docker 镜像 REPOSITORYTAG 名称。 使用 docker ps -a 查看可用容器并记下要为其创建快照的容器的 CONTAINER ID

使用 docker commit <CONTAINER ID> <REPOSITORY>:<TAG> 创建快照并将其保存为图像。 再次使用 docker images 查看保存的图像。

访问保存的快照 运行,

docker run -i -t <IMAGE ID> /bin/bash
docker ps -a
docker start <CONTAINER ID>
docker exec -ti <CONTAINER ID> bash