Установка и использование Docker Compose на Ubuntu 24.04
Активно используя Docker в своих проектах, многие разработчики сталкивались с проблемой создания и управления множеством контейнеров. Особенно остро это ощущается при необходимости переноса всей инфраструктуры проекта, его масштабировании и обновлении.На помощь к нам приходит инструмент для удобного управления многоконтейнерными приложениями - Docker Compose.
Что делает Docker Compose?
- Даёт возможность описать всю инфраструктуру приложения в одном файле, docker-compose.yml;
- Управляет сразу всеми контейнерами проекта, описывая правила и связь контейнеров между собой;
- Упрощает развёртывание контейнеров;
- Позволяет автоматически пересоздавать все контейнеры после внесения изменений в проект.
Установка Docker Compose
С июля 2023 года Docker Compose V1, использующий команду docker-compose, не поддерживается разработчиком. Обновления больше не выходят. На его место пришла вторая версия программы.В этой статье мы используем актуальную, на момент написания, версию Docker Compose V2, не смотря на то что прежние флаги и аргументы сохранились, сама команда должна выглядеть следующим образом:
docker compose
Все команды в данной инструкции мы выполняем от имени пользователя root.В этой статье мы рассмотрим установку Docker Compose из официального репозитория Docker, в том числе добавление этого репозитория в Ubuntu 24.04.
- Обновляем список доступных пакетов:
apt update
- Установим необходимые нам сопутствующие пакеты:
apt install ca-certificates curl apt-transport-https software-properties-common
- Добавляем 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 - Добавляем сам репозиторий в систему:
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 - Снова обновляем список пакетов и устанавливаем из нашего нового репозитория Docker пакет docker-compose-plugin:
apt update
apt install docker-compose-plugin - Убедимся что новая версия Docker Compose установлена. На момент написания статьи это версия 2.33.1:
docker composer version
Пример использования Docker Compose
Для примера создадим простое приложение на Golang, которое выводит текст в браузер, и будем проксировать трафик на него через веб-сервер Nginx.Создадим приложение
- Создаём директорию проекта и приложения, переходим в директорию приложения:
mkdir -p ~/compose-example/app && cd ~/compose-example/app
- Создаём файл main.go:
nano main.go
- Пишем самый простой веб-сервер на 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)
} - Создаём Dockerfile для нашего приложения:
nano Dockerfile
- Заполняем его:
# Используем официальный образ Golang
FROM golang:1.21
# Создаём рабочую директорию
WORKDIR /app
# Копируем файлы проекта
COPY . .
# Собираем приложение
RUN go mod init app && go mod tidy && go build -o app
# Запускаем приложение
CMD ["./app"] - Приложение готово. Создадим минимальную конфигурацию 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 будет загружать и собирать необходимые образы, что может занять непродолжительное время. В результате вы получите:

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

Полезные команды Docker Compose
Вот несколько необходимых для работы базовых команд:docker compose down

Удаляет контейнеры проекта. Образы при этом не удаляются.
docker compose stop
Останавливает контейнеры.docker compose start
Запускает их после остановки.
docker compose pause
Приостановит работу контейнеров, не изменяя их состояния.docker compose unpause
Возобновит работу.
docker compose logs
Вывод логов контейнеров проекта.
В этой статье мы рассмотрели самый простой вариант установки Docker Compose из официального репозитория Docker, а также его работу на примере простого приложения. За дополнительной информацией рекомендуем обращаться в официальную документацию программы.
03 Mar 2025, 14:26:57