频繁提交Docker容器是一种好的做法吗?

9

我在使用WebSphere Liberty,由于WebSphere Liberty需要频繁的XML编辑,这是无法使用Dockerfile命令实现的。我必须不时地使用docker-commit命令提交容器,以便他人可以使用我的镜像。

命令如下:

docker commit -m "updated sa1" -a "Song" $id company/wlp:v0.1

大学正在进行与图像相似的事情,他们每天都会继续对容器进行多次Docker提交。

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

Q1:频繁进行Docker提交的做法是否可取?

Q2:它是否留下了任何潜在问题?

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

1个回答

9
我不建议使用docker commit。虽然这看起来是一个好主意,但是你无法像Dockerfile一样随意重现镜像,并且完成后也无法更改基础镜像,因此很难向底层os基础镜像提交安全补丁。如果您采用完整的Dockerfile方法,可以重新运行docker build,然后再次获得相同的镜像。而且您可以更改基础镜像。所以我的经验法则是:如果您正在创建临时工具,并且不关心重复使用或随意重现镜像,则commit非常方便。据我了解,每个容器镜像都有两部分:一组只读层组成了镜像的大部分,然后是一个小的可写层,其中提交了任何更改。当您运行commit时,Docker会创建一个新镜像(这是基础镜像加上您所做的更改),它会将代码复制到薄的可写层中。因此,不会创建新的只读层,而是将您所做的差异存储在薄的可写层中。

不要只听我的,看看Redhats建议

第5步中的文章明确指出:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接