【问题标题】:I Docker does CMD instruction add a layer?我 Docker 是否 CMD 指令添加了一层?
【发布时间】:2021-10-31 14:31:34
【问题描述】:

我查了很多文档甚至书,很困惑Dockerfile中的CMD指令是否没有添加层。

Docker 的知识库说是,是不是错了?

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

syntax=docker/dockerfile:1

来自 ubuntu:18.04 复制 。 /应用程序 运行制作/应用 cmd python /app/app.py

每条指令创建一层:

FROM 从 ubuntu:18.04 Docker 镜像创建一个层。 COPY 从 Docker 客户端的当前目录添加文件。 RUN 使用 make 构建您的应用程序。 CMD 指定在容器中运行什么命令。

我想要不创建层的指令列表,我知道所有都创建了一个中间层,但我担心图像中的最终层。

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    Dockerfile 中的每一行都会添加一个包含CMD 的层,您可以参考terminology of layer

    图层

    图像由层组成。每一层都是一组文件系统更改。图层没有配置元数据,例如环境变量或默认参数 - 这些是图像作为一个整体而不是任何特定图层的属性。

    您可以看到层实际上只是对文件系统所做的更改。因此,如果您在Dockerfile 中的行确实使图像与众不同,那么它将添加一个图层。

    当然,还有一些行不会改变 docker 镜像,例如Parser directives:

    解析器指令是可选的,会影响 Dockerfile 中后续行的处理方式。解析器指令不会将层添加到构建中,并且不会显示为构建步骤。

    但是,包括 cmets 在内的这些东西确实对最终图像没有任何作用。由于他们没有改变图像,他们没有添加图层。

    另外,试用后可以使用docker history <Image ID>查看。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2018-08-08
      相关资源
      最近更新 更多