我一直在玩创建docker文件和阅读文档,我想知道这个问题:在我的docker文件中添加EXPOSE命令是否添加了一个层?(如果它确实为什么我会关心/它在文件中的位置是否重要?)
文档中没有特别说明.
我理解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
语句的顺序并再次构建,则会看到图层缓存被忽略.