Yandex
Обновить настройки cookies

Установка и использование Docker Compose на Ubuntu 24.04

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

На помощь к нам приходит инструмент для удобного управления многоконтейнерными приложениями - Docker Compose.

Что делает Docker Compose?

  1. Даёт возможность описать всю инфраструктуру приложения в одном файле, docker-compose.yml;
  2. Управляет сразу всеми контейнерами проекта, описывая правила и связь контейнеров между собой;
  3. Упрощает развёртывание контейнеров;
  4. Позволяет автоматически пересоздавать все контейнеры после внесения изменений в проект.

Установка Docker Compose

С июля 2023 года Docker Compose V1, использующий команду docker-compose, не поддерживается разработчиком. Обновления больше не выходят. На его место пришла вторая версия программы.
В этой статье мы используем актуальную, на момент написания, версию Docker Compose V2, не смотря на то что прежние флаги и аргументы сохранились, сама команда должна выглядеть следующим образом: 
docker composeВсе команды в данной инструкции мы выполняем от имени пользователя root.
В этой статье мы рассмотрим установку Docker Compose из официального репозитория Docker, в том числе добавление этого репозитория в Ubuntu 24.04.

  1. Обновляем список доступных пакетов:
    apt update
  2. Установим необходимые нам сопутствующие пакеты:
    apt install ca-certificates curl apt-transport-https software-properties-common
  3. Добавляем GPG ключ официального репозитория Docker:
    install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    chmod a+r /etc/apt/keyrings/docker.asc
  4. Добавляем сам репозиторий в систему:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
      tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. Снова обновляем список пакетов и устанавливаем из нашего нового репозитория Docker пакет docker-compose-plugin:
    apt update
    apt install docker-compose-plugin
  6. Убедимся что новая версия Docker Compose установлена. На момент написания статьи это версия 2.33.1:
    docker composer version20250303_nPQaKF1E

Пример использования Docker Compose

Для примера создадим простое приложение на Golang, которое выводит текст в браузер, и будем проксировать трафик на него через веб-сервер Nginx.

Создадим приложение

  1. Создаём директорию проекта и приложения, переходим в директорию приложения:
    mkdir -p ~/compose-example/app && cd ~/compose-example/app
  2. Создаём файл main.go:
    nano main.go
  3. Пишем самый простой веб-сервер на Go:
    package main

    import (
    "fmt"
    "net/http"
    )

    func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Привет, мир!")
    })  fmt.Println("Сервер запущен на порту 8080...")
    http.ListenAndServe(":8080", nil)
    }
  4. Создаём Dockerfile для нашего приложения:
    nano Dockerfile
  5. Заполняем его:
    # Используем официальный образ Golang
    FROM golang:1.21

    # Создаём рабочую директорию
    WORKDIR /app

    # Копируем файлы проекта
    COPY . .

    # Собираем приложение
    RUN go mod init app && go mod tidy && go build -o app

    # Запускаем приложение
    CMD ["./app"]
  6. Приложение готово. Создадим минимальную конфигурацию nginx для проксирования трафика на наше приложение. Переходим в директорию проекта и создаём файл nginx.conf:
    cd ~/compose-example && nano nginx.confПишем саму конфигурацию:
    events {
        use          epoll;
        worker_connections  128;
    }

    http {
        server {
            listen 80;
            location / {
                proxy_pass http://compose-example-app:8080;
            }
        }
    }

Создаём файл docker-compose.yml

В директории проекта, в которую мы перешли ранее, создаём файл:
nano docker-compose.ymlС содержимым:
services:
  app:
    build: ./app
    container_name: compose-example-app
    restart: always

  nginx:
    image: nginx:alpine
    container_name: nginx_proxy
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

В блоке services мы описываем контейнеры (сервисы) проекта, в нашем случае их два: app и nginx.
Для контейнера app мы указали:
  • build: ./app - контейнер будет собран из Dockerfile’a в директории ./app, который мы создали ранее;
  • container_name - имя контейнера. Именно его мы указали в файле nginx.conf как адрес для проксирования. При использовании Docker Compose все контейнеры (сервисы) по умолчанию попадают в одну виртуальную сеть и имеют доступ друг к другу по имени контейнера;
  • restart - автоматический запуск контейнера при его падении.

В случае с контейнером (сервисом) nginx мы используем готовый образ, о чём нам говорит  параметр image: nginx:alpine.  Также мы направляем 80-ый порт нашего сервера на 80-ый порт контейнера. Обратите внимание на то, что для сервиса app мы не пробрасывали никакие порты, не смотря на то что само наше приложение локально использует порт 8080. volumes позволяет нам примонтировать директорию, в нашем случае файл nginx.conf, внутрь контейнера в режиме только для чтения (:ro). depends_on отложит запуск сервиса nginx, пока не будет запущен сервис app.

Запуск Docker Compose

Собрать и запустить наше приложение можно простой командой:
docker compose up --build -d
  • --build - пересобирает образы перед запуском (даже если они уже есть);
  • -d - фоновый режим.

При первом запуске Docker Compose будет загружать и собирать необходимые образы, что может занять непродолжительное время. В результате вы получите:
20250303_f9v5W7FZ

Проверить работу нашего приложения можно просто перейдя по адресу http://localhost или по IP вашего сервера:
20250303_iURPyk8O

Полезные команды Docker Compose

Вот несколько необходимых для работы базовых команд:

docker compose down20250303_ZybNTQxo
Удаляет контейнеры проекта. Образы при этом не удаляются.

docker compose stopОстанавливает контейнеры.

docker compose startЗапускает их после остановки.
20250303_CiZRQd5n

docker compose pauseПриостановит работу контейнеров, не изменяя их состояния.

docker compose unpauseВозобновит работу.
20250303_U0Fp8I7e

docker compose logsВывод логов контейнеров проекта.
20250303_rk4ttt1t

В этой статье мы рассмотрели самый простой вариант установки Docker Compose из официального репозитория Docker, а также его работу на примере простого приложения. За дополнительной информацией рекомендуем обращаться в официальную документацию программы.
03 Mar 2025, 14:26:57

Премиум выделенные серверы

Смотреть конфигурации