我一直在创建docker文件并阅读文档,我一直在想这个问题:在EXPOSE中添加Dockerfile命令是否会添加一层? (如果可以,为什么我会在意/将其放在文件中的位置是否重要?)

documentation中未明确说明。

我了解RUNCOPYADD创建图层是因为它们更改了文件系统,但是公开只是向容器添加了元数据,更改会生成图层吗?

最佳答案

是的,Dockerfile中的每条指令都会为生成的镜像生成一个新层。

但是,通过EXPOSE创建的图层是空图层。也就是说,它们的大小为0字节。

尽管它们不会对您的存储产生影响,但在构建或从注册表中提取/推送图像时,它们确实可以利用层缓存。

了解图像图层的一种好方法是使用docker history命令。例如,给定以下Dockerfile:

FROM scratch

EXPOSE 4000
EXPOSE 3000


docker build -t test/image .
如果再输入docker history test/image,您将看到:
IMAGE               CREATED             CREATED BY                           SIZE                COMMENT
ab9f435de7bc        4 seconds ago       /bin/sh -c #(nop)  EXPOSE 4000/tcp   0 B
15e09691c313        5 seconds ago       /bin/sh -c #(nop)  EXPOSE 3000/tcp   0 B

如果切换EXPOSE语句的顺序并重新构建,则会看到层缓存被忽略。

关于docker - Docker EXPOSE是否会形成新的层?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41637560/

10-16 23:40