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 для production:

Terminal

docker compose --env-file .env.prod up
3
Задача
Модуль 2: Fullstack, 14 уровень, 5 лекция
Недоступна
Использование переменных в yml
Использование переменных в yml
3
Задача
Модуль 2: Fullstack, 14 уровень, 5 лекция
Недоступна
Передача переменных через команду
Передача переменных через команду
3
Задача
Модуль 2: Fullstack, 14 уровень, 5 лекция
Недоступна
Использование нескольких окружений
Использование нескольких окружений
3
Задача
Модуль 2: Fullstack, 14 уровень, 5 лекция
Недоступна
Настройка базы данных с переменными
Настройка базы данных с переменными
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