CodeGym /课程 /Docker SELF /Docker Compose中的环境变量

Docker Compose中的环境变量

Docker SELF
第 16 级 , 课程 0
可用

6.1 环境变量基础

环境变量在应用配置中起着重要作用,可以动态地改变服务的行为和参数,而不需要修改代码。Docker Compose 支持使用环境变量来配置容器,这提高了配置管理的灵活性和便利性。

管理环境变量最方便的方法之一就是使用 .env 文件。在这个讲座里,我们会详细讨论如何在 Docker Compose 中使用环境变量,包括 .env 文件的创建和使用。

Docker Compose 中环境变量基础

环境变量可以用在 compose.yaml 文件中,用于配置参数化。这些变量可以在 .env 文件中定义,也可以直接在 compose.yaml 文件中定义,或者通过命令行直接传递。

compose.yaml 中使用环境变量的例子:

在这个例子中使用了 NGINX_VERSIONHOST_PORT 变量,这些值可以在 .env 文件中定义,也可以通过命令行进行设置。

Yaml

version: '3.8'

services:
  web:
    image: nginx:${NGINX_VERSION}
    ports:
      - "${HOST_PORT}:80"

6.2 使用.env文件

1. 创建.env文件

.env文件放在和compose.yaml相同的目录下,包含“键-值”对,用于定义环境变量的值。每个变量都需要写在新的一行上。

.env文件示例:

.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_VERSIONHOST_PORTDB_USERDB_PASSWORD的值都来自.env文件。

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}

6.3 传递变量

通过命令行传递变量

你可以通过命令行直接传递环境变量,在类 Unix 系统中使用 export 命令,或者在 Docker Compose 中使用参数 --env-file

使用 export 的示例:

Terminal

export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up

使用 --env-file 的示例:

你可以通过参数 --env-file 指定一个带有环境变量的文件。

Terminal

docker compose --env-file .env.dev up

在 Docker Compose 中使用内置环境变量

Docker Compose 支持使用内置环境变量,比如 ${PWD},它表示当前工作目录。

示例:

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    volumes:
      - ${PWD}/app:/app

6.4 实践示例

使用环境变量的实践示例:

示例 1: 配置 Web 服务器和数据库

创建一个包含 Web 服务器和数据库参数的 .env 文件:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

创建一个使用这些变量的 compose.yaml 文件:

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:

Terminal

docker compose up

示例 2: 为开发和生产环境分离配置

创建两个不同环境的 .env 文件: .env.dev.env.prod.

.env.dev 文件:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

.env.prod 文件:

.env

NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword

创建一个使用这些文件变量的 compose.yaml 文件:

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:

Terminal

docker compose --env-file .env.dev up

启动生产环境的 Docker Compose:

Terminal

docker compose --env-file .env.prod up
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION