8(800) 222 32 56
Панель управления

Управление контейнерами: использование Docker Compose и Portainer

Управление контейнерами: использование Docker Compose и Portainer
Подберите идеальное решение для ваших задач:
в России, США и Нидерландах обеспечат максимальную скорость. Воспользуйтесь всеми преимуществами надежного оборудования. Базовая помощь и техническое обслуживание входят в пакет услуг.

Введение

Представьте: ваш сервер разрастается как снежный ком. Однажды вы разворачиваете веб-приложение, потом добавляете базу данных, затем систему кэширования, мониторинг, reverse proxy... И вот уже команда тратит полдня на то, чтобы вспомнить, какой контейнер за что отвечает и почему вчера всё работало, а сегодня — нет.

Контейнеризация революционизировала разработку, но с ростом инфраструктуры приходит хаос. Если вы узнали свою ситуацию — добро пожаловать в мир Docker Compose и Portainer. Два инструмента, которые превращают управление контейнерами из ежедневного кошмара в приятную рутину.


Docker Compose: оркестровка в одном файле

Docker Compose — это инструмент, который позволяет описать всю инфраструктуру приложения в одном YAML-файле. Представьте его как чертёж для архитектора: вместо того чтобы запускать контейнеры по одному и молиться, чтобы они подружились, вы один раз прописываете конфигурацию, и все сервисы стартуют согласованно.

Главная магия заключается в том, что Compose понимает зависимости между сервисами. База данных поднимается первой? Отлично, приложение подождёт. Нужно масштабировать веб-серверы? Одна команда — и у вас три реплики. Всё это описывается декларативно, а не императивно — вы говорите, что хотите получить, а не шаг за шагом объясняете, как этого добиться.

Что изменилось в 2025 году

Мир Docker эволюционировал, и некоторые привычки пора забыть. Вот что актуально сегодня:

Убираем version: из файлов — это поле больше не нужно. Современные Docker Compose файлы начинаются прямо с services:, что делает конфигурацию чище. Talent5001

Healthchecks обязательны — без них Docker не узнает, что сервис упал. Добавьте проверку здоровья, и Compose будет автоматически перезапускать нездоровые контейнеры:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:3000"]
  interval: 30s
  timeout: 5s
  retries: 3

Не запускайте от root — это серьёзная уязвимость. Создайте отдельного пользователя в Dockerfile, и ваши контейнеры станут безопаснее. Talent5001

Multi-stage builds — разделяйте сборку и runtime. Зачем тащить в production образ компиляторы и dev-зависимости? Сначала собираем, потом копируем только артефакты в минимальный образ.


Готовы перейти на современную серверную инфраструктуру?

В King Servers мы предлагаем серверы как на AMD EPYC, так и на Intel Xeon, с гибкими конфигурациями под любые задачи — от виртуализации и веб-хостинга до S3-хранилищ и кластеров хранения данных.

  • S3-совместимое хранилище для резервных копий
  • Панель управления, API, масштабируемость
  • Поддержку 24/7 и помощь в выборе конфигурации

Создайте аккаунт

Быстрая регистрация для доступа к инфраструктуре


Portainer: когда консоль надоела

Если Docker Compose — это инструмент для разработчиков, то Portainer — это подарок для тех, кто ценит наглядность. Это веб-интерфейс для управления контейнерами, который превращает сложные команды в несколько кликов мышью.

Запомните: Portainer не заменяет Docker Compose, а дополняет его. Это как разница между написанием кода в блокноте и использованием полноценной IDE. Оба подхода работают, но второй экономит время и нервы.

Что умеет Portainer

Единая точка управления — один экземпляр Portainer может подключаться к нескольким Docker-хостам, Swarm-кластерам и даже Kubernetes. Вы управляете десятками серверов из одного окна браузера. Earthly Blog2

Развёртывание стеков — Portainer понимает Docker Compose файлы. Вы можете загрузить YAML-файл, указать на Git-репозиторий или просто вставить конфигурацию в веб-редактор. Нажимаете «Deploy» — и стек разворачивается.

Мониторинг из коробки — через интеграцию с Prometheus и Grafana Portainer предоставляет дашборды с метриками контейнеров и нод. Вы видите, кто жрёт память, куда ушёл CPU, какие сервисы перезапускаются слишком часто. Portainer3

Безопасность — ролевая модель доступа, LDAP и OAuth интеграции. Можно дать разработчикам доступ только к определённым стекам, а DevOps-инженерам — ко всей инфраструктуре.


Практический пример: разворачиваем полный стек

Давайте на конкретном примере посмотрим, как эти инструменты работают вместе. Представим, что нам нужен классический веб-стек: frontend на React, backend на Node.js, база данных PostgreSQL, Redis для кэширования и Nginx как reverse proxy.

Сначала создаём docker-compose.yml:

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend
    environment:
      - REACT_APP_API_URL=http://localhost:8080

  backend:
    build: ./backend
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/app
      - REDIS_URL=redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 5s
      retries: 3

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d app"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - frontend
      - backend

volumes:
  postgres_data:
  redis_data:

Всё, что нужно для запуска — одна команда: docker compose up -d. Но мы пойдём дальше и развернём это через Portainer.

Установка Portainer

Сам Portainer, кстати, тоже запускается через Docker Compose. Вот минимальная конфигурация:

