Установка Docker Compose: Полный гайд сисадмина (2026)

Золотые правила автообновления Docker

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

Docker Compose — это как швейцарский нож для оркестрации контейнеров. Только вместо штопора и ножниц у вас YAML-файл и куча контейнеров, которые слушаются вас как примерные солдаты. За годы работы я видел всё: от джуниоров, запускающих базы данных в продакшене без персистентных volume, до DevOps-инженеров, которые пишут docker-compose.yml на 3000 строк. Поверьте, после этого гайда вы будете где-то посередине — в хорошем смысле.

Что такое Docker Compose и зачем он нужен вашей несчастной душе

Представьте: вы разрабатываете веб-приложение. Вам нужен веб-сервер (nginx, например), бэкенд на Node.js, PostgreSQL для данных, Redis для кэша и, допустим, Elasticsearch для поиска. Раньше вы бы запускали каждый сервис отдельной командой docker run с километровыми параметрами, которые никто не может запомнить. Это как жонглировать бензопилами — технически возможно, но зачем?

Docker Compose решает эту проблему элегантно. Вы описываете всю инфраструктуру в одном YAML-файле, и одной командой поднимаете весь стек. Красота! Я помню времена, когда приходилось писать bash-скрипты на 500 строк для оркестрации контейнеров. Тёмные это были времена, друзья мои.

Основные фишки Docker Compose:

  • Декларативное описание инфраструктуры (YAML рулит, хоть и бесит своими отступами)
  • Автоматическое создание сетей между контейнерами
  • Управление зависимостями сервисов
  • Возможность масштабирования сервисов
  • Переменные окружения и секреты
  • Volumes для персистентности данных (используйте их, умоляю!)

Системные требования и подготовка к установке

Прежде чем мы начнём колдовать с установкой, давайте проверим, готова ли ваша машина к приёму гостя. Docker Compose работает на Linux, macOS и Windows. Лично я фанат Linux (кто бы сомневался), но покажу процесс для всех платформ, потому что не все ещё прозрели.

Минимальные требования:

  • Docker Engine версии 19.03.0 или выше (если у вас старше — обновляйтесь, это не Windows XP держать)
  • 64-битная операционная система
  • Минимум 2 ГБ оперативной памяти (хотя я рекомендую 4 ГБ для комфортной работы)
  • Пара гигабайт свободного дискового пространства
  • Права sudo/root для установки (без них никуда)

Важный момент: Docker Compose версии 2.x теперь идёт как плагин для Docker CLI, а не отдельная утилита. Это значит, что команды изменились с docker-compose на docker compose (без дефиса). Да, я знаю, что вы уже привыкли к старому синтаксису и ваши пальцы автоматически печатают дефис. Добро пожаловать в мир постоянных изменений!

Проверка установки Docker Engine

Перед установкой Compose убедимся, что Docker Engine уже установлен. Если нет — сначала установите его. Это базовое требование, друзья. Проверяем:

docker --version
docker ps

Если видите версию Docker и список контейнеров (пусть даже пустой) — отлично! Если вылетает ошибка «command not found» — идите устанавливать Docker Engine. Это отдельная песня, которую я спою в другой раз.

Также проверьте, что Docker daemon запущен:

sudo systemctl status docker

Должно быть «active (running)». Если нет — запускаем:

sudo systemctl start docker
sudo systemctl enable docker

Команда enable нужна, чтобы Docker стартовал автоматически при загрузке системы. Поверьте, вы не хотите каждый раз после ребута вспоминать, почему ваши контейнеры не поднялись.

Установка Docker Compose на Linux (Ubuntu/Debian)

Начнём с самой популярной платформы в серверном мире. Ubuntu и Debian — это рабочие лошадки дата-центров. Установка здесь проще простого.

Способ 1: Установка через официальный репозиторий Docker (рекомендуется)

Если вы устанавливали Docker через официальный репозиторий, то Compose, скорее всего, уже установлен как плагин. Проверяем:

docker compose version

Видите версию? Поздравляю, можете пропустить этот раздел и идти пить кофе. Нет? Тогда устанавливаем плагин:

# Обновляем список пакетов
sudo apt update

# Устанавливаем плагин Docker Compose
sudo apt install docker-compose-plugin

# Проверяем установку
docker compose version

Вуаля! Должны увидеть что-то вроде «Docker Compose version v2.24.5». Цифры могут отличаться — главное, чтобы оно работало.

Способ 2: Ручная установка бинарника (для тех, кто любит контроль)

Этот способ даёт вам больше контроля над версией. Полезно, когда нужна конкретная версия или когда репозитории отстают от жизни.

# Создаём директорию для плагинов Docker CLI
mkdir -p ~/.docker/cli-plugins/

# Скачиваем последнюю версию Docker Compose
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)

curl -SL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64" -o ~/.docker/cli-plugins/docker-compose

# Делаем файл исполняемым
chmod +x ~/.docker/cli-plugins/docker-compose

# Проверяем
docker compose version

Этот скрипт автоматически определяет последнюю версию через GitHub API и скачивает её. Я люблю такие решения — они избавляют от необходимости лезть на GitHub и искать актуальную версию руками.

Способ 3: Установка старой версии docker-compose (legacy)

Если вам по каким-то причинам нужна старая версия 1.x (например, для совместимости со старыми скриптами), можете установить её через pip или прямым скачиванием:

# Через pip (требуется Python)
sudo apt install python3-pip
sudo pip3 install docker-compose

# Или прямое скачивание
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Проверка
docker-compose --version

Обратите внимание на дефис в команде! Это старый синтаксис. Но лучше переходите на версию 2.x — будущее за ней.

Установка Docker Compose на CentOS/RHEL/Fedora

Red Hat-based дистрибутивы — тоже популярная штука, особенно в корпоративном секторе. Процесс установки немного отличается, но логика та же.

# Для CentOS/RHEL 8 и выше
sudo dnf update
sudo dnf install docker-compose-plugin

# Для более старых версий или если нужен больший контроль
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Создаём символическую ссылку для удобства
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# Проверяем
docker compose version

Для Fedora процесс идентичен, только вместо yum используется dnf (что, по сути, и есть в новых версиях CentOS).

Установка Docker Compose на macOS

Пользователи macOS, вы избалованы. Docker Desktop для Mac уже включает Docker Compose из коробки. Просто установите Docker Desktop с официального сайта, и всё будет работать. Но если вы хотите обновить Compose отдельно или у вас кастомная установка:

# Если используете Homebrew (а вы должны его использовать)
brew install docker-compose

# Или ручная установка
mkdir -p ~/.docker/cli-plugins
curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-darwin-x86_64" -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose

# Проверка
docker compose version

Для Mac на процессорах Apple Silicon (M1/M2/M3) используйте версию для arm64:

curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-darwin-aarch64" -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose

Да, Apple снова всех удивили своими процессорами. Но надо признать — они шустрые!

Установка Docker Compose на Windows

Windows-пользователи, не расстраивайтесь. Docker Desktop для Windows также включает Compose. Скачиваете Docker Desktop, устанавливаете, и готово. Но если вам нужно больше контроля, откройте PowerShell от имени администратора и выполните:

# Создаём директорию для плагинов
mkdir -p "$env:USERPROFILE\.docker\cli-plugins"

# Скачиваем Docker Compose
Invoke-WebRequest "https://github.com/docker/compose/releases/latest/download/docker-compose-windows-x86_64.exe" -OutFile "$env:USERPROFILE\.docker\cli-plugins\docker-compose.exe"

# Проверка
docker compose version

Если используете WSL2 (Windows Subsystem for Linux 2) — рекомендую! — то можете следовать инструкциям для Linux внутри вашего WSL-дистрибутива.

Настройка прав доступа и добавление пользователя в группу Docker

Вот здесь начинается магия Linux-администрирования. По умолчанию Docker требует sudo для всех команд. Это безопасно, но неудобно. Каждый раз вводить пароль — так себе удовольствие.

Добавляем текущего пользователя в группу docker:

# Создаём группу docker (если её ещё нет)
sudo groupadd docker

# Добавляем пользователя в группу
sudo usermod -aG docker $USER

