Установка Docker Compose для управления мульти-контейнерными приложениями
Хочу себе такие же кнопкиУстановка Docker Compose: Управляем мульти-контейнерными приложениями как профессионал
Вы когда-нибудь собирали конструктор Lego? Представьте, что каждый контейнер в Docker — это отдельный кирпичик: один отвечает за базу данных, другой — за бэкенд, третий — за фронтенд. А теперь представьте, что вам нужно собрать из этих кирпичиков целый замок (ваше веб-приложение), причём так, чтобы они взаимодействовали друг с другом, не падали и легко обновлялись.
Docker Compose — это ваша инструкция по сборке, которая позволяет:
✅ Запускать несколько контейнеров одной командой (вместо ручного управления каждым).
✅ Определять сети, тома и зависимости между контейнерами в одном файле (docker-compose.yml).
✅ Масштабировать и обновлять приложения без головной боли.
Если вы арбитражник или веб-мастер, это инструмент экономит ваше время и нервы:
- Для арбитражника: Быстро разворачиваете прокси, парсеры и бэкенд для трекинга — всё в изолированных контейнерах.
- Для веб-мастера: Деплоите WordPress + Nginx + MySQL за 5 минут, а не за час ручной настройки.
1. Подготовка: Что должно быть установлено до Docker Compose
Прежде чем ставить Docker Compose, убедитесь, что у вас есть:
-
Docker Engine (основной движок для работы с контейнерами).
- Как проверить: запустите в терминале
docker --version. - Если нет — установите Docker (инструкции для Windows, macOS, Linux).
- Как проверить: запустите в терминале
-
Права суперпользователя (sudo) на Linux или администратора на Windows.
- Docker Compose устанавливается глобально, поэтому нужны права на запись в системные папки.
-
Терминал (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.
- Скачайте Docker Desktop для Mac.
- После установки откройте терминал и проверьте:
docker-compose --version- Если команда не найдена, перезапустите терминал или компьютер.
2.3. Способ 3: Установка на Windows
Аналогично macOS, Docker Desktop для Windows включает Docker Compose.
- Скачайте Docker Desktop для Windows.
- Убедитесь, что в настройках включена опция Use WSL 2 based engine (для лучшей производительности).
- Проверьте установку:
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:
- Создайте файл
.env:MYSQL_ROOT_PASSWORD=supersecret WORDPRESS_DB_PASSWORD=wordpress123 - В
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: Установка и проверка
- Установите Docker Compose на вашу ОС (следуйте инструкциям выше).
- Проверьте версию командой
docker-compose --version. - Если возникли ошибки — найдите решение в таблице выше.
Упражнение 2: Запуск Nginx + Redis
- Создайте файл
docker-compose.ymlс двумя сервисами:web: образnginx:latest, проброс порта80:80, монтирование папки./htmlв/usr/share/nginx/html.redis: образredis:alpine, проброс порта6379:6379.
- Запустите контейнеры и проверьте:
- Откройте
http://localhost— должен отобразиться дефолтный Nginx. - Подключитесь к Redis:
redis-cli -h localhost -p 6379и выполнитеPING(должен вернутьPONG).
- Откройте
Упражнение 3: WordPress с отдельной базой данных
- Модифицируйте пример с WordPress:
- Добавьте сервис
phpmyadminдля управления MySQL. - Настройте проброс порта
8080:80для phpMyAdmin.
- Добавьте сервис
- Запустите и проверьте доступ к:
- WordPress:
http://localhost:8000 - phpMyAdmin:
http://localhost:8080(логин:wordpress, пароль:wordpress).
- WordPress:
Упражнение 4: Использование .env
- Перенесите все пароли из
docker-compose.ymlв файл.env. - Обновите конфиг, чтобы он считывал переменные из
.env. - Перезапустите контейнеры и убедитесь, что всё работает.
Вопрос для размышления
- Почему в продакшене не рекомендуется использовать
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 год
Весь экран под циферблат