6.1 环境变量基础
环境变量在应用配置中起着重要作用,可以动态地改变服务的行为和参数,而不需要修改代码。Docker Compose 支持使用环境变量来配置容器,这提高了配置管理的灵活性和便利性。
管理环境变量最方便的方法之一就是使用 .env
文件。在这个讲座里,我们会详细讨论如何在 Docker Compose 中使用环境变量,包括 .env
文件的创建和使用。
Docker Compose 中环境变量基础
环境变量可以用在 compose.yaml
文件中,用于配置参数化。这些变量可以在 .env
文件中定义,也可以直接在 compose.yaml
文件中定义,或者通过命令行直接传递。
在 compose.yaml
中使用环境变量的例子:
在这个例子中使用了 NGINX_VERSION
和 HOST_PORT
变量,这些值可以在 .env
文件中定义,也可以通过命令行进行设置。
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 使用.env
文件
1. 创建.env
文件
.env
文件放在和compose.yaml
相同的目录下,包含“键-值”对,用于定义环境变量的值。每个变量都需要写在新的一行上。
.env
文件示例:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. 将.env
文件与Docker Compose集成
如果.env
文件位于和compose.yaml
相同的目录下,Docker Compose会自动加载文件中的变量。
使用环境变量的compose.yaml
文件示例:
在这个示例中,NGINX_VERSION
、HOST_PORT
、DB_USER
和DB_PASSWORD
的值都来自.env
文件。
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 传递变量
通过命令行传递变量
你可以通过命令行直接传递环境变量,在类 Unix 系统中使用 export
命令,或者在 Docker Compose 中使用参数 --env-file
。
使用 export
的示例:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
使用 --env-file
的示例:
你可以通过参数 --env-file
指定一个带有环境变量的文件。
docker compose --env-file .env.dev up
在 Docker Compose 中使用内置环境变量
Docker Compose 支持使用内置环境变量,比如 ${PWD}
,它表示当前工作目录。
示例:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 实践示例
使用环境变量的实践示例:
示例 1: 配置 Web 服务器和数据库
创建一个包含 Web 服务器和数据库参数的 .env
文件:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
创建一个使用这些变量的 compose.yaml
文件:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
启动 Docker Compose:
docker compose up
示例 2: 为开发和生产环境分离配置
创建两个不同环境的 .env
文件: .env.dev
和 .env.prod
.
.env.dev
文件:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
.env.prod
文件:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
创建一个使用这些文件变量的 compose.yaml
文件:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
启动开发环境的 Docker Compose:
docker compose --env-file .env.dev up
启动生产环境的 Docker Compose:
docker compose --env-file .env.prod up
GO TO FULL VERSION