Ric*_*fer 10 docker dockerfile
假设我有两个 Dockerfile,用于创建带有各自标签的图像:
Dockerfile.A:
FROM some-image
...
EXPOSE 9000
ENTRYPOINT ["some-script.sh"]
Run Code Online (Sandbox Code Playgroud)
和
Dockerfile.B:
FROM A
...
Run Code Online (Sandbox Code Playgroud)
当我运行镜像 B 时,容器是否也暴露了我在 中定义的端口Dockerfile.A,并运行在那里定义的入口点脚本?
更一般地说,除了文件系统层之外,哪些指令是从基础 Dockerfile 继承的?
这些指令与系统文件一起从基本映像继承。
暴露
如果基础镜像EXPOSE 8080 9090 在 Dockerfile 中提到了这些端口,那么扩展 Dockerfile 就不需要暴露这些端口。但是之间有区别exposing and publish。
环境评价
如果基础镜像有一些 ENV,test-a=abc那么扩展镜像就会有这些 ENV。
工作目录
如果基本图像已设置, "WorkingDir": "/root",则扩展图像将具有工作目录/root
维护者
MAINTAINER adiii 如果不覆盖,扩展图像将具有相同的作者。
标签
扩展图像将与基础图像具有相同的标签
在建
设计为通过扩展映像运行。
入口点
与基本映像中的入口点相同,除非您覆盖它。
CMD
扩展镜像和基础镜像有相同的CMD,只要不覆盖入口点指令,见下。
你可以试试看。
Dockerfile A
FROM node:8.16
MAINTAINER adiii
LABEL key=test
EXPOSE 8080 9090
ENV test-a=abc
WORKDIR /root
ENTRYPOINT /root
CMD ["npm", "run", "start"]
Run Code Online (Sandbox Code Playgroud)
现在构建docker镜像B
Dockerfile B
FROM a
Run Code Online (Sandbox Code Playgroud)
docker build -t b .
检查镜像 bdocker inspect b:latest你会看到上面的指令继承自基础镜像,因为 Dockerfile B 没有覆盖入口点指令。
如果扩展图像覆盖了入口点,文档说CMD将重置为空值,并且必须根据需要重新定义。
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |