很多时候,我们需要为运行在容器中的应用程序提供一些配置。配置通常用于允许同一个容器在完全不同的环境中运行,例如开发、测试或生产环境。在 Linux 中,配置值通常通过环境变量提供。我们已经了解到,在容器内运行的应用程序与其主机环境完全隔离。因此,我们在主机上看到的环境变量与我们在容器内看到的环境变量是不同的。
让我们看看主机上的定义来证明这一点:
1. 使用此命令可显示为终端会话定义的所有环境变量列表:
export
2. 接下来,让我们在 Alpine 容器中运行一个 shell:
docker container run --rm -it alpine /bin/sh
需要提醒的是,我们使用 --rm 命令行参数是为了在停止运行后不必移除悬空容器,有关悬空容器的清理,可以查看我的文章:保持docker环境干净-CSDN博客
3. 用这条命令列出我们可以看到的环境变量
export
前面的输出结果与我们直接在主机上看到的结果不同。
4. 退出容器
按 Ctrl + D 离开并停止alpine容器
为容器定义环境变量
我们可以在启动时向容器传递一些配置值。我们可以使用--env(或简称-e)参数,其形式为--env <key>=<value> ,其中 <key> 是环境变量的名称,<value> 代表与该变量相关联的值。假设我们希望在容器中运行的应用程序能够访问名为 LOG_DIR 的环境变量,其值为 /var/log/my-log。我们可以使用这条命令来实现这一目的:
docker container run --rm -it \
--env LOG_DIR=/var/log/my-log \
alpine /bin/sh
前面的代码在 Alpine 容器中启动了一个 shell,并在运行的容器中定义了所请求的环境。为了证明这一点,我们可以在 Alpine 容器中执行这条命令:
export | grep LOG_DIR
输出结果符合预期。现在,我们可以在容器中使用正确值的环境变量了。当然,在运行容器时,我们可以定义不止一个环境变量。我们只需重复使用--env(或-e)参数即可。请看这个示例:
docker container run --rm -it \
--env LOG_DIR=/var/log/my-log \
--env MAX_LOG_FILES=5 \
--env MAX_LOG_SIZE=1G \
alpine /bin/sh
运行上述命令后,我们将看到 Alpine 容器内的命令提示符,让我们用以下命令列出环境变量:
export | grep LOG
使用配置文件
复杂的应用程序可能会有许多环境变量需要配置,因此我们运行相应容器的命令很快就会变得笨重。为此,Docker 允许我们以文件形式传递环境变量定义集合。为此,我们在 docker 容器运行命令中使用了 --env-file 参数。
定义配置文件development.config,内容如下
LOG_DIR=/var/log/my-log
MAX_LOG_FILES=5
MAX_LOG_SIZE=1G
注意我们是如何以 <key>=<value> 的格式在每行定义一个环境变量的,其中 <key> 是环境变量的名称,<value> 代表与该变量相关联的值。
使用配置文件
运行一个 Alpine 容器,将该文件作为环境配置文件传送,然后在容器内运行 export 命令来验证文件中列出的变量是否确实已在容器内创建为环境变量,就像这样:
docker container run --rm -it \
--env-file ./development.config \
alpine sh -c "export | grep LOG"
正如我们在生成的输出中看到的那样,变量确实已被定义:
这正是我们所期望的。
以上便是在容器配置环境变量的方式,分别是在容器运行时通过—env进行配置;另一个便是通过一个配置文件进行配置,希望对你有所帮助,有关docker的基础的内容,可以通过以下课程进行学习:Docker 实战_在线视频教程-CSDN程序员研修院