我一直在创建docker文件并阅读文档,我一直在想这个问题:在EXPOSE
中添加Dockerfile
命令是否会添加一层? (如果可以,为什么我会在意/将其放在文件中的位置是否重要?)
documentation中未明确说明。
我了解RUN
,COPY
和ADD
创建图层是因为它们更改了文件系统,但是公开只是向容器添加了元数据,更改会生成图层吗?
最佳答案
是的,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/