zoukankan      html  css  js  c++  java
  • ARG 构建参数 & ENV 设置环境变量—— Dockerfile

    ARG 构建参数

    ENV 设置环境变量

    格式有两种:

    • ENV <key> <value>
    • ENV <key1>=<value1> <key2>=<value2>...

    这个指令很简单,就是设置环境变量而已,

    无论是后面的其它指令,如 RUN,还是运行时的应用都可以直接使用这里定义的环境变量。

    ENV VERSION=1.0 DEBUG=on 
        NAME="Happy Feet"
    

    演示了如何换行,以及对含有空格的值用双引号括起来的办法,这和 Shell 下的行为是一致的。 

    定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

    比如在官方 node 镜像 Dockerfile 中,就有类似这样的代码:

    ENV NODE_VERSION 7.2.0
    
    RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" 
      && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" 
      && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc 
      && grep " node-v$NODE_VERSION-linux-x64.tar.xz$" SHASUMS256.txt | sha256sum -c - 
      && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 
      && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt 
      && ln -s /usr/local/bin/node /usr/local/bin/nodejs
    

      

    先定义了环境变量 NODE_VERSION,其后的 RUN 这层里,多次使用 $NODE_VERSION 来进行操作定制

    可以看到,将来升级镜像构建版本的时候,只需要更新 7.2.0 即可,Dockerfile 构建维护变得更轻松了。

    下列指令可以支持环境变量展开: 

    ADDCOPYENVEXPOSEFROMLABELUSERWORKDIRVOLUMESTOPSIGNALONBUILDRUN

    可以从这个指令列表里感觉到,环境变量可以使用的地方很多,很强大

    通过环境变量,我们可以让一份 Dockerfile 制作更多的镜像,只需使用不同的环境变量即可

    ARG 构建参数

    格式:ARG <参数名>[=<默认值>]

    构建参数和 ENV 的效果一样,都是设置环境变量

    不同的是,ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的

    但是不要因此就使用 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的

    Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值

    默认值可以在构建命令 docker build 中用 --build-arg <参数名>=<值> 来覆盖

    在 1.13 之前的版本,要求 --build-arg 中的参数名,必须在 Dockerfile 中用 ARG 定义过了,换句话说,就是 --build-arg 指定的参数,必须在 Dockerfile 中使用了。如果对应参数没有被使用,则会报错退出构建。从 1.13 开始,这种严格的限制被放开,不再报错退出,而是显示警告信息,并继续构建

    这对于使用 CI 系统,用同样的构建流程构建不同的 Dockerfile 的时候比较有帮助,避免构建命令必须根据每个 Dockerfile 的内容修改

  • 相关阅读:
    MySQL报错【innoDB is limited to rowlogging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED】
    【转】linux下解压命令大全
    java学习笔记
    【转】Linux安装MySQL tar文件
    Android部署及安装
    正则表达式各个符合含义
    [转]Linux下crontab命令的用法
    XTABLE学习笔记
    MySQL的mysqldump工具的基本用法
    java开发注意事项
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/12604269.html
Copyright © 2011-2022 走看看