Docker Compose позволяет запускать многоконтейнерные проекты на VPS всего одной командой. Это удобный способ связать веб-сервер, базу данных и кеш в единую систему без ручной настройки каждого контейнера.
Введение
Если Docker позволяет запускать и управлять отдельными контейнерами, то Docker Compose нужен для многоконтейнерных приложений, где несколько сервисов (например, веб-сервер, база данных и кеш) работают вместе. Compose использует YAML-файл конфигурации (docker-compose.yml), в котором описываются контейнеры, их зависимости, тома, сети и переменные окружения. Это упрощает деплой сложных приложений на VPS с Ubuntu 24.04.
Установка Docker Compose
На Ubuntu 24.04 достаточно установить плагин для Docker CLI.
Установка:
sudo apt update
sudo apt install docker-compose-plugin -y
Проверка версии:
docker compose version
Обратите внимание
В новых версиях используется команда docker compose (через пробел), а не старая docker-compose.
Первый пример: Nginx + PostgreSQL
Рассмотрим минимальный проект: веб-сервер и база данных в единой сети.
version: "3.9"
services:
** web:**
** image: nginx:alpine**
** ports:**
** - "8080:80"**
** volumes:**
** - ./nginx.conf:/etc/nginx/nginx.conf:ro**
** networks:**
** - app_net**
** depends_on:**
** - db**
** db:**
** image: postgres:15**
** environment:**
** POSTGRES_USER: user**
** POSTGRES_PASSWORD: password**
** POSTGRES_DB: app_db**
** volumes:**
** - db_data:/var/lib/postgresql/data**
** networks:**
** - app_net**
volumes:
** db_data:**
networks:
** app_net:**
** driver: bridge**
Запуск:
docker compose up -d
Остановка:
docker compose down
Теперь у вас есть два сервиса — web и db, изолированные в пользовательской сети app_net.
Ключевые элементы Compose:
- services — контейнеры, которые будут запущены,
- volumes — именованные тома для хранения данных,
- networks — пользовательские сети для изоляции и удобного DNS-резолвинга,
- depends_on — порядок запуска (web ждёт старта базы),
- environment — переменные окружения для настройки сервисов.
Работа с Compose
Перезапуск сервисов:
docker compose restart web
Просмотр логов:
docker compose logs -f db
Список контейнеров:
docker compose ps
Масштабирование:
docker compose up -d --scale web=3
Теперь Nginx будет запущен в трёх экземплярах.
Продвинутые приёмы
- Переменные окружения в .env
Чтобы не хранить пароли в docker-compose.yml, вынесите их в .env:
POSTGRES_USER=user
POSTGRES_PASSWORD=secret
POSTGRES_DB=app_db
А в docker-compose.yml используйте:
environment:
** POSTGRES_USER: ${POSTGRES_USER}**
** POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}**
** POSTGRES_DB: ${POSTGRES_DB}**
- Ограничение ресурсов
deploy:
** resources:**
** limits:**
** cpus: "1.0"**
** memory: 1G**
- Автоматический рестарт
restart: unless-stopped
Практический кейс: веб-приложение с кешем Redis
version: "3.9"
services:
** app:**
** build: ./app**
** ports:**
** - "5000:5000"**
** depends_on:**
** - redis**
** networks:**
** - app_net**
** redis:**
** image: redis:alpine**
** networks:**
** - app_net**
networks:
** app_net:**
** driver: bridge**
Здесь app — это кастомный сервис (например, Flask-приложение), который при старте сразу подключается к контейнеру redis.
Заключение
Docker Compose упрощает управление многоконтейнерными приложениями на Ubuntu 24.04. Вместо десятков отдельных команд достаточно одного файла docker-compose.yml, в котором описаны все сервисы, их связи, тома и сети. Compose особенно полезен на VPS при работе с проектами, где важно быстро развернуть веб-сервис с базой данных и кешем, а также поддерживать инфраструктуру в воспроизводимом виде.
Читайте в блоге:
- Хостинг сайта на Ubuntu 24.04 LTS: NGINX, SSL и WordPress
- Интеграция WordPress с Nginx и MariaDB на Ubuntu 24.04: от базы данных до SSL
- Автоматическая настройка VPS-сервера на Ubuntu 24.04 с помощью Cloud-init