# Применяем изменения (без перелогина)
newgrp docker

# Проверяем
docker ps

Теперь можете запускать Docker-команды без sudo. Красота! Но помните: пользователи в группе docker фактически имеют root-доступ к системе через контейнеры. Не добавляйте туда кого попало.

Важное замечание по безопасности: Если вы параноик (и правильно делаете), можете оставить sudo и использовать алиасы для упрощения:

# Добавьте в ~/.bashrc или ~/.zshrc
alias doco='sudo docker compose'
alias docker='sudo docker'

Теперь вместо sudo docker compose up пишете просто doco up. Профит!

Проверка установки и первый запуск

Момент истины! Проверяем, что всё установилось корректно:

# Проверка версии
docker compose version

# Должно вывести что-то вроде:
# Docker Compose version v2.24.5

# Посмотрим справку
docker compose --help

Если видите справку с перечнем команд — поздравляю, установка прошла успешно! Если нет — перечитайте инструкции для вашей ОС или проверьте логи ошибок.

Частые проблемы при установке:

  • Permission denied: Не хватает прав. Используйте sudo или добавьте пользователя в группу docker
  • Command not found: Бинарник не в PATH или установился не туда. Проверьте пути
  • Cannot connect to Docker daemon: Docker daemon не запущен. Стартуйте его через systemctl
  • Version incompatibility: Docker Engine слишком старый. Обновите его до версии 19.03.0+

Практический пример 1: Простой веб-сервер Nginx

Начнём с чего-то простого. Развернём Nginx для отдачи статического сайта. Создаём файл docker-compose.yml:

version: '3.8'

services:
  web:
    image: nginx:alpine
    container_name: my-nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

Что здесь происходит:

  • image: nginx:alpine — используем лёгкий образ Nginx на Alpine Linux
  • container_name — даём контейнеру понятное имя
  • ports — пробрасываем порт 80 контейнера на порт 8080 хоста
  • volumes — монтируем локальную папку html в контейнер (ro = read-only)
  • restart: unless-stopped — автоматический перезапуск контейнера

Создаём содержимое:

# Создаём директорию для HTML-файлов
mkdir html

# Создаём простую страницу
echo '<h1>Hello from Docker Compose!</h1>' > html/index.html

# Запускаем
docker compose up -d

# Проверяем
curl http://localhost:8080

Открываем браузер, идём на http://localhost:8080 — должны увидеть приветствие. Если видите — вы прекрасны!

Практический пример 2: WordPress с MySQL

Поднимем что-то посложнее — полноценный WordPress с базой данных. Это классический пример многоконтейнерного приложения.

version: '3.8'

services:
  db:
    image: <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mysql/"   title="MySQL" data-wpil-keyword-link="linked"  data-wpil-monitor-id="237">mysql</a>:8.0
    container_name: wordpress-db
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: mega_secret_password_123
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppassword
    restart: unless-stopped
    networks:
      - wordpress-network

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress-app
    ports:
      - &amp;quot;8000:80&amp;quot;
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppassword
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    restart: unless-stopped
    networks:
      - wordpress-network

networks:
  wordpress-network:
    driver: bridge

volumes:
  db_data:
  wordpress_data:

Фишки этого compose-файла:

  • depends_on — WordPress стартует только после MySQL
  • Именованные volumes (db_data, wordpress_data) — данные сохранятся даже после удаления контейнеров
  • Отдельная сеть — контейнеры могут общаться по именам сервисов
  • Переменные окружения — передача конфигурации в контейнеры

Запускаем:

docker compose up -d

# Смотрим логи
docker compose logs -f

# Проверяем статус
docker compose ps

Идём в браузер на http://localhost:8000 и проходим процесс установки WordPress. Вся конфигурация и данные сохранятся в именованных томах.

Лайфхак: Храните пароли в файле .env, а не прямо в docker-compose.yml:

# Создаём файл .env
cat &amp;gt; .env &amp;lt;&amp;lt; EOF
MYSQL_ROOT_PASSWORD=mega_secret_password_123
MYSQL_PASSWORD=wppassword
EOF

