Быстрый старт VPS Обновлено 5 мин VPS

Docker Compose на VPS: разворачиваем стек сервисов

Узнайте, как установить Docker и Docker Compose на VPS, создать файл docker-compose.yml и управлять стеком сервисов с помощью простых команд.

dockerdocker-composevpsразвертываниеdevops
Схема Docker-стека на VPS
Docker Compose на VPS: разворачиваем стек сервисов
Содержание
КороткоDocker Compose позволяет описать все сервисы проекта в одном файле и запускать их одной командой. Установите Docker, создайте docker-compose.yml, выполните docker compose up -d и управляйте стеком через понятные команды. Обязательно продумывайте тома, безопасность и резервное копирование.

Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений. На VPS он позволяет развернуть целый стек сервисов (например, веб-сервер, базу данных, кэш) одной командой. В этой статье вы узнаете, как установить Docker и Docker Compose, настроить проект и управлять его жизненным циклом.

Что такое Docker Compose и зачем он нужен?

Docker Compose позволяет описать сервисы, сети и тома в одном файле docker-compose.yml. Вместо набора команд docker run вы используете docker compose up. Это упрощает воспроизводимость и совместную работу: весь стек можно версионировать в Git. Compose также позволяет масштабировать сервисы, задавать зависимости и автоматически создавать изолированную сеть для проекта.

Для VPS, где обычно нужно быстро поднять связку из нескольких контейнеров, Compose становится незаменимым инструментом. Вы один раз описываете конфигурацию, а затем можете развернуть её на любом сервере за минуты. Это экономит время и уменьшает количество ошибок.

Подготовка VPS и установка Docker

Перед установкой убедитесь, что VPS работает под управлением поддерживаемой ОС (например, Ubuntu, Debian, CentOS). Подключитесь к серверу по SSH.

Обновите систему:

sudo apt update && sudo apt upgrade -y

Установите Docker с помощью официального скрипта:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

После завершения проверьте версию Docker:

docker --version

Теперь установите Docker Compose. Обычно плагин входит в состав Docker, но если его нет, выполните:

sudo apt install docker-compose-plugin

Проверьте установку:

docker compose version

Если вы хотите дать пользователю право запускать Docker без sudo, добавьте его в группу docker:

sudo usermod -aG docker $USER

После этого выйдите из SSH и зайдите снова, чтобы изменения вступили в силу.

Создание docker-compose.yml для вашего стека

Конфигурация Docker Compose на VPS
Docker Compose на VPS: разворачиваем стек сервисов

Создайте каталог проекта на сервере:

mkdir ~/myapp && cd ~/myapp

Внутри создайте файл docker-compose.yml. Рассмотрим пример стека с Nginx и PostgreSQL.

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  web-data:
  db-data:

Разберём ключевые параметры:

  • image — образ, из которого создаётся контейнер. Всегда указывайте конкретную версию, а не latest, чтобы избежать неожиданных обновлений.
  • ports — публикация портов наружу. Формат "хост:контейнер".
  • volumes — тома для хранения данных вне контейнера. Это критически важно для баз данных и файлов, которые должны пережить пересоздание контейнера.
  • depends_on — порядок запуска сервисов. В примере веб-сервер стартует после базы.
  • environment — переменные окружения. Для паролей лучше использовать файл .env, чтобы не светить их в коде.

Актуальные версии образов уточняйте на Docker Hub или официальных сайтах проектов. Версии, указанные в примере, могут устареть к моменту чтения статьи.

Запуск стека и управление сервисами

Перейдите в каталог с docker-compose.yml и выполните:

docker compose up -d

Флаг -d запускает контейнеры в фоновом режиме.

Проверьте статус:

docker compose ps

Просмотр логов:

docker compose logs -f

Остановка и удаление контейнеров (тома остаются):

docker compose down

Перезапуск сервисов:

docker compose restart

Если вы изменили конфигурацию, выполните docker compose up -d — Compose применит изменения только к затронутым контейнерам.

Обновление сервисов и резервное копирование

Чтобы обновить образы до новых версий, выполните:

docker compose pull
docker compose up -d

Это загрузит новые образы и пересоздаст контейнеры. Обязательно проверяйте совместимость версий, особенно для баз данных.

Для резервного копирования томов используйте временный контейнер. Например, для тома db-data:

docker run --rm -v myapp_db-data:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data .

Выполняйте резервное копирование регулярно, лучше по расписанию через cron. Храните бэкапы в удалённом хранилище.

Типичные ошибки и советы по безопасности

Проверка контейнеров и сервисов на VPS
Docker Compose на VPS: разворачиваем стек сервисов

Самые частые ошибки новичков:

  • Не используют тома и теряют данные при удалении контейнера.
  • Применяют latest для критических сервисов, что приводит к breaking-изменениям.
  • Открывают лишние порты в файрволе. Публикуйте только необходимые порты и ограничьте доступ через firewall.
  • Хранят пароли прямо в docker-compose.yml. Используйте .env или секреты.

Для защиты стека:

  • Убедитесь, что контейнеры не работают от root. В образе предусмотрите пользователя.
  • Ограничьте ресурсы контейнеров в docker-compose.yml (например, через deploy.resources).
  • Регулярно обновляйте Docker и образы, так как они содержат исправления безопасности.

Заключение

Docker Compose — мощный инструмент для управления стеком на VPS. Начните с простого проекта и постепенно добавляйте сервисы. Изучите официальную документацию — там много полезных примеров и рекомендаций. Следуя этому руководству, вы сможете быстро разворачивать и поддерживать свои приложения.

Мини-чеклист

  • Установить Docker на VPS
  • Установить Docker Compose plugin
  • Создать проект и файл docker-compose.yml
  • Определить тома для персистентных данных
  • Запустить стек командой docker compose up -d
  • Настроить резервное копирование томов
  • Обеспечить безопасность: firewall, .env, минимум прав

Частые ошибки

  • Использование latest для образов без привязки к версии
  • Отсутствие томов для данных, из-за чего они теряются при пересоздании контейнера
  • Хранение паролей и секретов в открытом виде в docker-compose.yml
  • Публикация всех портов без необходимости
  • Не выполнение обновлений образов и Docker

Источники и документация

FAQ

Как обновить Docker Compose и сервисы?

Для обновления образов выполните docker compose pull и затем docker compose up -d. Docker Compose сам пересоздаст контейнеры с новыми образами.

Можно ли использовать Docker Compose в production?

Да, Docker Compose подходит для production. Рекомендуется дополнительно настроить репликацию, ограничение ресурсов и мониторинг. В официальной документации есть раздел о production-сценариях.

Как добавить новый сервис в стек?

Добавьте блок с описанием сервиса в docker-compose.yml и выполните docker compose up -d. Compose создаст недостающие контейнеры и настроит сеть.

Хотите перейти сразу к рабочему доступу?

Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.

Получить доступ

Дальше по теме

Связанные статьи