Home » Как установить Docker Compose на Ubuntu 24
Как установить Docker Compose на Ubuntu 24

Как установить Docker Compose на Ubuntu 24

Если вы развёртываете приложения на серверах, то наверняка сталкивались с тем, что контейнеризация — это не просто модная штука, а реальная необходимость. Docker Compose позволяет определять и запускать многоконтейнерные приложения одной командой, что кардинально упрощает жизнь девопсам и разработчикам. На Ubuntu 24 (последней LTS) процесс установки имеет свои нюансы, особенно после того, как Docker изменил подход к распространению своих инструментов.

В этой статье разберём три ключевых момента: как работает Docker Compose в контексте современной экосистемы Docker, пошаговую установку на Ubuntu 24 с учётом всех подводных камней, и практические примеры использования с реальными кейсами. Если вам нужен VPS для тестирования или выделенный сервер для продакшена, то эта информация будет особенно полезна.

Как работает Docker Compose: от V1 к V2

Docker Compose прошёл серьёзную эволюцию. Если раньше это была отдельная утилита docker-compose (написанная на Python), то теперь это плагин для Docker CLI — docker compose. Разница не только в синтаксисе, но и в архитектуре:

  • V1 (legacy): Отдельный бинарник, устанавливался через pip или curl
  • V2 (current): Плагин Docker CLI, написанный на Go, более быстрый и интегрированный

Важный момент: с версии Docker Desktop и современных установок Docker Engine, Compose V2 идёт в комплекте. Но на серверных дистрибутивах это не всегда так, поэтому нужно знать, как правильно это настроить.

Установка Docker Engine: фундамент для Compose

Прежде чем устанавливать Compose, убедимся, что у нас есть свежий Docker Engine. Ubuntu 24 поставляется с устаревшей версией Docker в стандартных репозиториях, поэтому используем официальный репозиторий:

# Обновляем систему
sudo apt update && sudo apt upgrade -y

# Устанавливаем зависимости
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# Добавляем GPG ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Добавляем репозиторий Docker
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

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

# Устанавливаем Docker Engine
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

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

# Перезапускаем сессию или используем newgrp
newgrp docker

Обратите внимание на пакет docker-compose-plugin — это и есть Compose V2. После установки проверим:

# Проверяем версию Docker
docker --version

# Проверяем версию Compose
docker compose version

Альтернативные способы установки Docker Compose

Если по каким-то причинам плагин не установился или вам нужна специфическая версия, есть несколько альтернатив:

Метод 1: Ручная установка плагина

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

# Скачиваем последнюю версию Compose
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

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

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

Метод 2: Установка Compose V1 (legacy)

Иногда для совместимости со старыми скриптами нужен именно V1:

# Устанавливаем через pip
sudo apt install python3-pip -y
pip3 install docker-compose

# Или через curl
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

Практические примеры и кейсы

Теперь, когда у нас всё настроено, давайте разберём реальные сценарии использования.

Кейс 1: Веб-приложение с базой данных

Создадим простой стек NGINX + PostgreSQL:

# Создаём рабочую директорию
mkdir ~/docker-test && cd ~/docker-test

# Создаём docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
    networks:
      - webnet

  db:
    image: postgres:15
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secure_password
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db_data:

networks:
  webnet:
    driver: bridge
EOF

# Создаём простую HTML страницу
mkdir html
echo "

Hello from Docker Compose!

" > html/index.html # Запускаем docker compose up -d # Проверяем статус docker compose ps

Кейс 2: Мониторинг стек (Prometheus + Grafana)

Это более сложный пример для мониторинга инфраструктуры:

cat > docker-compose-monitoring.yml << 'EOF'
version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - prometheus

volumes:
  prometheus_data:
  grafana_data:
EOF

# Создаём конфиг для Prometheus
cat > prometheus.yml << 'EOF'
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
EOF

# Запускаем мониторинг
docker compose -f docker-compose-monitoring.yml up -d

Сравнение методов установки

Метод Плюсы Минусы Рекомендация
Docker Plugin (V2) Интегрирован с Docker CLI, быстрый, официальный Может требовать обновления Docker Engine Для новых проектов
Standalone V1 Независимый от Docker Engine, привычный синтаксис Устаревший, медленнее, больше зависимостей Только для legacy проектов
Через pip Простая установка Зависимость от Python, версия может отставать Для разработки

