如何在Dockerfile CMD中使用一个变量

如何在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指令 – 你可以在Docker文件中使用 ENV 指令来设置一个环境变量,并在CMD指令中使用 $VARIABLE 语法引用它。例如 –
ENV VARIABLE=default 
CMD echo “Printing the value of the VARIABLE : $VARIABLE” 

你也可以在运行时使用 docker运行 命令中的 -e 标志传递环境变量—–。

docker run -e VARIABLE=new_value myimage 
  • 使用ARG指令 – 你可以在Docker文件中使用 ARG 指令,在构建时设置一个变量,并在CMD指令中使用 $VARIABLE 语法引用它。例如 –
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 标志传递一个变量,并在CMD指令中使用 $VARIABLE 语法引用它。

  • 使用SHELL指令 – 你可以使用 SHELL 指令指定一个不同的shell进行命令扩展,并在CMD指令中使用shell的变量语法引用变量。例如 –

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}
  • 在编译文件中使用 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 的情况下,文件应该包含键值对,每行一对,其中键是环境变量的名称,而值是应该分配给变量的值。

了解在Docker文件中使用变量的语法 CMD

Docker提供了几种在CMD指令中使用变量的方法,例如使用 ENV , ARG , 或在运行时传递变量。

ENV 指令设置了环境变量,可以在CMD指令中使用语法 $VARIABLE 来引用 例如,下面的Docker文件设置了一个环境变量 VARIABLE ,其值为 default ,并在CMD指令中引用它–

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

而在运行容器时,你可以在运行时使用 -e 标志传递变量的值 –

docker run -e VARIABLE=new_value myimage 

ARG 指令用于在构建过程中定义变量,可以在CMD指令中使用语法 ${VARIABLE} 进行引用 例如,下面的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中使用变量的最佳做法

When using variables in a Dockerfile CMD, it’s important to keep in mind the following best practices −

  • 将环境变量用于敏感信息,如密码和令牌,并确保不在镜像中包含它们。

  • 要注意性能,尽量减少CMD指令中使用的环境变量的数量。

  • 使用变量的方式要便于将来对容器配置进行更新和修改。

结论

总之,在Dockerfile CMD中使用变量可以大大改善容器配置的灵活性和可维护性。通过使用 ENVARG 或在运行时传递选项,你可以创建更加动态和可配置的容器。此外,通过遵循最佳实践,如对敏感信息使用环境变量和注意性能,你可以确保安全和可靠的容器部署。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Docker教程