Вопрос с собеседования · DevOps

Как поднять приложение вместе с базой данных через docker compose?

JuniorDocker и контейнеры
Ещё спрашивают так:
  • Что такое docker-compose.yml?
  • Как подключиться к PostgreSQL из соседнего контейнера?
Коротко

compose.yaml описывает несколько сервисов, их образы или сборку, переменные окружения, порты, тома и зависимости; docker compose up -d поднимает всё одной командой, down — останавливает. Сервисы в одном проекте оказываются в общей сети и находят друг друга по имени сервиса: приложение подключается к базе по адресу db:5432, а не localhost. Данные базы — в именованном томе, иначе пропадут при пересоздании.

  • depends_on с healthcheck — ждать, пока база готова, а не просто запущена
  • Секреты — в файле .env, который не коммитят
  • docker compose logs -f app — логи сервиса

А ещё ports нужен только для доступа с хоста; между контейнерами порты открыты в общей сети

Подробно

Пример:

services:
  app:
    build: .
    environment:
      DATABASE_URL: postgres://app:${DB_PASSWORD}@db:5432/app
    ports: ["8000:8000"]
    depends_on:
      db: {condition: service_healthy}
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes: [pgdata:/var/lib/postgresql/data]
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "app"]
      interval: 5s
volumes:
  pgdata:

Что хотят услышать

  • Описание сервисов в compose.yaml.
  • Обращение по имени сервиса.
  • Том для данных базы.
  • Healthcheck и .env.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Сервисы описывают в compose.yaml; приложение подключается к базе по localhost, а depends_on без healthcheck гарантирует готовность базы
  • ✗Данные PostgreSQL сохраняются при пересоздании контейнера и без тома
  • ✗depends_on без healthcheck гарантирует, что база готова принимать соединения
  • ✓Сервисы в compose.yaml, запуск — docker compose up; друг друга находят по имени сервиса, данные БД — в томе

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования