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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM