Что такое Podman?

В этой статье хотелось бы рассказать про Podman - аналог всем известного Docker. Многие даже не слышали о нём, но у него есть несколько интересных фич, которые мы рассмотрим в этой статье.
Контейнеризация
Давайте немного вспомним, а может, и узнаем, что такое контейнеризация. Это технология изоляции приложений, при которой приложение упаковывается вместе со всеми своими зависимостями (библиотеками, конфигами, средой выполнения) в единый контейнер. Контейнер работает изолированно от операционной системы и других контейнеров, но при этом использует общее ядро ОС хоста - в отличие от виртуальных машин, которые эмулируют целый компьютер.
Основные преимущества:
- «Работает у меня» больше не проблема - среда одинакова везде
- Быстрый запуск (секунды vs минуты у ВМ)
- Лёгкость (мегабайты vs гигабайты у ВМ)
- Простое масштабирование и деплой
Контейнеры создаются на основе образов, которые включают в себя приложение и все необходимое для его работы. Основные технологии, лежащие в основе контейнеризации:
- Namespaces - изолируют процессы, сеть и файловую систему;
- Cgroups - ограничивают использование ресурсов, например памяти или CPU;
- Образы (Images) - шаблоны для создания контейнеров.
А что такое Podman?
Podman (от Pod Manager) - это инструмент для управления контейнерами и OCI-образами, разработанный Red Hat. Он позиционируется как прямая альтернатива Docker и во многом совместим с ним по CLI (можно даже сделать alias docker=podman).
Главные отличия от Docker:
- Daemonless - Podman не требует фонового демона. Каждый контейнер запускается как обычный дочерний процесс, что упрощает архитектуру и снижает поверхность атаки.
- Rootless по умолчанию - контейнеры можно запускать от обычного пользователя без root-привилегий, что значительно повышает безопасность.
- Поддержка подов (pods) - Podman нативно поддерживает концепцию «подов» (группа контейнеров, разделяющих сетевое пространство), аналогичную подам в Kubernetes. Это упрощает переход к оркестрации.
- Совместимость с Docker - использует те же OCI-образы, поддерживает Dockerfile (через buildah), и команды практически идентичны: podman run, podman build, podman push и т. д.
- Интеграция с systemd - можно генерировать unit-файлы systemd прямо из работающих контейнеров (podman generate systemd), что удобно для продакшен-сервисов.
Процес установки описан здесь https://podman.io/docs/installation
Основные команды
Команды практически идентичны Docker, так что если знаком с ним - всё будет привычно.
Работа с образами
podman pull nginx # скачать образ
podman images # список локальных образов
podman rmi nginx # удалить образ
podman build -t myapp . # собрать образ из Dockerfile
podman search python # поиск образов в реестре
Работа с контейнерами
podman run -d -p 8080:80 --name web nginx # запустить контейнер в фоне
podman run -it ubuntu bash # запустить интерактивно
podman ps # список запущенных контейнеров
podman ps -a # все контейнеры (включая остановленные)
podman stop web # остановить
podman start web # запустить снова
podman restart web # перезапустить
podman rm web # удалить контейнер
podman rm -f web # принудительно удалить
Информация и отладка
podman logs web # логи контейнера
podman logs -f web # логи в реальном времени
podman exec -it web bash # зайти внутрь работающего контейнера
podman inspect web # подробная информация (JSON)
podman top web # процессы внутри контейнера
podman stats # использование ресурсов (CPU, RAM)
Тома и данные
podman volume create mydata # создать том
podman volume ls # список томов
podman volume rm mydata # удалить том
podman run -v mydata:/data nginx # примонтировать том
podman run -v /host/path:/container/path nginx # bind mount
Сети
podman network create mynet # создать сеть
podman network ls # список сетей
podman run --network mynet nginx # запустить в сети
podman network rm mynet # удалить сеть
Поды (уникально для Podman)
podman pod create --name mypod -p 8080:80 # создать под
podman run -d --pod mypod nginx # добавить контейнер в под
podman pod ps # список подов
podman pod stop mypod # остановить под
podman pod rm mypod # удалить под
podman system prune # удалить всё неиспользуемое
podman system prune -a # удалить вообще всё (включая образы)
A есть ли dockerpodman-compose?
Да, podman-compose существует. Это аналог docker-compose для Podman. Но стоит заметить, что это сторонний проект на Python, который читает стандартные файлы docker-compose.yml и управляет контейнерами через Podman.
Установка:
pip install podman-compose
# или
sudo dnf install podman-compose # Fedora/RHEL
sudo apt install podman-compose # Debian/Ubuntu (в новых версиях)
Основные команды:
podman-compose up -d # запустить все сервисы в фоне
podman-compose down # остановить и удалить
podman-compose ps # список сервисов
podman-compose logs # логи всех сервисов
podman-compose logs -f web # логи конкретного сервиса
podman-compose build # собрать образы
podman-compose restart # перезапустить
podman-compose exec web bash # зайти в контейнер сервиса
Чтобы запустить команду просто создаете файл docker-compose.yml и все.
Преимущества и недостатки
Два самых главных премущества:
Безопасность. Главный козырь. Rootless-режим по умолчанию - контейнеры запускаются от обычного пользователя без root. Нет фонового демона с root-привилегиями, а значит нет единой точки отказа и атаки, как у Docker daemon.
Архитектура без демона. Каждый контейнер - обычный дочерний процесс. Если один контейнер упал, остальные продолжают работать. У Docker при падении демона останавливается всё.
Полное сравние с Docker в таблице, там же можно и заметить недостатки Podman.
| Критерий | Podman | Docker |
|---|---|---|
| Архитектура | Без демона (daemonless), fork-exec модель | Клиент-серверная, требует фоновый демон dockerd |
| Безопасность | Rootless по умолчанию, нет единой точки отказа | Демон работает от root, единая точка атаки |
| CLI-совместимость | Практически идентичен Docker CLI | Стандарт де-факто |
| OCI-образы | Полная поддержка | Полная поддержка |
| Dockerfile | Поддерживается (через Buildah) | Нативная поддержка |
| Compose | podman-compose (неполная поддержка) | Docker Compose (полная поддержка) |
| Поды (Pods) | Нативная поддержка, аналог Kubernetes | Нет нативной поддержки |
| Kubernetes | Генерация YAML из подов (podman generate kube) | Через сторонние инструменты |
| Docker Swarm | Не поддерживается | Полная поддержка |
| systemd | Нативная интеграция, генерация unit-файлов | Ограниченная поддержка |
| Сообщество и экосистема | Растёт, но меньше | Огромное, стандарт индустрии |
| Документация и туториалы | Меньше материалов | Большинство материалов написаны для Docker |
| CI/CD | Поддерживается не везде, требует настройки | Поддерживается практически везде |
| Docker socket | Нет /var/run/docker.sock, совместимость через эмуляцию | Нативный сокет, на него завязаны многие инструменты |
| macOS / Windows | Через виртуальную машину, менее стабильно | Docker Desktop — удобный GUI |
| Linux | Стандарт в RHEL/Fedora/CentOS | Требует отдельной установки |
| Сборка образов | Отдельный инструмент Buildah (гибче) | Встроенный docker build (проще) |
| Работа с реестрами | Отдельный инструмент Skopeo | Встроенные команды |
| Сеть в rootless | Ограничения: порты < 1024, DNS нестабильный | Нет таких ограничений |
| Мониторинг | Контейнеры видны как обычные процессы (ps, top) | Через docker stats или сторонние инструменты |
| Поддержка | Red Hat (долгосрочная) | Docker Inc. |
Заключение: Стоит ли переходить на Podman?
Podman - это не просто «клон Docker», а его эволюция в сторону безопасности и архитектурной чистоты. Отказ от централизованного демона и работа в rootless-режиме делают его идеальным выбором для современных систем, где безопасность стоит на первом месте.