45

编程入门 行业动态 更新时间:2024-10-25 07:34:06

45

45

AGR/ENV指令

      • 前言
      • ARG
        • 作用
        • 格式
        • 说明
        • 生效范围
        • 使用示例
      • ENV
        • 作用
        • 格式
        • 说明
        • 使用环境变量
        • 使用示例
      • 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 alpineLABEL 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 定义的变量在启动容器后仍然保留

更多推荐

45

本文发布于:2024-02-12 21:01:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1689376.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!