JavaRush /Курси /Модуль 2: Fullstack /Змінні середовища в Docker Compose

Змінні середовища в Docker Compose

Модуль 2: Fullstack
Рівень 14 , Лекція 5
Відкрита

6.1 Основи змінних середовища

Змінні середовища грають важливу роль в конфігурації додатків, дозволяючи динамічно змінювати поведінку та параметри сервісів без зміни коду. Docker Compose підтримує використання змінних середовища для налаштування контейнерів, що забезпечує гнучкість та зручність управління конфігурацією.

Один з найбільш зручних способів управління змінними середовища — це використання файлів .env. У цій лекції ми детально розглянемо, як використовувати змінні середовища в Docker Compose, включаючи створення та використання .env файлів.

Основи змінних середовища в Docker Compose

Змінні середовища можна використовувати у файлі compose.yaml для параметризації конфігурацій. Ці змінні можуть бути визначені у файлі .env, у самому compose.yaml, або передані безпосередньо через командний рядок.

Приклад використання змінних середовища у compose.yaml:

У цьому прикладі використовуються змінні NGINX_VERSION та HOST_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

Docker Compose автоматично завантажує змінні з файлу .env, якщо він знаходиться в тій же директорії, що і compose.yaml.

Приклад файлу compose.yaml з використанням змінних середовища:

У цьому прикладі змінні NGINX_VERSION, HOST_PORT, DB_USER і DB_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 Передача змінних

Передача змінних через командний рядок

Ти можеш передавати змінні середовища прямо через командний рядок, використовуючи команду export в Unix-подібних системах або за допомогою параметра --env-file у Docker Compose.

Приклад використання 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: Налаштування веб-сервера та бази даних

Створіть файл .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
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