docker - 在Dockerfile中清空多阶段构建

标签 docker docker-multi-stage-build

我了解使用多阶段构建的目的,但我不明白为什么您要拥有这样的空白阶段?有人可以详细说明用例吗?

# 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/

相关文章:

Docker:构建完成后如何使用多阶段镜像

docker - 多阶段构建只是加载最后一部分?

python - Oracle Instant 客户端的 Alpine 依赖 hell

docker - 使用预定义的 Redis 转储创建 Docker 容器

postgresql - 将 docker-compose .yml 用于 docker swarm 时如何传递 POSTGRES_USER env 变量

Quarkus native 可执行文件构建 : high memory consumption

Docker compose 不公开应用程序容器的端口

tsql - 在docker上启动SQL Server后运行SQL脚本

docker - 多阶段构建图像不起作用,而正常构建可以

docker - Docker多阶段构建:顺序