Полное руководство по Docker Compose

Перестаньте запускать команды Docker вручную для каждого сервиса.

Если вы разрабатываете современное приложение, скорее всего, оно включает фронтенд, бэкенд, базу данных и кэш. Запуск каждого компонента по отдельности — это медленно и чревато ошибками.

Docker Compose решает эту проблему. Вы описываете весь свой стек в одном YAML-файле и запускаете всё одной командой.

Основы

  • Без Compose: вы запускаете четыре отдельные команды для четырех контейнеров.
  • С Compose: вы запускаете docker compose up, и всё запускается.

Важные концепции

• Services (Сервисы): Каждый сервис представляет собой контейнер. Вы можете использовать build для своего собственного кода или image для готовых инструментов, таких как PostgreSQL или Redis. • Port Mapping (Проброс портов): Используйте формат HOST:CONTAINER. Это связывает порт вашего компьютера с портом контейнера. • Environment Variables (Переменные окружения): Используйте environment для простых значений или env_file, чтобы хранить секреты в отдельном файле .env. • Volumes (Тома): Используйте тома, чтобы обеспечить сохранность данных. Без томов данные вашей базы данных исчезнут при остановке контейнера. • Networks (Сети): Compose создает сеть автоматически. Контейнеры взаимодействуют друг с другом, используя имена своих сервисов вместо localhost. • Depends_on: Этот параметр задает порядок запуска. Он указывает Docker запустить базу данных перед бэкендом. Обратите внимание, что он не ждет полной готовности базы данных.

Советы для собеседований

  • Когда использовать build, а когда image? Используйте build для вашего собственного приложения. Используйте image для готовых инструментов из Docker Hub.
  • Как контейнеры взаимодействуют друг с другом? Они используют имена сервисов в качестве имен хостов внутри сети Docker.
  • Как избежать потери данных? Всегда используйте именованные тома (named volumes) для баз данных.
  • Как работать с секретами? Никогда не прописывайте их в коде (hardcode). Используйте файл .env.

Распространенные ошибки, которых следует избегать

  • Использование тега latest: Это приводит к неожиданным обновлениям. Используйте конкретные версии, например postgres:16.
  • Использование localhost: Контейнеры не видят друг друга через localhost. Используйте имя сервиса.
  • Отсутствие healthchecks: Используйте проверки состояния (healthchecks), чтобы отслеживать, действительно ли ваш сервис готов к работе.

Источник: https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac