你可以分享Docker容器吗?

3

我一直在想为什么要将设置的每个“步骤”都添加到Dockerfile中,从而创建一个处于特定状态的容器。

我认为另一种选择是只需从简单的基础镜像(如ubuntu)创建一个容器,然后通过shell输入配置您想要的容器。

但是您可以共享容器吗?如果您只能与Docker共享图像,那么我理解为什么有人希望在Dockerfile中列出其容器设置的每个步骤。

我问这个问题是因为我想象中涉及将shell命令、配置文件更改等移植到正确的Dockerfile语法并使其正常工作可能会产生一些麻烦?但作为Docker新手,我可能高估了这项任务的难度。

编辑:我想另一个使用Dockerfile列出每个设置步骤的有效原因是为了记录容器的初始状态。与接收处于某种状态的容器不同,但不一定有办法知道从容器的映像基本状态开始所做的所有操作。


1
当您想要进行微小修改并重新构建映像时,您会有什么建议? Docker和类似工具的一半作用是尽可能自动化,并拥有可重复构建的所有内容。 - Jon Skeet
@JonSkeet 说得有道理。如果您想在答案中详细说明,我会接受。 - Adam Johns
我不太想回答,因为我只是一个偶尔使用 Docker 的用户。我猜其他用户可能会写出更好的答案。 - Jon Skeet
https://docs.docker.com/engine/userguide/dockervolumes/ - cdvv7788
1个回答

4

但是你可以共享容器吗?如果你只能与Docker共享镜像,那么我理解为什么有人想要在Dockerfile中列出他们的每个容器设置步骤。

严格来说,不行。然而,您可以使用docker commit命令从现有容器创建一个新镜像:

$ docker commit <container-name> <image-name>

这条命令将从现有容器创建一个新的镜像,您可以从/到注册表中推送和拉取,导入和导出,并从中创建新的容器。

我问这个问题的原因是,我想象移植shell命令,配置文件的文件更改等等到正确的Dockerfile语法并使它们正常工作会涉及一些麻烦。但是对于Docker的新手来说,我可能高估了这项任务的难度。

如果您已经使用其他机制进行自动化配置,则可以将现有的自动化集成到Docker构建中。例如,如果您已经使用shell脚本配置映像,请在Dockerfile中添加构建步骤,以将安装脚本添加到容器中并执行它。理论上,这也可以与Puppet、Salt和其他配置管理实用程序一起使用。

编辑:我认为另一个使用Dockerfile记录每个设置步骤的有效原因是文档,以说明容器的初始状态。与获得处于某种状态的容器不同,但不一定有办法知道从容器的图像基础状态开始完成了什么。

确实如此。正如评论中提到的那样,具有自动化和可重复生成的映像构建的明显优点。如果您手动构建容器,然后使用docker commit创建映像,则不一定知道如何在以后的某个时间重新构建此映像(当您想发布应用程序的新版本或在更新的基础映像之上重新构建映像时可能需要这样做)。

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