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 для продакшена:
docker compose --env-file .env.prod up
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