Docker提交-不保留新设置?

Docker提交-不保留新设置?,docker,Docker,我正在尝试创建(没有dockerfile)一个自定义映像(apache),并将其发布给其他程序员 我已经有了这个图像: > docker images REPOSITORY TAG IMAGE ID CREATED SIZE eboraas/apache latest ddf3c3b74564 3 months ago 365M

我正在尝试创建(没有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
好的,现在一切正常,我确实看到了测试页面:

顺便说一句,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运行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
提交人不应该已经这么做了吗

我希望每个人都能看到我所看到的,而不做任何事情。

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

如果您的受众是其他程序员,我建议您编写将映像构建为Dockerfile的序列,并将该Dockerfile和运行映像的shell脚本或Docker Compose YAML文件添加到公共源代码管理存储库中


事实上,我建议您永远不要使用
docker commit
。Dockerfile系统相当简单(如果您可以指定这些设置,它们将在Dockerfile中各有一行;
ENV foo bar
替换
docker run-e foo=bar
),Dockerfile可以很容易地签入源代码管理。当您需要重建映像时—因为Apache的新版本已发布,并进行了关键的安全更新,因为您捆绑的某些软件已更改—Dockerfile会为您提供一个关于构建映像的详细记录,以及一个实际执行映像的命令。

因此,当我提交时,它正在提交哪些更改?容器中自启动以来已更改的任何文件都不在卷中。因此,如果我运行interactive terminal并触摸一个新文件,它是否会包含在提交中?是的……但这确实不是最佳做法。