如何使用docker-compose v3.1管理密钥值?


介绍

作为开发者,我们经常需要将私密数据(包括密码、API 密钥和数据库凭据)整合到我们的应用程序中。将这些变量硬编码到我们的代码或配置文件中不仅不安全,而且在需要时管理和更改它们也可能很困难。

使用环境变量是一种管理密钥值的方法,它允许我们将敏感数据与我们的代码库和配置文件分开。在本文中,我们将探讨如何使用 docker-compose v3.1 管理密钥值,并将它们作为环境变量注入到我们的容器中。

前提条件

要学习本教程,您需要在您的机器上安装 Docker 和 docker-compose v3.1。您可以使用以下命令在您的终端中查看是否已安装这些实用程序:

$ docker --version 
$ docker-compose --version

方法

我们可以使用多种方法来使用 docker-compose v3.1 管理密钥值。

其中一些方法包括:

  • 使用环境变量

  • 使用 .env 文件

现在让我们详细讨论这些方法并举例说明。

使用环境变量

使用 docker-compose v3.1 管理密钥值的一种方法是使用环境变量。环境变量是在运行时传递给容器的键值对。它们可以在 docker-compose 文件中设置,也可以从主机传递。

示例 1

要在 docker-compose 文件中设置环境变量,我们可以在我们要设置变量的服务下使用 `environment` 键。

步骤 1 - 在您的代码编辑器中导航到您的项目目录。

要使用终端导航,请使用以下命令:

$cd /directory-path

步骤 2 - 在您的 `docker-compose.yml` 文件中,在我们要设置变量的服务下指定 `environment` 键。

version: "3.1" 
services: 
web: 
   image: nginx:latest 
   ports: 
   - 8080:80 
   environment: 
   - API_KEY=123456

步骤 3 - 在同一目录中添加名为“Dockerfile”的相应 Dockerfile,其中不包含以下内容:

FROM nginx:latest 
EXPOSE 80 
ENV API_KEY=123456

步骤 4 - 现在通过在终端中运行以下命令来运行和构建此 docker-compose:

$docker-compose up

输出

[+] Running 1/1
- Container examp2-web-1 Recreated                    0.9s
Attaching to examp2-web-1
examp2-web-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
examp2-web-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
examp2-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
…
examp2-web-1 | 2023/01/09 17:53:54 [notice] 1#1: start worker process 38
examp2-web-1 | 2023/01/09 17:53:54 [notice] 1#1: start worker process 39
examp2-web-1 | 2023/01/09 17:53:54 [notice] 1#1: start worker process 40

使用 .env 文件

使用 docker-compose v3.1 管理密钥值的另一种方法是使用 .env 文件。.env 文件是一个包含在运行时传递给容器的键值对列表的文件。docker-compose 文件和 .env 文件必须都在同一目录中。

步骤 1 - 在您的代码编辑器中导航到您的项目目录。

步骤 2 - 在您的项目目录中创建一个名为 .env 的文件。

步骤 3 - 要将 .env 文件与 docker-compose v3.1 一起使用,我们可以使用 `api key` 命令在 .env 文件中设置环境变量,如下所示:

API_KEY=123456

步骤 4 - 使用以下命令在终端中运行 .env 文件。

$ cat .env

输出

API_KEY=123456

步骤 5 - 在同一目录中创建一个 `docker-compose.yml` 文件,然后使用 `${VAR_NAME}` 语法引用这些环境变量:

version: "3.1" 
services: 
 web: 
   image: nginx:latest 
   ports: 
   - 8080:80 
   environment: 
   - API_KEY=${API_KEY}

步骤 6 - 使用以下命令在终端中输出 `docker-compose.yml` 文件的内容:

$ cat docker-compose.yml

输出

For Output Code pre classversion: "3.1"
services:
web:
environment:
- API_KEY=${API_KEY}

步骤 7 - 使用终端在终端中运行此文件:

$ docker-compose up

输出

[+] Running 1/0
- Container examp2-web-1 Created 0.0s
Attaching to examp2-web-1
examp2-web-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
examp2-web-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
examp2-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
examp2-web-1 | 10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled
examp2-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
examp2-web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
examp2-web-1 | /docker-entrypoint.sh: Configuration complete; ready for start up
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: using the "epoll" event method
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: nginx/1.23.3
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: OS: Linux
…
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: start worker process 29
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: start worker process 30
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: start worker process 31
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: start worker process 32
examp2-web-1 | 2023/01/09 18:04:52 [notice] 1#1: start worker process 33

结论

在本文中,我们探讨了使用 docker-compose v3.1 管理密钥值的几种方法。我们可以使用环境变量、.env 文件和 Docker 密钥以安全的方式存储和管理敏感数据。我们还查看了各种实现示例。通过使用这些方法,我们可以避免在代码库中以纯文本形式存储密钥值,并降低安全漏洞的风险。

更新于:2023年1月17日

3000+ 次浏览

启动您的 职业生涯

完成课程后获得认证

开始
广告