Docker – программная платформа, обеспечивающая запуск изолированных контейнеров, основанных на образах. Она предоставляет базовые инструменты для создания, распространения и выполнения контейнеризированных приложений. Docker включает в себя демон dockerd, который управляет контейнерами, томами, сетями и образами, а также клиентскую утилиту docker, позволяющую выполнять операции над отдельными контейнерами или объектами Docker. Основная задача Docker заключается в предоставлении стандартизированной среды выполнения для одного контейнера или набора независимых контейнеров, управляемых вручную.
Для описания и управления многоконтейнерными приложениями на основе декларативной конфигурации вместо Docker удобно применять отдельный инструмент – Docker Compose. Он использует файл docker-compose.yml, в котором фиксируются сервисы, их параметры, сети, тома, переменные окружения и взаимозависимости. В отличие от Docker, который работает с контейнерами по одному, Docker Compose рассматривает проект как единую сущность. Это позволяет запускать, останавливать и масштабировать все его сервисы через единые команды. Compose выполняет роль локального оркестратора для относительно простых и средних многоконтейнерных приложений, обеспечивая согласованный запуск и взаимодействие всех его компонентов.
В статье разберём, как запустить проект с помощью Docker Compose на VPS с уже установленным Docker под управлением Rocky Linux 9.
Как запустить проект с помощью Docker Compose
Docker CLI служит интерфейсом для взаимодействия с Docker Engine и управления контейнерной средой. При этом его функциональность может расширяться через систему подключаемых модулей. Когда вызывается команда формата docker <plugin>, клиентская часть Docker автоматически пытается обнаружить соответствующий бинарный файл, последовательно просматривая ряд каталогов. Приоритет поиска выстроен таким образом, что сначала проверяются пользовательские местоположения: если определена переменная окружения $DOCKER_CLI_PLUGIN_PATH, её путь используется в первую очередь. Затем – каталог ~/.docker/cli-plugins/, предназначенный для локальных пользовательских плагинов. Если нужного исполняемого файла там не находится, Docker CLI переходит к системным директориям – /usr/local/lib/docker/cli-plugins/, куда обычно помещают плагины при ручной установке, и /usr/lib/docker/cli-plugins/, в которой располагаются плагины, установленные через менеджер пакетов.
Установка Docker Compose
С учётом описанной схемы логичным решением является размещение Docker Compose как стандартного CLI-плагина в одной из системных директорий. Это позволит обеспечить доступность данного инструмента для всех пользователей и единообразие его использования в пределах всей системы.
Исходя из этого, сначала создайте каталог для размещения плагина:
$ sudo mkdir -p /usr/local/lib/docker/cli-plugins/
Затем перейдите в созданный каталог:
$ cd /usr/local/lib/docker/cli-plugins/
После чего с использованием утилиты curl загрузите бинарный файл актуальной версии Docker Compose:
$ sudo curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o docker-compose
Далее сделайте исполняемым загруженный бинарный файл:
$ sudo chmod +x docker-compose
Для проверки того, что плагин доступен, выведите информацию о версии Docker Compose:
$ docker compose version
Номер версии должен соответствовать версии актуального релиза на GitHub.

Запуск проекта с помощью Docker Compose
В качестве примера рассмотрим запуск полноценного инстанса Gitea, состоящего из двух контейнеров: основного с самим приложением Gitea и контейнера с базой данных, которую использует приложение.
Для запуска проекта перейдите в домашний каталог:
$ cd ~
Создайте директорию для проекта:
$ mkdir gitea
Перейдите в неё:
$ cd gitea/
И создайте файл docker-compose.yml:
$ vi docker-compose.yml
Файл нашего примера содержит описание запуска приложения Gitea и его базы данных PostgreSQL. Первый контейнер поднимает само веб-приложение, пробрасывает порт для веб-интерфейса, передаёт нужные переменные окружения и сохраняет данные в отдельный том. Второй контейнер запускает PostgreSQL 15 с указанными учётными данными и собственным томом для хранения базы. Docker Compose связывает эти контейнеры между собой и обеспечивает их автоматический старт.
version: "3"
services:
gitea:
image: gitea/gitea:latest
ports:
- "3000:3000"
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db:5432
DB_NAME: gitea
DB_USER: gitea
DB_PASSWD: P@ssw0rd
volumes:
- gitea:/data
db:
image: postgres:15
environment:
POSTGRES_DB: gitea
POSTGRES_USER: gitea
POSTGRES_PASSWORD: P@ssw0rd
volumes:
- pg:/var/lib/postgresql/data
volumes:
gitea:
pg:
Сохраните файл, закройте его и следующей командой запустите все описанные в нём сервисы. Команда создаст для сервисов контейнеры, сети и тома, если они ещё не существуют, запустит их в фоновом режиме благодаря флагу -d.
$ docker compose up -d
Выведите список всех контейнеров Docker командой:
$ docker ps -a
Из вывода видно, что на сервере запущены два контейнера.

Работоспособность самого сервиса можно проверить, перейдя в браузере по ссылке вида http://your-site-name.ru:3000, где вместо укажите доменное имя веб-сайта проекта. Если всё сделано корректно, браузер откроет страницу настройки первоначальной конфигурации Gitea.your-site-name.ru

