最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Docker 基础镜像 FROM 多阶段引用如何写
时间:2026-08-08 08:22:48 编辑:袖梨 来源:一聚教程网
FROM指令不支持多阶段引用,跨阶段复用需用COPY --from=;每个FROM启动独立阶段,可命名(AS)或索引;COPY --from支持引用具名阶段、索引阶段或外部镜像。
FROM 指令本身不支持“多阶段引用”,它只负责开启一个新构建阶段,不能直接从其他阶段“引用”或“继承”。真正实现跨阶段复用的,是 COPY --from=(不是 FROM),这是多阶段构建中资源传递的核心机制。
你可能想问的是:如何在 Dockerfile 中正确使用 FROM 定义多个阶段,并配合 --from 引用它们? 下面分几个关键点讲清楚:
FROM 指令怎么写多阶段
每个 FROM 启动一个独立阶段,可命名、可索引:
# 阶段1:命名为 builderFROM golang:1.21 AS builderWORKDIR /appCOPY . .RUN go build -o myapp .# 阶段2:命名为 runtimeFROM alpine:latest AS runtimeWORKDIR /root# 注意:这里不是 FROM --from=...,而是 COPY --from=...COPY --from=builder /app/myapp .CMD ["./myapp"]
正确写法:
-
FROM <image> AS <name>→ 定义并命名阶段 -
FROM <image>→ 定义未命名阶段(后续可用--from=0、--from=1引用)
❌ 错误写法(语法不合法):
-
FROM --from=builder❌ -
FROM builder❌(FROM只接受镜像名/标签,不接受阶段名)
COPY --from 的三种引用方式
这才是“多阶段引用”的实际操作位置:
-
引用具名阶段:
COPY --from=builder /src /dst -
引用索引阶段:
COPY --from=0 /src /dst(第一个FROM是索引 0) -
引用外部镜像:
COPY --from=nginx:alpine /etc/nginx/nginx.conf ./nginx.conf
多阶段常见组合写法示例(Python 应用)
# 阶段1:安装依赖 + 编译(含编译工具)FROM python:3.11-slim-bookworm AS builderRUN apt-get update && apt-get install -y --no-install-recommends build-essential gcc libc-dev && rm -rf /var/lib/apt/lists/*COPY requirements.txt .RUN pip install --prefix=/install -r requirements.txt# 阶段2:纯运行时(无编译器)FROM python:3.11-slim-bookwormCOPY --from=builder /install /usr/localCOPY --from=builder /usr/lib/python3.11/encodings /usr/lib/python3.11/encodingsCOPY . /appWORKDIR /appCMD ["python", "app.py"]
小贴士:避免踩坑
-
--from=必须指向已定义的阶段(按顺序,不能向前引用未出现的阶段) - 每个
FROM都会重置环境变量、工作目录等,前一阶段内容不会自动继承 - 最终镜像只包含最后一个
FROM阶段的内容,前面阶段只是临时构建上下文 - 命名阶段(
AS xxx)不是必须的,但强烈推荐——可读性高、维护方便、调试时可指定--target xxx
不复杂但容易忽略。
相关文章
- 守护之境最强阵容怎么搭配 守护之境布阵推荐 08-09
- 《使命召唤》毒刺瞄准方法 08-09
- 点点穿书app书架清空操作 08-09
- 《异环》玉子市场介绍 08-09
- 《征服游戏王大师决斗决斗策略2最后关卡的终极攻略》(揭秘通关游戏王大师决斗决斗策略2最困难的关卡) 08-09
- 打造全能宝宝,探秘同城多技能攻略(解锁宝宝多技能的秘诀和窍门) 08-09