拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何将环境变量值传递到 Dockerfile

如何将环境变量值传递到 Dockerfile

白鹭 - 2022-07-12 2155 0 2

一、概述

环境变量是一种将应用程序配置外部化的便捷方式。 因此,它们对于构建Docker容器也很有用。 然而,在中传递和使用它们并不像想象的那么容易。Dockerfile

在这个简短的教程中,我们将仔细研究如何将环境变量值传递给Dockerfile。

首先,我们将展示将环境变量传递给构建过程可能有用的可能用例然后,我们将解释执行此操作的命令。 最后,我们将看到一个工作示例。.ARG

2. 与 Container 中的环境变量Dockerfile

Dockerfile是一个脚本,其中包含有关如何构建 Docker 映像的说明。 另一方面, Docker 容器是镜像的可运行实例。 根据我们的需要,我们可能需要构建时或运行时环境变量。

我们只关注构建时定制,将环境变量传递到我们的中以与 docker 一起使用。Dockerfiledocker build

三、在中使用环境变量的好处Dockerfile

使用环境变量的最大优势是灵活性。 我们可以只创建一个 ,根据用于构建容器的环境进行不同的配置。 作为说明,让我们想象一个在开发环境中启用调试选项并在生产环境中禁用相同选项的应用程序。 使用环境变量,我们只需要创建一个 ,它将保存调试标志的环境变量传递给容器和其中的应用程序。DockerfileDockerfile

另一个重要的优势是安全问题。 将密码或其他敏感信息直接存储在中可能不是最好的主意。 环境变量有助于克服这个问题。Dockerfile

4. 示例配置

在我们了解如何将环境变量值传递到 ,让我们构建一个示例来测试它。Dockerfile

我们将创建一个名为的简单 bash 脚本,它使用环境变量将问候语打印到控制台:greetings.sh

#!/bin/sh

 echo Hello $env_name

现在,让我们在同一目录中创建一个 :Dockerfile

FROM alpine:latest

 COPY greetings.sh .

 RUN chmod +x /greetings.sh

 CMD ["/greetings.sh"]

它复制我们的脚本,使其可执行并运行它。 让我们构建图像:

docker build -t baeldung_greetings .

然后,让我们运行它:

docker run baeldung_greetings

我们应该在控制台中只看到一行:

Hello

5. 将环境变量传递到Dockerfile

Dockerfile提供了一个专用的变量类型来创建环境变量。 我们可以在构建期间以及容器运行后访问 ENV 值ENV

让我们看看如何使用它向我们的问候脚本传递值。 有两种不同的方法可以做到这一点。

5.1。 硬编码环境值

传递环境值的最简单方法是在中对其进行硬编码。 在某些情况下,这可能已经足够好了。 让我们将硬编码为 Dockerfile 中的默认名称:DockerfileJohn

FROM alpine:latest

 ENV env_name John

 COPY greetings.sh .

 RUN chmod +x /greetings.sh

 CMD ["/greetings.sh"]

现在,让我们构建并运行我们的镜像。 这是所需的控制台输出:

Hello John

5.2.设置动态环境值

Dockerfile不提供在构建过程中设置 ENV 值的动态工具。 但是,有一个解决这个问题的方法。 我们必须使用 。 ARG 值的工作方式与 ENV 不同,因为**一旦构建了映像,我们就无法再访问它们**。 让我们看看如何解决这个问题:ARG

ARG name
 ENV env_name $name

我们正在引入变量。 之后,我们使用它为使用ENV的变量赋值。nameARGenv_nameENV

当我们想要设置这个参数时,我们使用标志传递它:–build-arg

docker build -t baeldung_greetings --build-arg name=Baeldung .

现在,让我们运行我们的容器。 我们应该看到:

Hello Baeldung

如果我们想更改名称怎么办? 我们所要做的就是用不同的值重建图像。build-arg

六,结论

在本文中,我们学习了如何在构建期间设置环境变量。Dockerfile

首先,我们看到了参数化的优势。 然后,我们看到了如何使用命令设置环境变量以及如何使用允许在构建时修改该值。DockerfileENVARG


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *