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
Docker Compose автоматически загружает переменные из файла .env, если он находится в той же директории, что и compose.yaml.
Пример файла 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 Передача переменных
Передача переменных через командную строку
Вы можете передавать переменные среды непосредственно через командную строку с использованием команды export в Unix-подобных системах или с помощью параметра --env-file в Docker Compose.
Пример использования 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: Настройка веб-сервера и базы данных
Создайте файл .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 для production:
docker compose --env-file .env.prod up
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