我了解使用多阶段构建的目的,但我不明白为什么您要拥有这样的空白阶段?有人可以详细说明用例吗?
# Use an official Ubuntu 18.04 as parent image
FROM ubuntu:18.04
# Install python 2.7
FROM python:2.7
RUN apt-get update
RUN apt-get install -y git make g++
# more stuff, nothing using layer 0.
资料来源:https://raw.githubusercontent.com/kubeflow/examples/master/xgboost_ames_housing/Dockerfile
最佳答案
撰写Dockerfile的人可能不了解多阶段构建的工作方式。这不是一个罕见的误解,因为Dockerfiles的常见要求是将多个镜像合并在一起,而这并不是多个FROM行提供的。
该示例所做的是下载图像,然后立即将其忽略。如果在以后的阶段中有COPY
命令,则可以从先前的图像进行复制,这是我见过的不做任何处理即可导入图像的几个原因之一:
ARG parent_ver=2.0
FROM repo:5000/parent:${parent_ver} as parent
FROM base as release
COPY --from=parent /some/file /dest
...
通常,您可以直接从另一张图像进行复制,但是如果要使用上述变量指定它,则当前解决方案涉及上述解决方法。
由于提供的示例没有执行任何操作,因此您看到的只是下载了不需要的图像而未使用。这会减慢构建速度,占用带宽并占用磁盘空间,但仅限于构建服务器上。值得在该GitHub存储库上填写一个问题来修复其示例。
关于docker - 在Dockerfile中清空多阶段构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53546176/