Docker和docker编写.env文件教程
Docker 环境变量使用简单教程..
对于这个示例,我们将使用Python Flask
,但您可以将它与您想要的任何其他语言和框架一起使用。另外,我们将使用docker
和docker compose
。
首先,您可以通过单击此处访问为本教程制作的原始代码和文章。
为什么在我们的项目中使用 .env 文件?
当我们开始学习编程时,通常web dev的基础教程向我们展示了项目中的秘密,就像主代码中的SECRET=mysecretpasswordforcript
一样。我们运行该项目,一切都很好。没关系。但是当我们开始开发一些更真实的世界特性时,这不是一个好主意,主要是如果项目将是开源的,或者向组织内部或外部的其他人公开。
除此之外,当开发将在某些生产环境中运行的开源应用程序(很多时候也在开发环境中)时,它可能会使用一些密钥或身份验证方法进行外部访问。
它的源代码会暴露在我们的仓库中,如果我们在开发环境和生产环境中不使用不同的密钥,安全性就会受到影响。
在生产和开发环境中有很多方法可以组织密钥。然后使用Docker
或Docker Compose
之一是实现一个.env
文件(或多个文件)并配置我们的容器或docker-compose.yml
以开始使用此存档上定义的变量。
这样做的主要目标是去掉我们硬代码的秘密并将其放入另一个文件中,它将被加载到项目中,并且可以动态设置秘密值。
之后,我们可以在每个人都可以访问的打开文件和只有您和授权用户可以访问的真实文件之间切换。
废话不多说,上代码吧。
开始吧
本教程的内容:
-
使用
Docker CLI
运行容器并使用标志和 .env 文件加载变量 -
Hello world
Flask
应用程序正在运行并显示来自容器的一些环境变量 -
.env
带有环境变量的文件 -
用于构建
Docker image
的Dockerfile
-
一个
docker-compose.yml
文件,用于使用环境变量启动服务容器
我们不会从头开始学习 Docker 或 Docker Compose。本教程假设您了解其中每一项的基础知识。
1 — 创建 docker 镜像
如果您没有在 docker compose 上运行,我们可以在其中自动构建映像,本节将非常重要。
首先,让我们创建将用于启动容器的图像。为此,只需在 Dockerfile 目录中键入以下命令:
docker build . -t docker-tutorial-image
这将基于 Dockerfile 构建一个带有标签“docker-tutorial-image”或您想要的任何其他名称的图像。
构建后,您可以检查它以确保一切正常,只需键入以下命令以列出所有可用图像:
docker images
如果在没有错误的情况下执行了构建,您将在列表中看到您的图像。
1.1 — Docker 运行带有标志的环境
本节用于创建一个简单的容器,该容器在使用标志运行的容器中加载环境变量。
要使用上一节中创建的映像启动容器,只需键入以下命令:
docker run -p 80:5000 --name testing -e NAME=myname -d docker-tutorial-image
上面带有-p
标志的命令将 80 主机端口连接到 5000 容器端口,这是运行 Flask 服务的端口。--name
标志为容器设置了一个名称,您可以通过键入以下命令进行检查:
docker ps
并使用名为“testing”的容器或您设置的任何名称搜索名称列。-e
标志是谁在容器中插入变量。 -e 后面跟着这个语法:
VARIABLE=VALUE
这将在容器内创建一个具有您键入的名称和值的环境变量。启动容器后,您可以通过使用命令docker exec -it container-name bash
进入容器并运行set
命令来检查这一点。
-d
标志在后台运行容器。最后但并非最不重要的一点是构建部分中使用的标签图像。
现在,我们可以打开浏览器并通过以下 URL 检查结果:
zwz100019 http://localhost zwz100020 zwz100018
如您所见,在容器内运行的 API 返回一个包含变量的列表,其中“NAME”变量的值在 -e 标志中设置。如果您键入更多 VAR-NAMEu003dVALUE 的 -e 标志,它将显示在浏览器中。
但由于 app.py 脚本行为,只会出现 GITHUB、INSTAGRAM、LINKEDIN、NAME 和 YOUTUBE。您可以根据需要更改它。
1.2 — 使用 .env 文件运行 Docker
现在我们在说话!让我们开始真正使用 .env 文件。在本节中,我们将执行与上一节相同的操作,但这次使用
.env
文件而不是 -e 标志。
从档案中加载值是在编程中处理机密的一种非常常见的方法。
.env 文件是Docker
和Docker Compose
中可用的默认方法,用于使用.env
中的值启动任何服务。
使用非常简单。在.env
中,只需使用以下 sintax 将您的变量一个一个地写下:
VARIABLE_NAME=VALUE
您可以在教程文件夹中的.env 文件中看到这一点。有时,根据字符串格式,变量将使用一些特殊字符,shell 可以将其解释为注释或其他内容。在这种情况下,您可以使用简单引号来避免默认行为:VARNAME='VALUE'
。
通过这种方式,我们可以定义用于开发和生产环境的文件并在它们之间切换,还可以使用.gitignore管理要公开的文件。
要启动容器加载文件,只需在教程文件夹中键入以下命令:
docker run -p 80:5000 --name tutorial --env-file .env docker-tutorial-image
这里唯一的消息是--env-file
标志,它用于定义将用于将环境变量加载到容器的文件的路径。
现在,如果你打开http://localhost
地址:
! zoz100037](https://devpress-image.s3.cn-north-1.jdcloud-oss.com/a/11e9986740_1*DbGeP2Rt20QGF1FUg2-gcw.jpg)
.env 中的所有变量都加载到容器中,容器运行 Flask API,然后返回到浏览器。
2 docker-compose.yml 文件
在本节中,我们将了解如何在
docker compose
项目中使用 .env 文件。
在Docker Compose中,事情有点不同,而且命令更简洁。在docker-compose.yml文件中,有一些定义使我们能够在教程文件夹中运行休闲命令来启动并运行所有内容:
docker compose up --build -d
根据您使用的 Docker 环境版本,可能会使用“docker-compose”运行。
如果刷新页面,将得到与以前完全相同的结果。让我们了解一下刚刚发生了什么。
up
命令是设置和运行 docker-compose 文件中定义的服务,而--build
标志是如果镜像不存在则构建镜像(必须在 docker-compose.yml 服务级别的构建定义中配置。没有它,将无法工作,您需要在启动docker compose之前自行构建图像)并且-d
标志是在后台运行所有内容。
在服务级别缩进中,您将找到使用.env
存档的env_file
定义。这将加载文件并将变量带到容器配置中。
右下方是environment
定义。 sintax 很简单:CONTAINER_VARIABLE=${ENV_FILE_VARIABLE}
。.env file
变量的值将存储在容器变量中。使用它,您只需更改env_file
路径即可在将加载到服务容器中的文件之间切换。
测试完只需要执行命令停止容器:docker compose down
结论
在这个简单的示例中,我们只是使用了一个返回环境变量名称和值的服务 API。但我想你明白了。.env
文件中的值可用于散列、加密、设置配置和所有类型的东西。
您还可以创建一个包含多个 .env 文件的文件夹,例如.env.production
、production.env
或您喜欢的任何文件名 sintax,用于生产和开发。通过这种方式,您只需在存储库中使用 .gitignore 文件即可处理机密暴露。
我希望本教程可以帮助您了解如何在 Docker 或 Docker Compose 中使用环境变量。如果您只是提出问题,请随时对任何错误发表评论。
干杯!
再见 (:
再见!
再见 :)
再见
更多推荐
所有评论(0)