Docker环境变量使用

2024年2月27日 · 957 字 · 2 分钟 · Docker

Docker环境变量使用

在Docker中,环境变量是用于在Dockerfile和容器运行时传递配置信息的一种机制。 正确使用环境变量可以创建可配置、灵活的容器化应用程序。 以下是Dockerfile中环境变量的常见用法:

1. 使用ENV指令设置环境变量

ENV指令用于在Docker镜像建立时设置环境变量,其格式有两种:

  • 单行设置单个环境变量:

    ENV 变量名=变量值
    
  • 单行设置多个环境变量:

    ENV 变量名1=变量值1 变量名2=变量值2
    

这些变量会被嵌入到镜像中,并在容器运行时可用。

2. 在运行容器时设置环境变量

除了在Dockerfile中预定义环境变量外,你还可以在使用docker run命令启动容器时通过-e标志来指定环境变量:

docker run -e "变量名=变量值" -e "变量名2=变量值2" 镜像名

3. 使用环境变量参数化Dockerfile

在Dockerfile中,你可以通过${变量名}的方式使用环境变量来参数化指令,例如:

ENV 安装目录=/usr/local/app
WORKDIR ${安装目录}
COPY . ${安装目录}

这种方式使得Dockerfile具有更好的通用性和可配置性。

4. 环境变量和CMDENTRYPOINT指令

CMDENTRYPOINT指令中,也可以使用环境变量,这使得启动命令更加灵活:

ENV APP_NAME=myapp.jar
ENTRYPOINT ["java", "-jar", "${APP_NAME}"]

注意事项

  • 尽量减少环境变量的数量,以避免产生不必要的层,可能会导致Docker镜像变得过大。
  • 安全敏感的信息,如密码或密钥,不宜直接存储在Dockerfile或镜像中。考虑使用Docker Swarm的secrets或Kubernetes的Secrets等机制来管理这些数据。

Dockerfile中定义构建过程中的 变量 指令ARG

ARG指令

ARG指令主要用于构建Docker镜像的阶段,定义的变量在构建(build)过程中可用,但构建完成后,这些变量不会被嵌入到镜像中,也就是说,容器运行时它们不可用。

语法:

ARG <变量名>[=<默认值>]

示例:

ARG VERSION=latest

ENV环境变量 与 ARG参数变量的区别?

  • 如果你需要在构建阶段动态传递一些值,比如版本号、下载链接等,而这些值构建完成后不再需要,就应该使用ARG指令。
  • 如果你需要在镜像构建好之后,也就是容器运行期间让某些变量保持有效,用来配置应用的一些参数,就应该使用ENV指令。

参考资料