Dockerfile 中 ARG 指令的作用范围
类别: Dockerfile 标签: Dockerfile ARG目录
这里主要是了解 Dockerfile 中 ARG 指令的作用范围。
总结
- FROM 前定义的参数,只能在 FROM 指令中使用,且能够在多阶段中起作用。
ARG BASE_IMAGE=python:3.10.9
FROM ${BASE_IMAGE} AS builder
...
FROM ${BASE_IMAGE}
...
- FROM 后定义的参数,只能作用在本 Stage 阶段。
FROM python:3.10.9 AS builder
ARG APP_HOME=/WALL-E-AI
WORKDIR ${APP_HOME}
FROM python:3.10.9
ARG APP_HOME=/WALL-E-AI
WORKDIR ${APP_HOME}
实验
ARG BASE_IMAGE=python:3.10.9
FROM ${BASE_IMAGE} AS builder
RUN du -sh /usr/lib >> /app.log
RUN echo "🚀 stage-1 范围,在 FROM 指令前定义 ARG BASE_IMAGE: ${BASE_IMAGE}" >> /app.log
RUN echo "🚀 stage-1 范围,未定义 ARG APP_HOME: ${APP_HOME}" >> /app.log
ARG APP_HOME=/WALL-E-AI
RUN echo "🚀 stage-1 范围,定义 ARG APP_HOME: ${APP_HOME}" >> /app.log
WORKDIR ${APP_HOME}
# 发布应用
FROM ${BASE_IMAGE}
COPY --from=builder /app.log /app.log
RUN du -sh /usr/lib >> /app.log
RUN echo "🟥 stage-2 范围,在 FROM 指令前定义 ARG BASE_IMAGE: ${BASE_IMAGE}" >> /app.log
RUN echo "🟥 stage-2 范围,未定义 ARG APP_HOME: ${APP_HOME}" >> /app.log
ARG APP_HOME=/WALL-E-AI
RUN echo "🟥 stage-2 范围,定义 ARG APP_HOME: ${APP_HOME}" >> /app.log
WORKDIR ${APP_HOME}
RUN cat /app.log
构建镜像,使用默认的参数值。
docker buildx build --progress=plain --platform=linux/amd64 --rm -f Dockerfile -t test:amd64 .
#17 [stage-1 8/8] RUN cat /app.log
#17 0.218 501M /usr/lib
#17 0.218 🚀 stage-1 范围,在 FROM 指令前定义 ARG BASE_IMAGE:
#17 0.218 🚀 stage-1 范围,未定义 ARG APP_HOME:
#17 0.218 🚀 stage-1 范围,定义 ARG APP_HOME: /WALL-E-AI
#17 0.218 501M /usr/lib
#17 0.218 🟥 stage-2 范围,在 FROM 指令前定义 ARG BASE_IMAGE:
#17 0.218 🟥 stage-2 范围,未定义 ARG APP_HOME:
#17 0.218 🟥 stage-2 范围,定义 ARG APP_HOME: /WALL-E-AI
#17 DONE 0.2s
构建镜像,使用指定的参数值。
docker buildx build --progress=plain --platform=linux/arm64 --build-arg BASE_IMAGE=python:3.10.9-slim --build-arg APP_HOME=wall-e-ai --rm -f Dockerfile -t test:arm64 .
#16 [stage-1 8/8] RUN cat /app.log
#16 0.091 38M /usr/lib
#16 0.091 🚀 stage-1 范围,在 FROM 指令前定义 ARG BASE_IMAGE:
#16 0.091 🚀 stage-1 范围,未定义 ARG APP_HOME:
#16 0.091 🚀 stage-1 范围,定义 ARG APP_HOME: wall-e-ai
#16 0.091 38M /usr/lib
#16 0.091 🟥 stage-2 范围,在 FROM 指令前定义 ARG BASE_IMAGE:
#16 0.091 🟥 stage-2 范围,未定义 ARG APP_HOME:
#16 0.091 🟥 stage-2 范围,定义 ARG APP_HOME: wall-e-ai
#16 DONE 0.1s