Docker Compose 环境变量
在 Docker Compose 中,环境变量是一种强大的工具,用于配置和管理容器化应用程序的行为。通过环境变量,您可以在不修改 Dockerfile 或 Compose 文件的情况下,动态地调整应用程序的设置。本文将详细介绍如何在 Docker Compose 中使用环境变量,并通过实际案例展示其应用场景。
什么是环境变量?
环境变量是操作系统或应用程序中用于存储配置信息的键值对。在 Docker 中,环境变量通常用于传递配置参数给容器内的应用程序。例如,数据库连接字符串、API 密钥或调试模式等都可以通过环境变量来设置。
在 Docker Compose 中使用环境变量
在 Docker Compose 文件中,您可以通过多种方式定义和使用环境变量。以下是几种常见的方法:
1. 直接在 environment
中定义
您可以在 docker-compose.yml
文件的 environment
部分直接定义环境变量。例如:
version: '3.8'
services:
web:
image: nginx
environment:
- DEBUG=true
- DATABASE_URL=postgres://user:password@db:5432/mydb
在这个例子中,DEBUG
和 DATABASE_URL
是两个环境变量,它们将被传递给 web
服务。
2. 使用 .env
文件
您还可以将环境变量存储在 .env
文件中,并在 docker-compose.yml
中引用它们。.env
文件通常位于项目的根目录下,内容如下:
DEBUG=true
DATABASE_URL=postgres://user:password@db:5432/mydb
然后在 docker-compose.yml
中引用这些变量:
version: '3.8'
services:
web:
image: nginx
env_file:
- .env
3. 使用 environment
和 .env
文件的组合
您还可以在 docker-compose.yml
中直接引用 .env
文件中的变量:
version: '3.8'
services:
web:
image: nginx
environment:
- DEBUG=${DEBUG}
- DATABASE_URL=${DATABASE_URL}
在这种情况下,Docker Compose 会自动从 .env
文件中读取 DEBUG
和 DATABASE_URL
的值。
实际案例
假设您正在开发一个 Web 应用程序,该应用程序需要连接到 PostgreSQL 数据库。您可以使用环境变量来配置数据库连接字符串,而不必在代码中硬编码这些信息。
1. 创建 .env
文件
首先,在项目的根目录下创建一个 .env
文件:
DATABASE_URL=postgres://user:password@db:5432/mydb
2. 配置 docker-compose.yml
接下来,在 docker-compose.yml
中引用这个环境变量:
version: '3.8'
services:
web:
image: my-web-app
environment:
- DATABASE_URL=${DATABASE_URL}
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
在这个例子中,web
服务将使用 .env
文件中定义的 DATABASE_URL
环境变量来连接到 db
服务。
总结
通过使用环境变量,您可以轻松地配置和管理 Docker Compose 中的容器化应用程序。无论是直接在 docker-compose.yml
中定义变量,还是通过 .env
文件来管理,环境变量都提供了一种灵活且安全的方式来传递配置信息。
附加资源
练习
- 创建一个
.env
文件,并在其中定义几个环境变量。 - 在
docker-compose.yml
中引用这些变量,并启动一个简单的 Web 服务。 - 尝试在容器内打印这些环境变量,以验证它们是否正确传递。
通过完成这些练习,您将更好地理解如何在 Docker Compose 中使用环境变量。