Что такое Podman Compose. Как установить и управлять контейнерами
Разбираемся в основных командах для работы с контейнерами и сетями, а также рассказываем о преимуществах Podman Compose и миграции из Docker Compose.
Контейнеризация уже стала неотъемлемой частью процесса разработки и развертывания приложений. Наиболее популярным инструментом для работы с контейнерами по-прежнему остается Docker. Однако в некоторых случаях более целесообразным выбором может быть Podman — альтернатива, которая не требует запуска демона, лучше подходит для систем с повышенными требованиями к безопасности и отлично интегрируется с systemd. Помимо прочего, при работе с комплексными приложениями, которые состоят из множества связанных контейнеров, также нужен и удобный инструмент для оркестрации.
Здесь на помощь приходит Podman Compose — утилита для запуска многоконтейнерных приложений и управления ими с помощью файлов конфигурации, аналогичных Docker Compose. Podman Compose позволяет описывать и запускать несколько связанных контейнеров с помощью одного конфигурационного файла (обычно docker-compose.yml
). Это делает процесс управления контейнерными приложениями более простым и стандартизированным.
В отличие от Docker, Podman не требует постоянного фонового сервиса (демона) для управления контейнерами, что повышает безопасность и гибкость работы. Podman Compose использует эту особенность, позволяя запускать и координировать контейнеры на уровне пользователя без прав администратора или сложной настройки.
Основные задачи Podman Compose включают:
- определение и запуск сервисов, сетей и томов из одного файла конфигурации;
- автоматическое создание и связывание контейнеров для работы комплексных приложений;
- поддержку большинства синтаксиса, знакомого пользователям Docker Compose, а также его опций.
Таким образом, Podman Compose предоставляет удобный способ управления сложными контейнерными стеками с использованием открытых стандартов и при этом сохраняет все преимущества Podman, включая архитектуру без демонов и повышенную безопасность.
Установка Podman Compose
Требования к системе
Перед установкой убедитесь, что ваша система соответствует минимальным требованиям:
- Python версии 3.6 или выше;
- установленный Podman версии 3.0 и выше;
- рабочая среда с поддержкой командной строки (терминал);
- для Windows и macOS — установка Podman через соответствующие пакеты или виртуальную машину — например, Podman Desktop или Podman Machine.
Установка с помощью pip
Самый простой и распространенный способ установки Podman Compose — использование пакетного менеджера Python pip
:
pip3 install podman-compose
После установки можно проверить версию и корректность установки командой:
podman-compose --version
Установка с помощью Python-сценария
Если по каким-то причинам установка через pip
невозможна, вы можете установить Podman Compose вручную из исходного кода.
1. Скачайте архив с исходниками или клонируйте репозиторий с GitHub:
git clone https://github.com/containers/podman-compose.git
cd podman-compose
2. Установите пакет с помощью Python:
python3 setup.py install
Способ подойдет пользователям, которым нужно использовать последнюю версию из репозитория или настроить установку вручную.
Установка для Windows и macOS
На Windows и macOS Podman Compose требует предварительной установки Podman, так как это основа для работы с контейнерами.
Windows: рекомендуется установить Podman Desktop, который включает в себя все необходимое окружение, в том числе Podman Machine — виртуальную машину для запуска контейнеров. После установки можно использовать Windows Terminal или PowerShell для запуска Podman Compose.
macOS: установите Podman через Homebrew:
brew install podman
Затем запустите Podman Machine:
podman machine init
podman machine start
Далее — установите Podman Compose через pip
, как описано выше.
Для обеих платформ важно, чтобы среда с Podman была корректно настроена и доступна из командной строки. Только так утилита сможет корректно работать.
Работа в Podman Compose
Развертывание приложения
Для развертывания многоконтейнерного приложения с помощью Podman Compose нужен файл docker-compose.yml, в котором описаны все сервисы, томы и сети. Минимальный и рабочий пример docker-compose.yml
, который поднимает nginx и пробрасывает порт 80:
version: '3.8'
services:
nginx:
image: docker.io/nginx:alpine # Явно указываем реестр (требуется в Podman)
ports:
- "80:80"
restart: unless-stopped
network_mode: bridge # Явно указываем сетевой режим (опционально)
Запустить приложение можно с помощью команды:
podman-compose up -d
Опция -d
запускает контейнеры в фоновом режиме (detached mode).
Проверка запуска контейнера
Чтобы убедиться, что контейнеры запущены, используйте следующую команду:
podman-compose ps
Она выведет список всех сервисов, их статусы и порты. Проверить доступность nginx можно с помощью команды:
curl http://localhost
Она выведет приветственную страницу.
Остановка контейнера
Для остановки работающих контейнеров используйте команду:
podman-compose stop
Она корректно останавливает все контейнеры, описанные в конфигурации.
Отключение модуля
Если нужно временно отключить (остановить) сервис (модуль), можно конкретизировать его название в команде:
podman-compose stop <service_name>
Для повторного запуска используйте следующую команду:
podman-compose start <service_name>
Удаление модуля
Для полного удаления контейнеров и связанных с ними ресурсов (сети, томы) используйте:
podman-compose down
Это удалит контейнеры, остановит сеть и очистит все созданные ресурсы.
Добавление пользователя без root-прав
Podman поддерживает запуск контейнеров от имени обычного пользователя без необходимости прав root. Для этого пользователь должен состоять в необходимых группах — например, podman или wheel в зависимости от системы, а также обладать корректно настроенным Podman.
Запуск контейнера пользователем без root
Если у вас настроена среда Podman для работы без root, просто запускайте команды podman-compose
и podman
от своего пользователя без sudo
. Пример:
podman-compose up -d
Это особенно удобно для разработки и безопасного развертывания.
Добавление сети
Podman Compose автоматически создает изолированную сеть для контейнеров приложения. Однако можно создать дополнительную сеть вручную:
podman network create <network_name>
В docker-compose.yml
ее можно указать в разделе networks, чтобы подключить сервисы к этой сети.
Вывод списка сетей
Посмотреть все существующие сети можно командой:
podman network ls
Она позволяет проверить, какие сети доступны для подключения контейнеров.
Просмотр логов
Для просмотра логов конкретного сервиса используйте следующую команду:
podman-compose logs <service_name>
А чтобы смотреть логи всех сервисов в реальном времени, подойдет:
podman-compose logs -f
Опция -f (follow)
выводит логи в режиме live, обновляя их в терминале.
Конфигурация в файле .env
Файл .env
предназначен для хранения переменных окружения, которые могут быть автоматически подхвачены Podman Compose и переданы контейнерам во время их запуска. Это удобный способ отделить конфиденциальные данные (пароли, ключи), параметры настройки или часто изменяемые значения от основного файла docker-compose.yml
.
Рассмотрим ключевые преимущества использования .env
.
- Безопасность: не нужно хранить чувствительные данные напрямую в файле конфигурации.
- Гибкость: легко менять настройки без правки основного
docker-compose.yml
. - Удобство: можно использовать одни и те же файлы конфигурации с разными параметрами для разных окружений (разработка, тестирование, продакшн).
Файл .env
содержит строки вида:
ПЕРЕМЕННАЯ=значение
Пример:
POSTGRES_PASSWORD=supersecret
WEB_PORT=8080
DB_USER=admin
DB_NAME=mydb
В файле docker-compose.yml
для подстановки переменных используется синтаксис ${ПЕРЕМЕННАЯ}
:
version: '3.8'
services:
nginx:
image: docker.io/nginx:alpine
ports:
- "${WEB_PORT:-8080}:80"
restart: unless-stopped
networks:
- mynet
db:
image: docker.io/postgres:16
environment:
POSTGRES_USER: "${DB_USER:-user}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-pass}"
POSTGRES_DB: "${DB_NAME:-app}"
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- mynet
volumes:
postgres_data:
networks:
mynet:
driver: bridge
После этого можно остановить предыдущие контейнеры и запустить новые с помощью команд:
podman-compose down
podman-compose up -d
Проверить доступность nginx:
curl localhost:8080
Проверить подключение к БД из контейнера nginx:
podman exec -it root_nginx_1 sh
Внутри контейнера можно попробовать ping db
(если есть ping
) или curl db:5432
, однако в alpine
по умолчанию этих утилит может не быть. Вместо этого подойдет:
apk add --no-cache bind-tools curl
nslookup db
Для проверки PostgreSQL напрямую используйте команду:
podman exec -it root_db_1 psql -U postgres -d app
Подключение .env в Podman Compose
По умолчанию Podman Compose автоматически считывает файл .env
, расположенный в той же директории, что и docker-compose.yml
. Если нужно использовать файл с другим именем или расположением, можно задать переменные окружения вручную перед запуском:
export $(cat path/to/custom.env | xargs)
podman-compose up -d
Чтобы убедиться, что .env работает, используйте:
podman-compose config
Он покажет финальный YAML с подставленными значениями.
Советы по работе с .env
- Не храните файл
.env
с конфиденциальными данными в публичном репозитории. - Для разных окружений используйте разные файлы
.env
и переключайтесь между ними. - При необходимости можно использовать несколько файлов и объединять переменные.
Использование .env
значительно упрощает и стандартизирует настройку контейнерных приложений, делая их более безопасными и гибкими в эксплуатации.
Преимущества перед Docker Compose
Хотя Docker Compose является широко распространенным инструментом для оркестрации многоконтейнерных приложений, у Podman Compose есть уникальные преимущества. Они делают его привлекательным выбором в следующих сценариях.
Архитектура без демонов
В отличие от Docker, который требует постоянного запуска демона dockerd, Podman работает без фонового сервиса. Это снижает системные ресурсы, упрощает управление и повышает безопасность, так как нет необходимости запускать демон с правами root.
Работа без root-прав
Podman и Podman Compose поддерживают запуск контейнеров от имени обычного пользователя без необходимости административных прав. Это особенно важно в средах с жесткими требованиями безопасности и для разработки, где ограничение доступа снижает риск ошибок и атак.
Совместимость с OCI-стандартами
Podman полностью соответствует спецификациям Open Container Initiative (OCI). Это обеспечивает совместимость с другими инструментами и контейнерными образами без зависимости от Docker.
Улучшенная безопасность
Отсутствие демона и возможность запуска контейнеров в пользовательском пространстве существенно снижают потенциальные уязвимости и риски эксплуатации системы.
Простая интеграция с системами управления пакетами Linux
Podman легко устанавливается и поддерживается в большинстве современных дистрибутивов Linux через стандартные менеджеры пакетов, что упрощает обновление и интеграцию.
Более точное управление контейнерами и подами
Podman изначально поддерживает концепцию подов (pods) — группы контейнеров, которые совместно используют сеть и пространство имен. Таким образом, становится проще моделировать сложные архитектуры приложений, близкие к Kubernetes.
Открытый и свободный проект
Podman и Podman Compose являются проектами с открытым исходным кодом. Их активно развивают сообщество и компания Red Hat, что гарантирует прозрачность и постоянное улучшение.
Эти преимущества делают Podman Compose привлекательным инструментом для разработчиков, системных администраторов и DevOps-инженеров, особенно в случаях, когда важна безопасность, гибкость и легкость управления контейнерами без необходимости запуска дополнительных сервисов.
Больше материалов о контейнеризации
Миграция из Docker Compose
Переход с Docker Compose на Podman Compose зачастую проходит достаточно гладко благодаря высокой степени совместимости обоих инструментов. Podman Compose использует практически тот же формат файла docker-compose.yml
, что значительно упрощает процесс миграции. Она состоит из следующих шагов.
- Проверка совместимости файла docker-compose.yml. В большинстве случаев ваш существующий файл
docker-compose.yml
можно использовать без изменений. Однако стоит убедиться, что все опции и функции, используемые в файле, поддерживаются Podman Compose. Некоторые специфичные для Docker возможности могут работать иначе или требовать адаптации. - Установка Podman и Podman Compose. Перед запуском убедитесь, что на вашей системе установлены Podman и Podman Compose. Для Linux это обычно установка через менеджер пакетов, для Windows и macOS — настройка Podman Machine или Podman Desktop. В каталоге с вашим
docker-compose.yml
выполните команду:podman-compose up -d
. Она запустит контейнеры по описанию файла, заменяя Docker Compose. - Проверка статусов и логов. Используйте команды
podman-compose ps
иpodman-compose logs
для контроля работы контейнеров и устранения возможных проблем. - Корректировка и оптимизация. При необходимости внесите правки в файл
docker-compose.yml
для лучшей совместимости. Например, измените настройки сети, томов или переменных окружения.
Для упрощения этого процесса используйте следующие рекомендации.
- В некоторых случаях могут потребоваться изменения путей к томам, особенно если используется rootless режим Podman, где монтирование иногда работает иначе.
- Podman Compose создает собственные сети, но некоторые сложные сетевые конфигурации из Docker Compose могут потребовать адаптации.
- Использовать версию 3.x формата файла Compose, так как она лучше поддерживается Podman Compose.
- На данный момент Podman Compose может не поддерживать некоторые расширенные возможности Docker Compose. Рекомендуем проверить документацию и протестировать ваши сценарии.
Как упростить работу с Podman Compose
Selectel может значительно упростить процесс использования Podman Compose в облачной инфраструктуре благодаря готовым решениям, виртуальным машинам, сетевым возможностям и системам хранения. В частности, Selectel предоставляет:
- гибкую облачную инфраструктуру, подходящую для развертывания контейнерных приложений с использованием Podman и Podman Compose;
- виртуальные машины с гибкой настройкой ресурсов, на которых можно организовать любую инфраструктуру;
- хранилища для постоянного хранения данных и использования в качестве томов в контейнерах;
- балансировщики нагрузки для маршрутизации трафика между несколькими экземплярами приложений;
- поддержку DevOps-практик, включая API, Terraform и облачные образы, упрощающие автоматизацию;
- техническую поддержку и SLA, которые обеспечивают стабильность и предсказуемость работы инфраструктуры.
Таким образом, у клиентов есть полноценная платформа для развертывания современных микросервисных решений на базе Podman с возможностью масштабирования, изоляции, отказоустойчивости и автоматизации.
Помимо прочего, в серверной операционной системе SelectOS мы сфокусировались на Podman. Вы можете проверить, насколько это решение подходит для ваших задач.
Заключение
Podman Compose — мощный современный инструмент для управления многоконтейнерными приложениями, который предлагает безопасную, гибкую и удобную альтернативу Docker Compose. Благодаря архитектуре без демонов, поддержке запуска контейнеров без root-прав и высокой совместимости с существующими docker-compose.yml
файлами, Podman Compose становится все более популярным выбором среди разработчиков и системных администраторов.
Переход на Podman Compose позволяет повысить уровень безопасности, упростить управление контейнерами и интегрировать современные стандарты контейнеризации в ваши проекты. Использование файла .env
помогает гибко настраивать окружение, а поддержка сетей и логов обеспечивает полный контроль над процессом работы контейнеров.