Docker提交-不保留新设置吗?

时间:2018-10-06 08:12:39

标签: docker

我正在尝试创建(没有一个dockerfile)自定义映像(apache),并将其发布给其他程序员。

我已经有这张图片:

> docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
eboraas/apache      latest              ddf3c3b74564        3 months ago        365MB

现在让我们创建一个具有设置的容器:

docker run -p 8520:80 -v //c/Users/sff/apache:/var/www/html -d eboraas/apache

好的,现在一切正常,我确实看到了测试页:

enter image description here

顺便说一句-docker ps -a现在是:

C:\r>docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
3a1083fded97        eboraas/apache      "/usr/sbin/apache2ct…"   2 minutes ago       Up 2 minutes        443/tcp, 0.0.0.0:8520->80/tcp   eloquent_heisenberg

有人告诉我可以使用docker commit来保留容器作为自定义的新图像

所以我做到了:

C:\r>docker commit 3a1083fded97 131313222/shared-apache
sha256:14135d48fcf827527d655225908a29b15223317810be9cf22651ae375a87a774

它确实保存了新图像:

C:\r>docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
131313222/shared-apache   latest              14135d48fcf8        49 seconds ago      365MB
eboraas/apache            latest              ddf3c3b74564        3 months ago        365MB

但是现在我希望运行docker run 131313222/shared-apache-保持(!!)文件夹映射和端口映射:

但是如果我运行这个:

docker run 131313222/shared-apache

我明白了:

  

C:\ r> docker run 131313222 / shared-apache AH00558:apache2:无法   使用以下命令可靠地确定服务器的标准域名   172.17.0.2。全局设置“ ServerName”指令以禁止显示此消息

很明显,测试页无法正常工作。

问题:

为什么commit命令(到新映像中)不保存端口和卷映射?

换句话说:(没有docker文件)-如何创建将包含其当前设置的图像?我希望开发人员立即开始工作,就像每个人都在写:

docker run -p 8520:80 -v //c/Users/sff/apache:/var/www/html -d eboraas/apache

提交不应该这样做吗?

我希望每个人都无所事事地看到我所看到的。

1 个答案:

答案 0 :(得分:1)

的Docker映像包含其文件系统和少量元数据,例如用于运行的默认命令和环境变量设置。它不包含您可能指定的任何其他设置,例如端口映射,卷挂载,对主机设备的访问,对主机级设置的特权访问或后台模式。您根本无法创建默认为您在问题中显示的设置的图像。

如果您的读者是其他程序员,则建议编写序列以将映像构建为Dockerfile,然后将该Dockerfile和运行该映像的Shell脚本或Docker Compose YAML文件添加到公共源代码控制存储库中。

实际上,我建议您不要使用docker commit。 Dockerfile系统非常简单(如果您可以指定这些设置,则它们将在Dockerfile中各占一行;例如ENV foo bar替换docker run -e foo=bar)并且可以检查Dockerfile轻松地控制源代码当您需要重建映像时(由于新版本的Apache发布了重要的安全更新,并且由于捆绑的某些软件发生了变化),Dockerfile既可以为您提供记录,又可以记录映像的创建工作。单个命令即可实际完成。