# В docker-compose.yml используем переменные:
environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  MYSQL_PASSWORD: ${MYSQL_PASSWORD}

Не забудьте добавить .env в .gitignore! Пароли в публичных репозиториях — это прямой путь к увольнению.

Шпаргалка основных команд Docker Compose

Держите эту шпаргалку под рукой — вы будете обращаться к ней постоянно:

# Запустить сервисы
docker compose up -d                 # В фоновом режиме
docker compose up --build            # С пересборкой образов

# Остановить и удалить
<a href="https://it-apteka.com/docker-compose-ustanovka-komandy-i-nastrojka-kontejnerov/" target="_blank" rel="noopener"  data-wpil-monitor-id="523">docker compose</a> down                  # Остановить и удалить контейнеры
docker compose down -v               # + удалить volumes (ОСТОРОЖНО!)

# Логи
docker compose logs -f app           # Следить в реальном времени
docker compose logs --tail=100 app   # Последние 100 строк

# Выполнение команд
docker compose exec app bash         # Интерактивная оболочка
docker compose exec app ls -la       # Выполнить команду

# Статус и &lt;a class=&quot;wpil_keyword_link&quot; href=&quot;https://it-apteka.com/category/monitoring/&quot;   title=&quot;Мониторинг&quot; data-wpil-keyword-link=&quot;linked&quot;  data-wpil-monitor-id=&quot;123&quot;&gt;мониторинг&lt;/a&gt;
docker compose ps                    # Список контейнеров
docker compose stats                 # Потребление ресурсов

# Проверка конфигурации
docker compose config                # Проверить синтаксис

Распространённые ошибки и как их избежать

1. Использование :latest в продакшене

# ❌ ПЛОХО
image: nginx:latest

# ✅ ХОРОШО
image: nginx:1.25.3-alpine

2. Хранение данных внутри контейнера

# ❌ ПЛОХО - данные пропадут
services:
  db:
    image: postgres

# ✅ ХОРОШО - данные сохранятся
services:
  db:
    image: postgres
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

3. Пароли в docker-compose.yml

# ❌ ПЛОХО
environment:
  DB_PASSWORD: super_secret_123

# ✅ ХОРОШО
environment:
  DB_PASSWORD: ${DB_PASSWORD}

4. Отсутствие healthcheck

services:
  app:
    healthcheck:
      test: [&amp;quot;CMD&amp;quot;, &amp;quot;curl&amp;quot;, &amp;quot;-f&amp;quot;, &amp;quot;http://localhost/health&amp;quot;]
      interval: 30s
      timeout: 10s
      retries: 3

Production best practices

1. Используйте конкретные версии образов — не :latest

2. Настройте restart policy — обычно unless-stopped

3. Делайте бэкапы volumes — регулярно и автоматически

4. Ограничивайте ресурсы — CPU и память для каждого сервиса

5. Используйте непривилегированных пользователей — не root в контейнерах

6. Настройте мониторинг — Prometheus, Grafana, алерты

7. Ротация логов — чтобы не заполнить диск

8. Secrets management — не храните секреты в коде

Заключение

Поздравляю! Теперь вы знаете о Docker Compose больше, чем 80% разработчиков. Вы установили инструмент на все популярные платформы, создали несколько практических примеров, изучили best practices и знаете, как избежать типичных ошибок.

Ваш следующий шаг:

  • Если вы разработчик — создайте docker-compose.yml для вашего проекта
  • Если вы DevOps — автоматизируйте развёртывание через CI/CD
  • Если вы тимлид — стандартизируйте окружения в команде

Полезные ресурсы:

  • Официальная документация: docs.docker.com/compose
  • Awesome Docker Compose на GitHub
  • Docker Hub для готовых образов
  • Play with Docker для практики

Лучший способ научиться — экспериментировать. У вас есть Docker Compose, у вас есть контейнеры. Ломайте, чините, учитесь. Худшее, что может случиться — вы выполните docker compose down -v и начнёте заново!

Счастливой контейнеризации, друзья! Пусть ваши контейнеры всегда будут здоровы, а volumes никогда не теряются. 🐳🚀

Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх