Установка Docker Compose для управления мульти-контейнерными приложениями
Дата публикации: 24.04.2026

Установка Docker Compose для управления мульти-контейнерными приложениями

Хочу себе такие же кнопки
ccb9a536


Установка Docker Compose: Управляем мульти-контейнерными приложениями как профессионал

Вы когда-нибудь собирали конструктор Lego? Представьте, что каждый контейнер в Docker — это отдельный кирпичик: один отвечает за базу данных, другой — за бэкенд, третий — за фронтенд. А теперь представьте, что вам нужно собрать из этих кирпичиков целый замок (ваше веб-приложение), причём так, чтобы они взаимодействовали друг с другом, не падали и легко обновлялись.

Docker Compose — это ваша инструкция по сборке, которая позволяет: ✅ Запускать несколько контейнеров одной командой (вместо ручного управления каждым). ✅ Определять сети, тома и зависимости между контейнерами в одном файле (docker-compose.yml). ✅ Масштабировать и обновлять приложения без головной боли.

Если вы арбитражник или веб-мастер, это инструмент экономит ваше время и нервы:

  • Для арбитражника: Быстро разворачиваете прокси, парсеры и бэкенд для трекинга — всё в изолированных контейнерах.
  • Для веб-мастера: Деплоите WordPress + Nginx + MySQL за 5 минут, а не за час ручной настройки.

1. Подготовка: Что должно быть установлено до Docker Compose

Прежде чем ставить Docker Compose, убедитесь, что у вас есть:

  1. Docker Engine (основной движок для работы с контейнерами).

    • Как проверить: запустите в терминале docker --version.
    • Если нет — установите Docker (инструкции для Windows, macOS, Linux).
  2. Права суперпользователя (sudo) на Linux или администратора на Windows.

    • Docker Compose устанавливается глобально, поэтому нужны права на запись в системные папки.
  3. Терминал (Linux/macOS) или PowerShell/Command Prompt (Windows).

    • На Windows рекомендуем использовать WSL 2 (подсистема Linux) для лучшей совместимости.

2. Установка Docker Compose

2.1. Способ 1: Установка на Linux (Ubuntu/Debian/CentOS)

Most Linux distributions don’t include Docker Compose by default, so we’ll install it manually.

Шаг 1: Скачайте бинарный файл

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • Что делает команда:
    • curl -L — скачивает файл по ссылке (флаг -L следует за редиректами).
    • $(uname -s) — определяет вашу ОС (Linux, Darwin для macOS).
    • $(uname -m) — определяет архитектуру (x86_64, arm64 и т. д.).
    • -o /usr/local/bin/docker-compose — сохраняет файл в системную папку для исполняемых файлов.

Шаг 2: Дайте права на выполнение

sudo chmod +x /usr/local/bin/docker-compose
  • Почему это важно: Без прав на выполнение (+x) система не сможет запустить файл.

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

docker-compose --version
  • Если видите что-то вроде docker-compose version 2.24.1 — всё работает!

2.2. Способ 2: Установка на macOS

На macOS Docker Compose устанавливается автоматически вместе с Docker Desktop.

  1. Скачайте Docker Desktop для Mac.
  2. После установки откройте терминал и проверьте:
    docker-compose --version
    • Если команда не найдена, перезапустите терминал или компьютер.

2.3. Способ 3: Установка на Windows

Аналогично macOS, Docker Desktop для Windows включает Docker Compose.

  1. Скачайте Docker Desktop для Windows.
  2. Убедитесь, что в настройках включена опция Use WSL 2 based engine (для лучшей производительности).
  3. Проверьте установку:
    docker-compose --version

3. Основы работы с Docker Compose

3.1. Структура файла docker-compose.yml

Это сердце вашего мульти-контейнерного приложения. Пример простого файла для запуска Nginx + Redis:

version: '3.8'  # Версия синтаксиса Compose

services:       # Определяем сервисы (контейнеры)
  web:          # Сервис 1: Nginx
    image: nginx:latest  # Образ из Docker Hub
    ports:              # Пробрасываем порты
      - "80:80"
    volumes:            # Монтируем папку с HTML-файлами
      - ./html:/usr/share/nginx/html

  redis:        # Сервис 2: Redis
    image: redis:alpine
    ports:
      - "6379:6379"
  • version: Указывает версию синтаксиса (актуальная на 2024 год — '3.8').
  • services: Список контейнеров, которые будут запущены.
  • image: Образ из Docker Hub (можно использовать свои образы).
  • ports: Проброс портов в формате "хост:контейнер".
  • volumes: Монтирование папок для постоянного хранения данных.

3.2. Основные команды Docker Compose

