45-Dockerfile-ARG/ENV指令

news/2024/11/28 9:42:32/

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 定义的变量在启动容器后仍然保留

http://www.ppmy.cn/news/41795.html

相关文章

21-CSS

目录 1.CSS是什么&#xff1f; 2.CSS基本语法 3.CSS类型 3.1.行内样式&#xff08;适用范围最小&#xff09; 3.2.内部样式&#xff08;适用范围适中&#xff09; 3.3.外部样式&#xff08;适用范围最大&#xff09; PS&#xff1a;关于缓存 3.4.多种样式优先级 4.代码…

Java语言中的Calendar和Date两个类区别

Java语言中的Calendar和Date两个类都用于处理日期和时间&#xff0c;但它们在实现和使用方面有着很大的不同。实现方式 Date类是一个时间戳&#xff0c;它以自UTC&#xff08;格林尼治标准时间&#xff09;1970年1月1日午夜&#xff08;零时&#xff09;起所经历的毫秒数来表示…

Linux 中的 System.map简介

源码基于&#xff1a;Linux 5.4 0. 前言 对于计算机而言是没有符号这个概念的&#xff0c;只有0 和 1&#xff0c;但是我们比较容易理解的是函数名、变量名这样的符号。在Linux 内核中用 System.map 来记录Linux 内核中的符号信息&#xff0c;称为内核的符号表&#xff0c;该文…

【华为OD机试真题】Excel单元格数值统计(javapython)

Excel单元格数值统计 知识点递归循环数组Q时间限制:2s空间限制:256MB限定语言:不限 题目描述: Excel工作表中对选定区域的数值进行统计的功能非常实用。仿照Excel的这个功能,请对给定表格中选中区域中的单元格进行求和统计,并输出 统计结果。 为简化计算,假设当前输入…

蓝桥杯第26天(Python)考前挣扎

题型&#xff1a; 1.思维题/杂题&#xff1a;数学公式&#xff0c;分析题意&#xff0c;找规律 2.BFS/DFS&#xff1a;广搜&#xff08;递归实现&#xff09;&#xff0c;深搜&#xff08;deque实现&#xff09; 3.简单数论&#xff1a;模&#xff0c;素数&#xff08;只需要…

1365. 有多少小于当前数字的数字

1365. 有多少小于当前数字的数字 难度简单250 给你一个数组 nums&#xff0c;对于其中每个元素 nums[i]&#xff0c;请你统计数组中比它小的所有数字的数目。 换而言之&#xff0c;对于每个 nums[i] 你必须计算出有效的 j 的数量&#xff0c;其中 j 满足 j ! i 且 nums[j] &…

Ae:灯光图层

灯光 Light是合成中可用于照亮其他 3D 图层并能产生投影、反射的一种元素&#xff0c;类似于光源。如果没有建立灯光图层&#xff0c;系统会使用默认的“环境光”来照亮场景。当建立了灯光图层之后&#xff0c;以所建立的灯光来照明。一般可根据实际需要创建一个或多个相同或不…

OA系统是什么意思?企业为什么要用OA办公系统软件?

阅读本文您将了解&#xff1a;1、什么是OA&#xff1b;2、OA系统是什么意思&#xff1b;2、OA系统功能和对企业重要性 什么是OA&#xff1f; OA即办公自动化&#xff08;Office Automation&#xff0c;简称OA&#xff09;&#xff0c;是将计算机、通信等现代化技术运用到传统…