我在里面使用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,它没有提及是否会创建另一个图层,我认为它表示没有。
答案 0 :(得分:4)
我不会使用docker commit
这似乎是一个好主意,但是您无法像使用Dockerfile一样随意复制映像,并且一旦完成就无法更改基本映像,因此很难为示例基础os基本映像的安全补丁。
如果您使用完整的Dockerfile方法,则可以重新运行docker build,您将再次获得相同的映像。而且您可以更改基本图像。
所以我的经验法则是,如果您正在创建一个临时工具,并且您不关心重复使用或随意复制图像,那么使用提交就很方便。
据我了解,Docker的每个容器映像都有两部分,这是一组只读层,构成了映像的大部分,然后是一小层,可在任何更改提交的情况下将其写入。
当您运行commit docker并创建一个新映像时,这是基础映像以及您所做的更改(创建的映像是不同的映像),它将代码复制到薄的可写层。因此,不会创建新的只读层,它只会将您制作的增量存储到可写的薄层中。
不仅要相信我,而且要Redhats advice
为清楚起见,第5步中的文章说:
5)不要从正在运行的容器中创建图像–换句话说,不要 使用“ docker commit”创建映像。这种创建图像的方法 是不可复制的,应完全避免。一律使用 Dockerfile或任何其他完全完全的S2I(源到图像)方法 可复制的,如果存储,您可以跟踪对Dockerfile的更改 放在源代码控制存储库(git)中。