Dockerfile中ARG ENV声明周期
✅1. ARG(构建参数)
作用:
- 用于 构建镜像阶段 传递参数。
- 只能在构建镜像时使用,构建完成后在镜像中不会保留(不会出现在容器运行时环境中)。
示例:
1 2
| ARG APP_VERSION=1.0.0 RUN echo "Building version $APP_VERSION"
|
使用方法:
1 2 3 4
| docker build --build-arg APP_VERSION=2.0.0 -t myapp:2.0 .
docker build --build-arg APP_VERSION=2.0.0 --build-arg APP_VERSION1=2.0.1 -t myapp:2.0 .
|
注意:传入多个arg需要指定多次
多个–build-arg
ARG APP_VERSION
ARG BUILD_ENV
ARG API_URL
RUN echo "Version: $APP_VERSION, Env: $BUILD_ENV, API: $API_URL"
docker build \
--build-arg APP_VERSION=1.2.3 \
--build-arg BUILD_ENV=production \
--build-arg API_URL=https://api.example.com \
-t myapp:1.2.3 .
✅ 2.ENV(环境变量)
作用:
- 用于设置镜像或容器运行时的环境变量。
- 在镜像中会保留,容器运行时可用。
- 也可用于构建阶段。
示例:
1 2
| ENV APP_ENV=production RUN echo "Environment is $APP_ENV"
|
使用方法:
构建时不需要特别传值(可以写死),运行时可以覆盖:
1 2 3 4
| docker run -e APP_ENV=development myapp
docker run -e APP_ENV=development -e APP_ENV1=development1 myapp
|
✅ 3.结合使用ARG + ENV
你可以使用 ARG 设置默认值,并通过 ENV 将其变成容器可用的环境变量:
1 2
| ARG VERSION=1.0.0 ENV APP_VERSION=$VERSION
|
🔍 3.总结对比
| 特性 |
ARG |
ENV |
| 使用阶段 |
构建阶段 |
构建阶段 + 容器运行阶段 |
| 是否保留在镜像中 |
❌ 否 |
✅ 是 |
| 是否可在运行时设置 |
❌ 否 |
✅ 是(通过 docker run -e) |
| 默认值支持 |
✅ 是 |
✅ 是 |