Продвинутые возможности и автоматизация

Docker Compose открывает множество возможностей для автоматизации. Вот несколько интересных паттернов:

Профили для разных окружений

services:
  web:
    image: nginx:alpine
    # Базовый сервис всегда запускается
    
  db:
    image: postgres:15
    # Базовый сервис всегда запускается
    
  redis:
    image: redis:alpine
    profiles:
      - development
      - testing
    
  monitoring:
    image: grafana/grafana
    profiles:
      - production

# Запуск только для разработки
# docker compose --profile development up

# Запуск для продакшена
# docker compose --profile production up

Использование переменных окружения

# Создаём .env файл
cat > .env << 'EOF'
APP_PORT=8080
DB_PASSWORD=super_secure_password
COMPOSE_PROJECT_NAME=myapp
EOF

# В docker-compose.yml используем переменные
services:
  web:
    ports:
      - "${APP_PORT}:80"
  db:
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}

Healthchecks и зависимости

services:
  db:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
  
  web:
    image: nginx:alpine
    depends_on:
      db:
        condition: service_healthy

Интеграция с CI/CD и скриптами

Docker Compose отлично интегрируется с системами автоматизации:

#!/bin/bash
# Скрипт для автоматического деплоя

set -e

echo "Pulling latest images..."
docker compose pull

echo "Building custom images..."
docker compose build

echo "Running database migrations..."
docker compose run --rm web python manage.py migrate

echo "Starting services..."
docker compose up -d

echo "Waiting for services to be ready..."
sleep 10

echo "Running health checks..."
docker compose ps

echo "Deployment completed!"

Troubleshooting: частые проблемы и решения

  • Ошибка "permission denied": Убедитесь, что пользователь добавлен в группу docker
  • Порты заняты: Используйте docker compose ps и netstat -tulpn для диагностики
  • Проблемы с DNS: Проверьте настройки сети в compose файле
  • Медленный старт: Используйте docker compose up --parallel

Полезные команды для диагностики:

# Логи всех сервисов
docker compose logs -f

# Логи конкретного сервиса
docker compose logs web

# Выполнение команд в контейнере
docker compose exec web bash

# Пересоздание сервисов
docker compose up --force-recreate

# Очистка неиспользуемых ресурсов
docker system prune -a

Альтернативы Docker Compose

Хотя Docker Compose является стандартом де-факто, стоит знать об альтернативах:

  • Podman Compose: Совместимая с Docker альтернativa без демона
  • Kubernetes: Для более сложных сценариев оркестрации
  • Nomad: Простая альтернатива от HashiCorp
  • Swarm Mode: Встроенная в Docker оркестрация

Статистика показывает, что 65% разработчиков используют Docker Compose для локальной разработки, а 40% — для продакшен деплоймента малых и средних приложений.

Интересные факты и нестандартное использование

Docker Compose можно использовать не только для веб-приложений:

  • Desktop приложения: Запуск GUI приложений через X11 forwarding
  • Тестирование: Создание изолированных тестовых окружений
  • Машинное обучение: Оркестрация Jupyter notebooks с GPU поддержкой
  • Сетевые лаборатории: Эмуляция сложных сетевых топологий

Пример запуска GUI приложения:

services:
  firefox:
    image: jlesage/firefox
    ports:
      - "5800:5800"
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
    environment:
      - DISPLAY=${DISPLAY}

Заключение и рекомендации

Docker Compose на Ubuntu 24 — это мощный инструмент, который должен быть в арсенале каждого системного администратора и разработчика. Рекомендую:

  • Используйте Docker Compose V2 для всех новых проектов
  • Структурируйте проекты с помощью профилей и переменных окружения
  • Не забывайте про мониторинг и логирование в production
  • Изучите Docker Swarm для более сложных сценариев
  • Автоматизируйте деплойменты с помощью CI/CD

Для тестирования и разработки идеально подойдёт VPS, а для продакшена с высокими нагрузками лучше использовать выделенные серверы.

Docker Compose значительно упрощает управление контейнерами и позволяет сосредоточиться на разработке, а не на конфигурировании инфраструктуры. Официальную документацию можно найти на docs.docker.com/compose/.


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

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

Leave a reply

Your email address will not be published. Required fields are marked