Команда Описание Пример
docker-compose up Запускает все сервисы из файла docker-compose up -d (флаг -d — в фоновом режиме)
docker-compose down Останавливает и удаляет контейнеры docker-compose down -v (флаг -v — удаляет тома)
docker-compose ps Показывает статус контейнеров
docker-compose logs Показывает логи контейнера docker-compose logs web (логи только для сервиса web)
docker-compose build Собирает образы из Dockerfile
docker-compose restart Перезапускает сервисы docker-compose restart redis

4. Пример: Развёртывание WordPress с MySQL за 5 минут

Давайте на практике развернём WordPress + MySQL с помощью Docker Compose.

Шаг 1: Создайте файл docker-compose.yml

version: '3.8'

services:
  db:  # Сервис базы данных MySQL
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql  # Сохраняем данные БД на хосте

  wordpress:  # Сервис WordPress
    depends_on:
      - db  # Ждём, пока запустится MySQL
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wp_data:/var/www/html  # Сохраняем файлы WordPress

volumes:  # Определяем тома для постоянного хранения
  db_data:

Шаг 2: Запустите контейнеры

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

Шаг 3: Проверьте работу

  • Откройте в браузере http://localhost:8000 — вы увидите установщик WordPress.
  • База данных уже настроена (пароли указаны в docker-compose.yml).

Шаг 4: Остановите контейнеры ( когда надо )

docker-compose down
  • Чтобы удалить все данные (включая тома), используйте docker-compose down -v.

5. Продвинутые фишки Docker Compose

5.1. Переменные окружения (.env файл)

Instead of hardcoding passwords in docker-compose.yml, use a .env file:

  1. Создайте файл .env:
    MYSQL_ROOT_PASSWORD=supersecret
    WORDPRESS_DB_PASSWORD=wordpress123
  2. В docker-compose.yml замените значения на ${VAR_NAME}:
    environment:
     MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

5.2. Масштабирование сервисов

Можно запустить несколько копий одного сервиса (например, для балансировки нагрузки):

docker-compose up -d --scale web=3
  • Это создаст 3 контейнера для сервиса web.

5.3. Обновление контейнеров без простоя

Если вам нужно обновить образ без остановки сервиса:

docker-compose pull  # Скачиваем новые образы
docker-compose up -d --no-deps web  # Перезапускаем только сервис web

6. Типичные ошибки и как их избежать

Ошибка Причина Решение
ERROR: Couldn't connect to Docker daemon Docker не запущен Запустите Docker (sudo systemctl start docker на Linux)
Port already allocated Порт занят другим процессом Измените порт в docker-compose.yml или остановите конфликтующий процесс
No such image Образ не скачан Запустите docker-compose pull перед up
Permission denied на томах Неправильные права на папки chmod -R 777 ./wp_data (небезопасно для продакшена!)
Контейнеры не видят друг друга Неправильная сеть Убедитесь, что сервисы в одном docker-compose.yml или используйте networks:

Практика для закрепления

Упражнение 1: Установка и проверка

  1. Установите Docker Compose на вашу ОС (следуйте инструкциям выше).
  2. Проверьте версию командой docker-compose --version.
  3. Если возникли ошибки — найдите решение в таблице выше.

Упражнение 2: Запуск Nginx + Redis

  1. Создайте файл docker-compose.yml с двумя сервисами:
    • web: образ nginx:latest, проброс порта 80:80, монтирование папки ./html в /usr/share/nginx/html.
    • redis: образ redis:alpine, проброс порта 6379:6379.
  2. Запустите контейнеры и проверьте:
    • Откройте http://localhost — должен отобразиться дефолтный Nginx.
    • Подключитесь к Redis: redis-cli -h localhost -p 6379 и выполните PING (должен вернуть PONG).

Упражнение 3: WordPress с отдельной базой данных

  1. Модифицируйте пример с WordPress:
    • Добавьте сервис phpmyadmin для управления MySQL.
    • Настройте проброс порта 8080:80 для phpMyAdmin.
  2. Запустите и проверьте доступ к:
    • WordPress: http://localhost:8000
    • phpMyAdmin: http://localhost:8080 (логин: wordpress, пароль: wordpress).

Упражнение 4: Использование .env

  1. Перенесите все пароли из docker-compose.yml в файл .env.
  2. Обновите конфиг, чтобы он считывал переменные из .env.
  3. Перезапустите контейнеры и убедитесь, что всё работает.

Вопрос для размышления

  • Почему в продакшене не рекомендуется использовать docker-compose up без флага -d? (Подсказка: что произойдёт, если закрыть терминал?)

Итоги

Теперь вы умеете: ✔ Устанавливать Docker Compose на любую ОС. ✔ Писать docker-compose.yml для мульти-контейнерных приложений. ✔ Управлять сервисами командами up, down, logs. ✔ Развёртывать сложные стеки (WordPress, Nginx + Redis) за несколько минут.

Следующий шаг: Изучите Docker Swarm для оркестрации контейнеров в кластере — это пригодится для масштабирования арбитражных ферм или высоконагруженных веб-проектов.


Вопросы? Пишите в комментариях — разберём любые сложности! 🚀


Введение: чем VDS отличается от шаред-хостинга и зачем это веб-мастеру
Как правильно выбрать тариф: CPU, RAM, NVMe или SSD, канал
Выбор операционной системы: почему Ubuntu 22.04/24.04 — стандарт индустрии
Регистрация домена и первичная настройка DNS-записей (A, AAAA, CNAME)
Генерация SSH-ключей на локальном компьютере (Windows/Mac/Linux)
Добавление публичного ключа на сервер и первый вход по SSH
Отключение входа по паролю и запрет авторизации для root
Смена стандартного порта SSH для снижения шума в логах
Создание основного рабочего пользователя с правами sudo
Базовое обновление системы и установка необходимых утилит (curl, wget, git, htop)
Настройка часового пояса и синхронизация времени (NTP)
Установка и базовая настройка фаервола UFW
Разрешение только необходимых портов (SSH, HTTP, HTTPS)
Установка Fail2Ban для защиты от перебора паролей
Настройка правил Fail2Ban для SSH и веб-сервера
Знакомство с Docker: установка движка и CLI
Установка Docker Compose для управления мульти-контейнерными приложениями
Основы изоляции: почему каждый проект должен быть в своем контейнере
Подготовка файловой структуры сервера для удобного хранения проектов
Развертывание Nginx как обратного прокси-сервера через Docker
Настройка конфигурации Nginx для статических сайтов
Установка PHP-FPM в отдельном контейнере
Связка Nginx и PHP-FPM через внутреннюю Docker-сеть
Оптимизация настроек PHP-FPM (pm.max_children, memory_limit) под нагрузку
Установка MariaDB/MySQL в изолированном контейнере
Безопасное хранение паролей от БД через переменные окружения (.env)
Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Установка Redis для кэширования запросов и сессий
Интеграция Redis с PHP-приложением для ускорения работы
Автоматическая выдача SSL-сертификатов через Certbot (Let's Encrypt)
Настройка автопродления SSL-сертификатов по крону
Принудительный редирект с HTTP на HTTPS в Nginx
Включение gzip и brotli сжатия для ускорения загрузки страниц
Настройка кэширования статики (browser caching) в заголовках Nginx
Защита от простых DDoS и ботов: модуль limit_req в Nginx
Настройка резервного копирования баз данных (mysqldump) по расписанию
Настройка резервного копирования файлов проектов (tar)
Отправка бэкапов на удаленное хранилище (S3-compatible storage или другой сервер)
Ротация и очистка старых логов, чтобы не забить диск
Мониторинг нагрузки: установка и настройка htop и iotop
Просмотр логов в реальном времени: tail, grep и journalctl
Установка простого мониторинга доступности (Uptime Kuma или скрипт в Telegram)
Изоляция арбитражных инструментов: запуск ботов в отдельных контейнерах
Установка SOCKS5/HTTP прокси (3proxy) внутри Docker для мультиаккаунтинга
Настройка аутентификации и ограничения доступа к прокси по IP
Проверка анонимности и работы прокси-сервера
Оптимизация ядра Linux (sysctl.conf) для высоких нагрузок и сетевых соединений
Настройка swap-файла: когда он нужен, а когда вредит
Чек-лист финальной проверки безопасности перед запуском проекта
План действий при взломе или падении сервера: восстановление из бэкапа
АПТЕЧКА ДЛЯ ЖИВОТНЫХ
Автомобили Германии — FORD, MERSEDES, VW, IVECO
Чат рулетка 2026: чаты, где каждый момент — шанс
Чат рулетка онлайн
Чат с Аней: психологический разговор
Чатрулетка: новый способ общения
Чай и кофе: сила вкуса
Детские игрушки из безопасных материалов
Эксплуатация шин: Рекомендации по использованию
Фототехника для пейзажей
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать Vdsina вечный хостинг для своего проекта
Компоненты безопасности IP
Конкуренция на российском автомобильном рынке
Онлайн генератор паролей для Windows
Оптимизация обработки форм GEO проекта
Сервер для социальных сетей: Безопасность, Скорость, Изоляция
Смешные моменты
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
Весь экран под циферблат
рейтинг хостингов 2026 Быстрые VDS серверы