zoukankan      html  css  js  c++  java
  • Dockerfiles ENV和ARG的应用

    在写Dockerfile时, ENV和ARG,包括.env都是很容易弄混的概念。让我们对其进行区分。

    .env文件

    和docker-compose.yml配合使用。并不和Dockerfile一起使用

    env_file

    在Dockerfile中使用,当环境变量很多,可食用该参数,指定对应的变量文件。

    ARG

    在Dockerfile中使用,仅仅在build docker image的过程中(包括CMD和ENTRYPOINT)有效,在image被创建和container启动之后,无效。

     如果你在Dockerfile中使用了ARG但并未给定初始值,则在运行docker build的时候未指定该ARG变量,则会失败。

    虽然其在container启动后不再生效,但是使用‘docker history’可以查看到。所以,敏感数据不建议使用ARG.

    设置ARG和使用ARG编译image, 实例如下:

    1.  
      # In the Dockerfile
    2.  
      ARG some_variable_name
    3.  
      # or with a hard-coded default:
    4.  
      #ARG some_variable_name=default_value
    5.  
       
    6.  
      RUN echo "Oh dang look at that $some_variable_name"
    7.  
       
    8.  
      # In the shell command
    9.  
      docker build --build-arg some_variable_name=a_value
    10.  
       
    11.  
      # Then you will get
    12.  
      Oh dang look at that a_value

    ENV

    在Dockerfile中使用,在build docker imag的过程中有效,在image被创建和container启动后作为环境变量依旧也有效,并且可以重写覆盖。printenv可查看其值。

    设置ENV和使用env,实例如下

    1.  
      # no default value
    2.  
      ENV hey
    3.  
      # a default value
    4.  
      ENV foo /bar
    5.  
      # or ENV foo=/bar
    6.  
       
    7.  
      # ENV values can be used during the build
    8.  
      ADD . $foo
    9.  
      # or ADD . ${foo}
    10.  
      # translates to: ADD . /bar
    11.  
       
    12.  
      # Use the following docker commands to set env
    13.  
       
    14.  
      docker run -e "env_var_name=another_value" alpine env
    15.  
      docker run -e env_var_name alpine env
    16.  
      docker run --env-file=env_file_name alpine env

    有时候,ARG和ENV一起使用,实例如下图:

    1.  
      # expect a build-time variable
    2.  
      ARG A_VARIABLE
    3.  
      # use the value to set the ENV var default
    4.  
      ENV an_env_var=$A_VARIABLE
    5.  
      # if not overridden, that value of an_env_var will be available to your containers!
  • 相关阅读:
    sprintf与snprintf
    风雨20年:我所积累的20条编程经验
    istream_iterator, ostream_iterator,copy以及文件序列化
    [转载]关于C++,我觉得好的设计法则
    如何高效地管理时间
    B站上适合程序员的学习资源【赶紧收藏!】
    Redis和Memcached的区别
    Swoole的多进程模块
    Mac OS 查看 ip 地址及 DHCP 各 addr 含义
    mac将phpstorm 从主屏移动到副显示器(解决)
  • 原文地址:https://www.cnblogs.com/ExMan/p/13039623.html
Copyright © 2011-2022 走看看