多阶段Docker构建中,是否应该删除WORKDIR目录

49次阅读
没有评论

问题描述

在Dockerfile中使用了多阶段构建,并且想知道在第二阶段构建完成后,是否应该删除WORKDIR目录的内容。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
根据Docker官方文档的描述,当使用Dockerfile创建镜像时,每个步骤都会创建一个Docker层。关于层的描述可以在官方Docker页面上找到。
因此,当使用多阶段构建创建镜像时,它引入了一个新的构建步骤,可以使用FROM语句中的别名来命名,并且除了通过最后一个FROM语句创建的镜像层之外,所有层都会被删除。
在构建镜像后,可以使用docker image inspect命令检查包含WORKDIR的层是否存在。我认为您可能知道每个步骤的唯一层值。
您可以查看镜像由哪些层组成,例如:

$ docker image inspect [OPTIONS] 464503b73bfe # IMAGE
[
    {
        "Id": "sha256:464bf1...46c",
        ...
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:26711...8fcf",
                "sha256:6c5a51...56e0"
            ]
        },
        ...
]

在上面的示例中,我们使用docker image inspect命令检查了一个名为464503b73bfe的镜像。您可以看到镜像由哪些层组成。
根据这些信息,您可以确定WORKDIR目录是否存在于构建的镜像中。如果WORKDIR目录存在于构建的镜像中,您可以选择删除它,以减小镜像的大小。

正文完