Docker 容器中设置环境变量的方法

阅读时长 5 分钟读完

什么是 Docker 容器

Docker 是一种开源的容器化平台,它可以让开发者将应用程序和其依赖的库、标准化配置等封装到一个可移植的容器中,从而实现应用程序在不同平台和部署环境中的无缝移植。

Docker 容器是 Docker 平台的核心概念,它可以将应用程序和依赖的组件打包成一个运行时完整的环境,从而使得应用程序在不同的部署环境中具备高度的可移植性和一致性。

为什么要设置环境变量

在应用程序的开发、测试、部署的过程中,常常需要进行一些配置,例如数据库的连接信息、服务端口的设置等。这些配置信息通常会保存在应用程序中的配置文件中,然而这种方式有一个显著的缺点:当需要改变某个配置信息时,必须重新编译、打包、部署应用程序,这样会导致生产力的浪费和不必要的延迟,尤其是在现代云计算、容器化的环境下,应用程序的部署和维护变得更加频繁和复杂,因此更需要一种可动态修改的配置方案。

这时,环境变量就起到了重要的作用。通过将应用程序的配置信息存储在环境变量中,可以使得配置信息在容器创建、运行时自动注入到应用程序中,应用程序即可根据环境变量动态调整自身的行为,这增加了应用程序的灵活性和可维护性。

如何在 Docker 容器中设置环境变量

Docker 允许我们在容器中设置环境变量,从而可以将环境特定的配置信息传递给应用程序。Docker 容器中的环境变量分为两类:

  1. 系统中预定义的环境变量,例如 HOME、LANG、PATH 等;
  2. 用户自定义的环境变量,这是我们配置应用程序的主要方式。

在 Dockerfile 中,可以通过 ENV 指令来定义环境变量,例如:

然后,在容器运行时,这些变量可以被映射到容器中的环境变量中,例如:

这样,容器中的 myapp 应用程序就可以在运行时通过读取环境变量 PG_USER 和 PG_PASSWORD 来访问数据库了。

通过设置环境变量,我们可以将容器应用程序与其所需的配置信息分离开来,从而使得容器应用程序更加可移植和可配置。

示例代码

接下来,我们使用一个简单的 Node.js 应用程序作为示例,说明如何在 Docker 容器中设置环境变量。

首先,我们需要创建一个 Node.js 应用程序,假设我们有一个名为 hello.js 的文件,其内容如下:

-- -------------------- ---- -------
----- ------- - -------------------
----- --- - ----------

----- ---- - ---------------- -- -----
----- -------- - -------------------- -- --------

------------ ----- ---- -- -
  ---------------------- ---------
---

---------------- -- -- -
  ------------------- ------- -- ---- ----------
---

该应用程序使用 express 框架创建一个 HTTP 服务器,当用户访问根路径时,会返回一个包含问候语的页面。其中,greeting 变量表示问候语,port 变量表示端口号,这两个变量的值取决于环境变量的设置。

然后,我们需要创建一个 Dockerfile 文件,将该应用程序打包成一个 Docker 镜像,其内容如下:

-- -------------------- ---- -------
---- --------------

------- ----

---- ------------ ----
---- ----------------- ----

--- --- -------

---- -------- ----

--- ------------------
--- -----------

------ ----

--- ------- --------

该文件使用 node:14-alpine 镜像作为基础镜像,并在 /app 目录下创建一个 Node.js 应用程序的工作目录。然后,将 package.json 和 package-lock.json 文件复制到该工作目录下,并运行 npm install 命令以安装该应用程序的所有依赖项。最后,将 hello.js 文件复制到工作目录下,设置两个环境变量 GREETING 和 PORT,并将端口号 8080 映射到宿主机,最后通过 CMD 命令运行该应用程序。

最后,我们通过以下命令来构建和运行该 Docker 镜像:

这样,我们就成功地将应用程序打包成一个 Docker 容器,并通过环境变量来指定应用程序的配置信息,使得应用程序具备了更高的灵活性和可维护性。

总结

通过使用环境变量,我们可以将应用程序的配置信息与应用程序代码分离开来,使得应用程序具备更高的灵活性和可维护性。在 Docker 容器中,我们可以通过 ENV 指令来定义环境变量,在容器运行时,也可以通过 -e 指令来动态设置环境变量。在实际应用中,我们可以根据业务需求设置不同的环境变量,从而实现不同环境下的自动配置,提高生产力和开发效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648965b848841e98947aef8b

纠错
反馈