每次发出commit命令时,Docker commit都会创建一个新映像。是否可以在当前运行的容器上发出提交,并将更改保存到现有图像((此处的现有图像是生成容器的图像))。这样,每次执行commit时都不会创建新映像。
如果可能,请告诉我?
答案 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在其设计中使用“承诺便宜”的概念。鼓励您在图像历史记录中的任何时候频繁地进行提交,就像版本控制一样。