经常提交 docker 容器是一种好习惯吗?

Son*_*ong 7 websphere-liberty docker open-liberty

我在里面使用 WebSphere Liberty。由于 WebSphere Liberty 需要频繁的 xml 编辑,而使用 Dockerfile 命令是不可能的。我必须不时地 docker-commit 容器,以便其他人使用我的图像。

命令是这样的:

docker commit -m "updated sa1" -a "Song" $id company/wlp:v0.1
Run Code Online (Sandbox Code Playgroud)

大学正在对镜像做类似的事情,他们继续每天多次 docker commit 容器。

有一天,我们将在生产环境中部署映像。

Q1:是否建议频繁提交 docker-commit 的做法?

Q2:它会留下任何潜在的问题吗?

Q3:它会创建一个额外的层吗?我阅读了docker-commit 文档,其中没有提到它是否会创建另一个层,我认为这意味着没有。

kry*_*our 7

我不会使用 docker commit,

这似乎是一个非常好的主意,但是您无法像使用 Dockerfile 那样随意复制图像,并且一旦完成也无法更改基本图像,因此很难提交,例如安全性补丁到底层操作系统基础映像。

如果您采用完整的 Dockerfile 方法,您可以重新运行 docker build,您将再次获得相同的图像。您可以更改基本映像。

所以我的经验法则是,如果您正在创建一个临时工具并且您不关心重用或随意复制图像,那么 commit 使用起来很方便。

据我所知,Docker 每个容器镜像都有两部分,这是一组只读层,构成了镜像的大部分,然后是一个小层,可在提交任何更改的地方写入。

当您运行 commit docker 并创建一个新图像时,它是基础图像加上您所做的更改(创建的图像是一个不同的图像),它将代码复制到薄可写层。因此,不会创建新的只读层,它只是将您制作的增量存储到可写薄层中。

不要只相信我的话,要听听 Redhats 的建议

为清楚起见,第 5 步中的文章说:

5) 不要从正在运行的容器创建镜像——换句话说,不要使用“docker commit”来创建镜像。这种创建图像的方法不可复制,应完全避免。始终使用 Dockerfile 或任何其他完全可重现的 S2I(源到映像)方法,如果将 Dockerfile 存储在源控制存储库 (git) 中,则可以跟踪对 Dockerfile 的更改。