Docker Compose на VPS: разворачиваем стек сервисов
Узнайте, как установить Docker и Docker Compose на VPS, создать файл docker-compose.yml и управлять стеком сервисов с помощью простых команд.
Содержание
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 для вашего стека
Создайте каталог проекта на сервере:
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. Храните бэкапы в удалённом хранилище.
Типичные ошибки и советы по безопасности
Самые частые ошибки новичков:
- Не используют тома и теряют данные при удалении контейнера.
- Применяют
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 создаст недостающие контейнеры и настроит сеть.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