频繁提交docker容器是一种好习惯吗?

时间:2018-08-09 08:07:31

标签: docker websphere-liberty open-liberty

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

命令类似于:

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

大学正在做与映像相似的事情,他们继续每天多次对docker提交容器。

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

Q1:是否建议进行频繁的docker-commiting?

Q2:是否会留下任何潜在的问题?

Q3:是否会创建额外的图层?我读过docker-commit document,它没有提及是否会创建另一个图层,我认为它表示没有。

1 个答案:

答案 0 :(得分:4)

我不会使用docker commit

这似乎是一个好主意,但是您无法像使用Dockerfile一样随意复制映像,并且一旦完成就无法更改基本映像,因此很难为示例基础os基本映像的安全补丁。

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

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

据我了解,Docker的每个容器映像都有两部分,这是一组只读层,构成了映像的大部分,然后是一小层,可在任何更改提交的情况下将其写入。

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

不仅要相信我,而且要Redhats advice

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

  

5)不要从正在运行的容器中创建图像–换句话说,不要   使用“ docker commit”创建映像。这种创建图像的方法   是不可复制的,应完全避免。一律使用   Dockerfile或任何其他完全完全的S2I(源到图像)方法   可复制的,如果存储,您可以跟踪对Dockerfile的更改   放在源代码控制存储库(git)中。