一、概述
环境变量是一种将应用程序配置外部化的便捷方式。 因此,它们对于构建Docker容器也很有用。 然而,在中传递和使用它们并不像想象的那么容易。Dockerfile
在这个简短的教程中,我们将仔细研究如何将环境变量值传递给Dockerfile。
首先,我们将展示将环境变量传递给构建过程可能有用的可能用例然后,我们将解释执行此操作的命令。 最后,我们将看到一个工作示例。.
ARG
2. 与 Container 中的环境变量Dockerfile
Dockerfile
是一个脚本,其中包含有关如何构建 Docker 映像的说明。 另一方面, Docker 容器是镜像的可运行实例。 根据我们的需要,我们可能需要构建时或运行时环境变量。
我们只关注构建时定制,将环境变量传递到我们的中以与 docker 一起使用。Dockerfile
docker build
三、在中使用环境变量的好处Dockerfile
使用环境变量的最大优势是灵活性。 我们可以只创建一个 ,根据用于构建容器的环境进行不同的配置。 作为说明,让我们想象一个在开发环境中启用调试选项并在生产环境中禁用相同选项的应用程序。 使用环境变量,我们只需要创建一个 ,它将保存调试标志的环境变量传递给容器和其中的应用程序。Dockerfile
Dockerfile
另一个重要的优势是安全问题。 将密码或其他敏感信息直接存储在中可能不是最好的主意。 环境变量有助于克服这个问题。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 中的默认名称:Dockerfile
John
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的变量赋值。name
ARG
env_name
ENV
当我们想要设置这个参数时,我们使用标志传递它:–build-arg
docker build -t baeldung_greetings --build-arg name=Baeldung .
现在,让我们运行我们的容器。 我们应该看到:
Hello Baeldung
如果我们想更改名称怎么办? 我们所要做的就是用不同的值重建图像。build-arg
六,结论
在本文中,我们学习了如何在构建期间设置环境变量。Dockerfile
首先,我们看到了参数化的优势。 然后,我们看到了如何使用命令设置环境变量以及如何使用允许在构建时修改该值。Dockerfile
ENV
ARG
0 评论