如何在 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 指令中使用變數的方法,例如使用ENV、ARG或在執行時傳遞它們。
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 命令中使用變數可以大大提高容器配置的靈活性和可維護性。透過使用ENV、ARG或執行時傳遞選項,您可以建立更動態和可配置的容器。此外,透過遵循最佳實踐(例如對敏感資訊使用環境變數並注意效能),您可以確保安全可靠的容器部署。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP