раздел 02

docker-compose

Один контейнер - это хорошо, но реальный проект обычно состоит из нескольких частей. Например, само приложение и база данных рядом с ним. Запускать каждый контейнер по отдельности и руками их связывать - утомительно.

docker-compose решает это: вы описываете все сервисы в одном файле docker-compose.yml, и одна команда поднимает их все вместе и связывает между собой.

Пример docker-compose.yml

Приложение плюс база данных Postgres в одном файле:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/postgresql/data

volumes:
  dbdata:

Что здесь описано:

  • app - наше приложение, собирается из Dockerfile в текущей папке (build: .), порт 3000 пробрасывается наружу.
  • db - база данных Postgres, берётся готовым образом с Docker Hub.
  • depends_on - приложение стартует после базы.
  • volumes - данные базы хранятся отдельно и не теряются при перезапуске контейнера.

Команды up и down

Поднять все сервисы из файла:

docker compose up -d

Флаг -d запускает в фоне. Остановить и убрать контейнеры:

docker compose down

Всё. Два слова - и весь набор сервисов запущен или выключен. Менять конфигурацию вы будете в файле docker-compose.yml, а не дёргать каждый контейнер руками.