Что такое Podman Compose, как установить и управлять контейнерами

Что такое 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, что значительно упрощает процесс миграции. Она состоит из следующих шагов.

  1. Проверка совместимости файла docker-compose.yml. В большинстве случаев ваш существующий файл docker-compose.yml можно использовать без изменений. Однако стоит убедиться, что все опции и функции, используемые в файле, поддерживаются Podman Compose. Некоторые специфичные для Docker возможности могут работать иначе или требовать адаптации.
  2. Установка Podman и Podman Compose. Перед запуском убедитесь, что на вашей системе установлены Podman и Podman Compose. Для Linux это обычно установка через менеджер пакетов, для Windows и macOS — настройка Podman Machine или Podman Desktop. В каталоге с вашим docker-compose.yml выполните команду: podman-compose up -d. Она запустит контейнеры по описанию файла, заменяя Docker Compose.
  3. Проверка статусов и логов. Используйте команды podman-compose ps и podman-compose logs для контроля работы контейнеров и устранения возможных проблем.
  4. Корректировка и оптимизация. При необходимости внесите правки в файл 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 помогает гибко настраивать окружение, а поддержка сетей и логов обеспечивает полный контроль над процессом работы контейнеров.