如何在 Dockerfile 的 CMD 命令中使用變數?


簡介

在 Dockerfile 的 CMD 命令中使用變數可以大大提高容器配置的靈活性和可維護性。在 CMD 指令中硬編碼值會使將來難以更新或修改容器的配置。使用變數允許更動態和可重用的配置。

前提條件

在 Dockerfile 的 CMD 命令中使用變數的前提條件取決於您選擇使用的方法:

  • 使用 shell 展開 - 無需任何特定前提條件。

  • 使用 ENV 指令 - 無需任何特定前提條件。

  • 使用 ARG 指令 - 無需任何特定前提條件。

  • 執行時傳遞變數 - 無需任何特定前提條件,但您應該有一個正在執行的 Docker 守護程序並安裝了 Docker 命令列工具。

  • 使用 SHELL 指令 - 您應該在系統上安裝一個與 SHELL 指令中使用的語法相容的 shell。

  • 在映象構建期間使用 --build-arg 標誌 - 您應該在系統上安裝 Docker。

  • 在 compose 檔案中使用執行時變數並在docker-compose up 命令期間將其傳遞給容器 - 您應該在系統上安裝 Docker 和 Docker-compose。

  • 在 compose 檔案中使用ENV_FILE指令從檔案傳遞環境變數到容器 - 您應該在系統上安裝 Docker 和 Docker-compose,以及包含環境變數的鍵值對檔案。

同樣重要的是要注意,在所有情況下,變數都應該在其在 CMD 指令中使用之前定義,無論是透過 ENV 或 ARG 指令、shell 展開還是執行時標誌。

在 Dockerfile CMD 中使用變數的方法

  • 使用 shell 展開 - 您可以透過使用 shell 展開在 CMD 指令中包含變數。語法是$VARIABLE${VARIABLE}。例如:

ENV VARIABLE=default 
CMD echo “Printing the value of the VARIABLE : $VARIABLE” 
  • 使用 ENV 指令 - 您可以在 Dockerfile 中使用ENV指令設定環境變數,並使用$VARIABLE語法在 CMD 指令中引用它。例如:

ENV VARIABLE=default 
CMD echo “Printing the value of the VARIABLE : $VARIABLE” 

您還可以使用docker run命令中的-e標誌在執行時傳遞環境變數:

docker run -e VARIABLE=new_value myimage 
  • 使用 ARG 指令 - 您可以在 Dockerfile 中使用ARG指令在構建時設定變數,並使用$VARIABLE語法在 CMD 指令中引用它。例如:

ARG VARIABLE=default 
CMD echo “Printing the value of the VARIABLE : $VARIABLE” 

您可以使用--build-arg標誌在構建期間傳遞變數值:

docker build --build-arg VARIABLE=new_value -t myimage . 
  • 執行時傳遞變數 - 您可以使用docker run命令中的-e標誌在執行時傳遞變數,並使用$VARIABLE語法在 CMD 指令中引用它。

  • 使用 SHELL 指令 - 您可以使用SHELL指令為命令展開指定不同的 shell,並使用 shell 的變數語法在 CMD 指令中引用變數。例如:

SHELL ["bash", "-c"]
ENV VARIABLE=default
CMD echo “Printing the value of the VARIABLE : $VARIABLE”
  • 在映象構建期間使用--build-arg標誌

docker build --build-arg VARIABLE=new_value -t myimage . 
  • 在 compose 檔案中使用執行時變數,並在docker-compose up命令期間將其傳遞給容器。

version: "3.8"
services:
  web:
    build: .
    environment:
      - VARIABLE=${VARIABLE}
  • 在 compose 檔案中使用ENV_FILE指令從檔案傳遞環境變數到容器。

  • version: "3.8"
    services:
      web:
        build: .
        env_file:
          - .env
    

    以及在.env檔案中:

    VARIABLE=new_value 
    

    在以上所有示例中,您可以使用$VARIABLE語法在 CMD 指令中引用變數。

    CMD echo “Printing the value of the VARIABLE : $VARIABLE” 
    

    重要的是要注意,在ENV_FILE的情況下,檔案應該包含鍵值對,每行一對,其中鍵是環境變數的名稱,值是要分配給變數的值。

    理解在 Dockerfile CMD 中使用變數的語法

    Docker 提供了幾種在 CMD 指令中使用變數的方法,例如使用ENVARG或在執行時傳遞它們。

    ENV指令設定環境變數,可以使用$VARIABLE語法在 CMD 指令中引用。例如,以下 Dockerfile 設定一個值為default的環境變數VARIABLE,並在 CMD 指令中引用它:

    FROM alpine 
    ENV VARIABLE=default 
    CMD echo “Printing the value of the VARIABLE : $VARIABLE” 
    

    在執行容器時,您可以使用-e標誌在執行時傳遞變數的值:

    docker run -e VARIABLE=new_value myimage 
    

    ARG指令用於在構建過程中定義變數,可以使用${VARIABLE}語法在 CMD 指令中引用。例如,以下 Dockerfile 設定一個值為default的 ARG VARIABLE,並在 CMD 指令中引用它:

    FROM alpine 
    ARG VARIABLE=default 
    CMD echo "The value of VARIABLE is: ${VARIABLE}" 
    

    在構建映象時,您可以使用--build-arg標誌傳遞變數的值:

    docker build --build-arg VARIABLE=new_value -t myimage .
    

    也可以使用 docker run 命令在執行時傳遞變數,例如:

    docker run --env VARIABLE=new_value myimage 
    

    在 Dockerfile CMD 中使用變數的最佳實踐

    在 Dockerfile 的 CMD 命令中使用變數時,務必記住以下最佳實踐:

    • 對敏感資訊(如密碼和令牌)使用環境變數,並確保不要將它們包含在映象中。

    • 注意效能,並儘量減少 CMD 指令中使用的環境變數的數量。

    • 以允許將來輕鬆更新和修改容器配置的方式使用變數。

    結論

    總之,在 Dockerfile 的 CMD 命令中使用變數可以大大提高容器配置的靈活性和可維護性。透過使用ENVARG或執行時傳遞選項,您可以建立更動態和可配置的容器。此外,透過遵循最佳實踐(例如對敏感資訊使用環境變數並注意效能),您可以確保安全可靠的容器部署。

    更新於:2023年2月17日

    9K+ 次瀏覽

    開啟你的職業生涯

    完成課程獲得認證

    開始學習
    廣告
    © . All rights reserved.