PRO

Как передавать переменные окружения в контейнер?

Переменные окружения можно передать в контейнер через флаг -e команды docker run, поле environment или env_file в Compose. Они подходят для конфигурации приложения, но секреты не следует встраивать в image или хранить в публичном репозитории.
Подробный ответ

Переменные через docker run

При ручном запуске контейнера используют флаг -e или --env.

docker run -e APP_ENV=production -e PORT=8000 my-app:latest

Поле environment в Compose

В compose.yaml переменные можно передавать через словарь или список.

services:
  web:
    image: my-app:latest
    environment:
      APP_ENV: production
      DATABASE_URL: postgresql://app:password@db:5432/app_db

Файл env_file

Если переменных много, их можно хранить в отдельном файле и передавать сервису через env_file.

services:
  web:
    image: my-app:latest
    env_file:
      - .env
APP_ENV=development
DATABASE_URL=postgresql://app:password@db:5432/app_db

Подстановка из окружения

Compose также может подставлять значения из окружения shell или файла .env в сам YAML-файл.

services:
  web:
    image: my-app:${APP_VERSION}

Работа с секретами

Пароли, API keys и токены нельзя добавлять в Dockerfile через ENV или копировать в image: они могут сохраниться в слоях image. В production лучше использовать secrets manager, Docker secrets, Kubernetes secrets или защищённые переменные CI/CD. Локальный .env файл обычно добавляют в .gitignore и .dockerignore.

Как ответить на собеседовании

Для запуска контейнера использую -e, а в Docker Compose — environment или env_file. Обычную конфигурацию передаю через переменные окружения, но секреты не храню в image и не коммичу в репозиторий: для них применяю защищённое хранилище секретов.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге