Docker在现有图像上提交

时间:2017-05-27 23:10:21

标签: docker-container docker-image

每次发出commit命令时,Docker commit都会创建一个新映像。是否可以在当前运行的容器上发出提交,并将更改保存到现有图像((此处的现有图像是生成容器的图像))。这样,每次执行commit时都不会创建新映像。

如果可能,请告诉我?

3 个答案:

答案 0 :(得分:9)

使用名称和标签已经更新了您想要的图像。确保在提交期间在容器ID之后放置相同图像的名称。来自doc

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton

$ docker commit c3f279d17e0a  svendowideit/testimage:version3

编辑:我强烈建议您在继续操作之前停止容器,这样可以减少进入下次运行状态的机会。此外,使用不同的标签,测试它,然后重新标记到您的真实目标可能是个好主意。

Edit2:正如@MilindDeore所指出的,这并没有物理覆盖上一张图片,而是重新解析了这个名字。因此,您可能需要手动删除或等待它被垃圾收集(如果到位)。

答案 1 :(得分:3)

Docker镜像是不可变的,低于文档中的文本:

  

Docker镜像是只读的。当Docker从一个容器运行一个容器时   图像,它在图像的顶部添加了一个读写层(使用   UnionFS)您的应用程序在其中运行。

因此,@ hurturk提出的建议将创建一个新的图像而不是问题中的问题。

答案 2 :(得分:0)

要通过更改容器来创建新图像,只需执行一个命令即可。但是,在我们这样做之前,请先更改容器!

在此容器中,我们可以自由执行在Fedora上通常要做的任何事情。在这种情况下,我们将安装Git,然后提交容器。链接的说明用于在CentOS 6上安装Git,但它们也适用于该Fedora容器。

完成这些说明后,您可以不退出而直接从外壳断开连接或从外壳分离,请使用转义序列Ctrl-p + Ctrl-q。

最后是时候将我们的更改提交到命名图像了。此命令将容器9c09acd48a25转换为名称为fedora-base-with-git的图像:

<div class="progress progress-striped active" style="margin-bottom: 0;"
     ng-class="{'active': false}>

Docker在其设计中使用“承诺便宜”的概念。鼓励您在图像历史记录中的任何时候频繁地进行提交,就像版本控制一样。