如何用docker-compose v3.1来管理秘密值

如何用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文件中设置一个环境变量,我们可以使用我们要设置变量的服务下的环境键。

第1步 – 在代码编辑器中导航到你的项目目录。

对于使用你的终端导航,使用以下命令—-。

$cd /directory-path

第2步 – 在你的docker-compose.yml文件中,指定我们要设置变量的服务下的环境键。

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

第3步 – 在同一目录下添加相应的名为 “Dockerfile “的Docker文件,不包含以下内容—-。

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步 – 为了在docker-compose v3.1中使用.env文件,我们可以使用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秘密,以安全的方式存储和管理敏感数据。我们还看了各种例子来实现同样的功能。通过使用这些方法,我们可以避免在代码库中以纯文本形式存储秘密值,并减少安全漏洞的风险。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Docker教程