раздел 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, а не дёргать каждый контейнер руками.