services:
  portainer:
    image: portainer/portainer-ce:latest
    ports:
      - "9443:9443"
    volumes:
      - portainer_data:/data
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped

volumes:
  portainer_data:

После запуска открываем https://localhost:9443, создаём администратора — и готово.

Развёртывание стека в Portainer

Теперь переходим в раздел StacksAdd stack. Portainer предлагает четыре способа развёртывания:

  1. Web editor — вставляем наш docker-compose.yml прямо в браузере
  2. Upload — загружаем файл с компьютера
  3. Git repository — указываем URL репозитория и путь к файлу
  4. Custom template — используем готовый шаблон

Для эксперимента выберем Git repository — это самый production-ready подход. Указываем URL репозитория, ветку, путь к файлу. Portainer автоматически скачает конфигурацию и развернёт стек. Portainer Documentation4

Настройка переменных окружения

В реальной жизни пароли и API-ключи не хранятся в репозитории. Portainer позволяет определить переменные окружения прямо при развёртывании стека. Можно задать их вручную или загрузить из .env-файла.

Ещё одна killer-фича — webhooks. После настройки webhook-а вы можете триггерить переразвёртывание стека из CI/CD pipeline. Запушили код → GitHub Actions вызвали webhook → Portainer автоматически обновил контейнеры. Portainer Documentation4


Мониторинг: видеть всё

Развернули стек — отлично. Но как понять, что всё работает хорошо? Portainer предоставляет базовый мониторинг из коробки: статус контейнеров, потребление ресурсов, логи в реальном времени.

Но для серьёзного production нужен полноценный мониторинг. Portainer позволяет развернуть стек Prometheus + Grafana прямо из шаблонов. Добавляем метку monitoring=true на ноды, выбираем шаблон «Swarm Monitoring» — и через несколько минут у вас красивые дашборды с метриками. Portainer3

Что можно отслеживать:

  • Container Metrics — потребление ресурсов всеми контейнерами
  • Node Metrics — загрузка CPU, память, дисковое пространство на хостах
  • Логи — централизованный сбор логов с возможностью фильтрации
  • События — кто и когда перезапускал контейнеры, менял конфигурации

Лучшие практики 2025 года

После нескольких лет работы с Docker Compose и Portainer я вывел для себя несколько правил, которые экономят часы дебага и предотвращают инциденты.

Разделяйте конфигурации

Не пишите один docker-compose.yml на все случаи жизни. Используйте override-файлы:

  • docker-compose.yml — базовая конфигурация
  • docker-compose.override.yml — для локальной разработки
  • docker-compose.production.yml — production-специфичные настройки

Запуск в production: docker compose -f docker-compose.yml -f docker-compose.production.yml up -d Docker Docs5

Healthchecks — ваши друзья

Каждый сервис должен иметь healthcheck. Это позволяет Docker понимать, когда приложение готово принимать трафик, а когда оно упало и нуждается в перезапуске.

Не ограничивайтесь простой проверкой порта. Проверяйте реальную функциональность: для базы данных — выполнение тестового запроса, для API — эндпоинт health check.

Используйте read-only файловые системы

Где это возможно, запускайте контейнеры с флагом read_only: true. Это предотвращает модификацию файловой системы злоумышленниками, если контейнер будет скомпрометирован. Временные файлы монтируйте как tmpfs. Talent5001

Регулярно обновляйте образы

Уязвимости находят постоянно. Настройте Dependabot или Renovate для автоматических PR с обновлениями базовых образов. Portainer покажет, какие образы устарели, но обновлять их — ваша задача.

Лимитируйте ресурсы

Всегда задавайте memory и cpus лимиты. Это предотвращает ситуации, когда один runaway-контейнер съедает всю память сервера и вызывает OOM-killer, который прибьёт и другие сервисы.


Когда выбирать что

Часто спрашивают: «Нужен ли мне Portainer, если я уже использую Docker Compose?» Отвечаю: это инструменты для разных задач, и они прекрасно дополняют друг друга.

Docker Compose — ваш инструмент для:

  • Локальной разработки
  • Описания инфраструктуры как кода
  • Простых развёртываний на одном сервере
  • CI/CD pipeline

Portainer — ваш инструмент для:

  • Управления множеством серверов из одной точки
  • Визуального мониторинга и управления
  • Командной работы с разграничением доступа
  • Развёртывания из Git-репозиториев
  • Делегирования задач менее техническим коллегам

В идеальном мире у вас есть оба инструмента: Compose описывает инфраструктуру, Portainer даёт удобный интерфейс для управления. StackShare


Заключение

Управление контейнерами — это навык, который отличает хаотичную инфраструктуру от профессиональной. Docker Compose даёт вам язык для описания сложных систем, Portainer — инструмент для удобного управления ими.

Начните с малого: опишите один проект в Docker Compose, разверните его через Portainer. Почувствуйте, как всё становится предсказуемее и контролируемее. Потом добавьте healthchecks, мониторинг, автоматические обновления.

Через несколько месяцев вы оглянетесь назад и удивитесь: как вообще можно было жить без этого? Контейнеры перестанут ломаться по ночам, команда перестанет спрашивать «а почему не работает?», а вы будете спать спокойно.

Попробуйте. Разверните тестовый стек на выходных, поиграйтесь с настройками. Если возникнут вопросы — команда Kingservers всегда готова помочь с настройкой вашей инфраструктуры.

Удачного деплоя! 🚀