Что такое Podman?

читать 6 мин
podmancontainerdocker

Sample Image

В этой статье хотелось бы рассказать про 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.

КритерийPodmanDocker
АрхитектураБез демона (daemonless), fork-exec модельКлиент-серверная, требует фоновый демон dockerd
БезопасностьRootless по умолчанию, нет единой точки отказаДемон работает от root, единая точка атаки
CLI-совместимостьПрактически идентичен Docker CLIСтандарт де-факто
OCI-образыПолная поддержкаПолная поддержка
DockerfileПоддерживается (через Buildah)Нативная поддержка
Composepodman-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-режиме делают его идеальным выбором для современных систем, где безопасность стоит на первом месте.

Что такое Podman? | Frontend Tales