45-Dockerfile-ARG/ENV指令


前言

  • 本篇来学习下Dockerfile中的AGR/ENV指令

ARG

作用
  • 定义一个可以在构建镜像时使用的变量
格式
ARG <name>[=<default value>]
说明
  • 在执行 docker build 时,可以通过 --build-arg name=value 为声明的变量赋值
  • –build-arg 指定参数会覆盖 Dockerfile 中指定的同名参数。
  • 如果用户指定了未在 Dockerfile 中定义的构建参数 ,则构建会输出 警告 。
  • ARG 只在构建时期有效,运行时期无效。
  • 不建议使用构建时变量来传递注入 github 密码、用户凭据等机密,因为构建时变量的值可以通过 docker history 来观察到。
  • ARG 变量定义从 Dockerfile 定义的行开始生效。
  • 使用 ENV 指令定义的环境变量始终会覆盖同名的 ARG 指令。
生效范围
  • 如果在 FROM 指令之前指定,那么只能用于 FROM 指令中
  • 在FROM 之后使用,需要再次指定 ARG
  • 多阶段构建的时候,ARG 定义的变量,每个 FROM 都能用
使用示例
ARG BASE_IMAGE=alpine
ARG PARSM='HELLO DOCKER'
# 如果在 FROM 指令之前指定,那么只能用于 FROM 指令中
FROM ${BASE_IMAGE}

LABEL author="大海"

# 构建时期执行的指令。ARG 变量无效
RUN echo '1------1'
RUN echo ${BASE_IMAGE}
# FROM指令后,需重新指定
ARG PARAM='6666'
RUN echo ${PARAM}
RUN echo '2------2'

# 运行时(docker run/docker start)执行的指令,ARG 变量无效
CMD ["/bin/sh","-c","echo 2222;echo $PARAM"]
  • 构建镜像
docker build -t test02 --force-rm --no-cache -f Dockerfile --build-arg PARAM=888 .

在这里插入图片描述

  • 启动容器
    • 运行时ARG指令无效,所以未输出PARAM的值
docker run -it test02

在这里插入图片描述

ENV

作用
  • 定义环境变量
格式
ENV <key>=<value> ...
说明
  • ENV在构建期和运行期都有效,并且使用 ENV 指定定义的环境变量始终会覆盖同名的 ARG 指令。
  • 可以使用 docker inspect 查看值,并使用 docker run -e = 修改 ENV 定义的环境变量。
使用环境变量
  • 如下指令中可使用

ADD
COPY
ENV
EXPOSE
FROM
LABEL
STOPSIGNAL
USER
VOLUME
WORKDIR
ONBUILD

  • 使用方式
    • $variable_name
    • ${variable_name}
      • ${variable:-word}:表示如果设置了 variable,那么结果就是那个值;如果未设置变量,则结果将是 word
      • ${variable:+word}:表示如果设置了 variable,则结果为 word,否则为空字符串
使用示例
  • dockerfile
FROM alpine

LABEL author="大海"

# ARG 变量定义从 Dockerfile 定义的行开始生效。
ARG param="Hi DH"

# ENV 在构建期和运行期都有效,但是只能在运行期进行修改,修改通过 docker run -e name=value 命令。
ENV app=CSDN

# 在构建时期会运行的指令(根据 Dockerfile 创建一个镜像的整个过程时期)
RUN echo ‘-----’
RUN echo ${param}
RUN echo ${app}
RUN echo '-----'

# 在运行时候会运行的指令(根据之前创建的镜像启动一个容器,容器启动默认运行的命令)
# docker start 或 docker run
CMD ["/bin/sh","-c","echo 2222;echo $param;echo app_$app"]

在这里插入图片描述

  • 启动容器
  • ENV指令在运行时也有效,输出了定义的值
docker run -it test

在这里插入图片描述

  • 修改默认值
docker run -it -e app=xes test

在这里插入图片描述

ARG 和 ENV 的区别

  • ARG 定义的变量只会存在于镜像构建过程(docker build有效),启动容器(docker run/start无效)后并不保留这些变量
  • ENV 定义的变量在启动容器后仍然保留
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习de测试小白

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值