Podman позволяет запускать приложения в контейнерах, собирать образы и управлять несколькими сервисами через командную строку. На Linux он работает без постоянно запущенного центрального демона и поддерживает запуск контейнеров от обычного пользователя. Разберём установку, первые команды, работу с pods и различия, которые заметны при переходе с Docker.

Podman запускает приложения в изолированном окружении
Представьте, что для небольшого сайта нужны Nginx, определённые библиотеки и собственные настройки. При обычной установке всё это попадает в операционную систему сервера. Контейнер позволяет собрать приложение вместе с необходимыми зависимостями и запускать его в предсказуемом окружении.
Podman (Pod Manager) — инструмент для управления такими контейнерами. Он скачивает готовые образы из реестров, создаёт контейнеры, подключает к ним сети и хранилища, а также собирает собственные образы по инструкциям из Containerfile или Dockerfile.
Образ — подготовленный набор файлов и настроек приложения. Контейнер — запущенный экземпляр образа. Например, один образ Nginx можно использовать для нескольких независимых веб-сервисов.
На Linux Podman запускается по запросу пользователя и обходится без постоянно работающего центрального процесса управления контейнерами. Для непосредственного запуска контейнеров он использует компоненты контейнерной экосистемы Linux. Такая архитектура описана в официальной документации Podman.
Rootless-режим ограничивает привилегии контейнеров
Podman умеет создавать контейнеры от имени обычной учётной записи Linux. Этот режим называется rootless. Для него применяются пространства имён пользователей (user namespaces): пользователь root внутри контейнера может соответствовать непривилегированному идентификатору на хосте.
Предположим, разработчик тестирует сторонний веб-сервис на рабочем компьютере. Rootless-запуск позволяет сократить объём системных привилегий, предоставляемых контейнерным процессам. Это уменьшает последствия некоторых ошибок конфигурации и уязвимостей, хотя контейнер по-прежнему разделяет ядро Linux с хостом.
У такого режима есть условия. В Linux могут потребоваться корректные диапазоны идентификаторов в /etc/subuid и /etc/subgid. Права на подключённые каталоги, сетевые настройки и доступ к привилегированным портам тоже зависят от конфигурации системы. Документация по rootless-режиму описывает эти ограничения.
Podman и Docker используют похожие команды, но различаются устройством
Сходство интерфейсов позволяет быстро освоиться тем, кто уже выполнял команды docker run, docker ps и docker build. Для многих повседневных операций достаточно заменить название команды.
| Критерий | Podman | Docker Engine |
| Управление контейнерами | На Linux возможна работа без постоянно действующего центрального демона | Обычно использует фоновый сервис dockerd |
| Работа без прав администратора | Rootless-режим предусмотрен штатно | Rootless-режим также доступен, требует отдельной настройки |
| Группировка контейнеров | Есть собственное понятие pod | Обычно применяются сети и Compose-проекты |
| Файлы сборки | Поддерживаются Containerfile и Dockerfile | Используется Dockerfile |
| Многоконтейнерные приложения | podman compose обращается к внешнему Compose-провайдеру | Docker Compose интегрирован в привычную экосистему Docker |
Совместимость команд и образов упрощает перенос простых сценариев. Для сложных проектов результат зависит от сетей, монтирования файлов, привилегий и интеграций с Docker API. Поэтому наличие одинаковой команды ещё не гарантирует одинаковое поведение всей инфраструктуры.
Особенность podman compose подтверждается руководством проекта: команда запускает внешний инструмент, например Docker Compose или podman-compose. Соответствующий провайдер должен быть установлен.
Установка Podman на Linux, Windows и macOS
На Ubuntu и Debian Podman доступен через стандартный менеджер пакетов:
sudo apt update
sudo apt install podman
podman --versionНа Fedora используется другая команда:
sudo dnf install podman
podman --versionНа Linux контейнеры обычно работают непосредственно с ядром установленной системы. Версия Podman зависит от репозитория дистрибутива.
На Windows 11 и macOS Podman предоставляет локальную командную строку, а Linux-контейнеры работают в отдельной Linux-среде, которой управляет podman machine. В Windows для этого применяется WSL 2 или Hyper-V; на macOS — виртуальная машина. После установки Podman и настройки необходимой виртуализации базовая последовательность выглядит так:
podman machine init
podman machine start
podman infoКоманда machine init создаёт среду для контейнеров, machine start запускает её, а podman info показывает параметры доступного движка. Повторно создавать уже существующую машину не требуется.
Для пользователей, которым удобнее графический интерфейс, существует Podman Desktop. В нём можно просматривать контейнеры, образы и ресурсы виртуальной машины. Порядок установки и системные требования приведены в инструкции Podman и руководстве Podman Desktop для Windows.
Первые команды запускают веб-сервер за несколько минут
Для примера подойдёт Nginx. Podman загрузит официальный образ из Docker Hub и запустит веб-сервер в фоне:
podman run -d --name demo-nginx \
-p 127.0.0.1:8080:80 \
docker.io/library/nginx:alpineЗдесь -d включает фоновый запуск, --name задаёт имя контейнера, а -p сопоставляет локальный порт 8080 с портом 80 внутри контейнера. Адрес 127.0.0.1 ограничивает подключение локальным компьютером. Для проверки откройте http://127.0.0.1:8080 в браузере.
Состояние контейнера, его журналы и остановка проверяются отдельными командами:
podman ps
podman logs demo-nginx
podman stop demo-nginx
podman rm demo-nginxПосле stop контейнер остаётся в списке остановленных экземпляров и доступен для повторного запуска. Команда rm удаляет сам контейнер; скачанный образ обычно остаётся в локальном хранилище.
Собственный образ собирается по Dockerfile или Containerfile
Для сайта с одной статической страницей достаточно создать файл index.html и Containerfile в одной папке. Содержимое Containerfile может выглядеть так:
FROM docker.io/library/nginx:alpine
COPY index.html /usr/share/nginx/html/index.htmlПервая строка выбирает базовый образ Nginx. Вторая копирует страницу в каталог, из которого веб-сервер отдаёт файлы. Из папки проекта выполняются команды:
podman build -t localhost/demo-site:1.0 .
podman run --rm -p 127.0.0.1:8081:80 localhost/demo-site:1.0Сайт будет доступен по адресу http://127.0.0.1:8081. Параметр --rm удалит контейнер после его остановки. Сам собранный образ сохранится и сможет использоваться повторно. Оба формата файла сборки поддерживаются командой podman build.
Pods объединяют несколько контейнеров в одну группу
Podman поддерживает pods — группы контейнеров с общими пространствами имён, включая сетевое пространство по умолчанию. Внутри одного pod приложения могут обращаться друг к другу через localhost, если используют разные порты. Такой принцип знаком по Kubernetes.
Простейший pod с Nginx создаётся двумя командами:
podman pod create --name web-lab -p 127.0.0.1:8082:80
podman run -d --pod web-lab --name web-in-pod docker.io/library/nginx:alpineПорт публикуется при создании pod. Его веб-сервер будет доступен по адресу http://127.0.0.1:8082. Управлять всей группой можно одной командой:
podman pod ps
podman pod stop web-lab
podman pod rm web-labВ проектах с несколькими взаимосвязанными сервисами pod позволяет объединить контейнеры в управляемую единицу. Например, приложение и вспомогательный сетевой процесс могут использовать общее сетевое пространство. Параметры pods описаны в справке podman pod create.
Quadlet связывает контейнеры с systemd на Linux
На Linux работающий сервис часто должен подниматься вместе с системой, перезапускаться после сбоя и показывать журналы через стандартные инструменты администратора. Для этого Podman предлагает Quadlet — декларативные файлы, на основе которых systemd формирует службы.
Например, пользовательский файл ~/.config/containers/systemd/site.container может содержать:
[Container]
Image=docker.io/library/nginx:alpine
PublishPort=127.0.0.1:8083:80
[Install]
WantedBy=default.targetВ системе с пользовательским systemd-менеджером файл преобразуется в службу site.service. После перечитывания конфигурации её можно запустить:
systemctl --user daemon-reload
systemctl --user start site.serviceQuadlet подходит для одиночных сервисов и небольших связанных наборов контейнеров на Linux. Автоматический запуск пользовательских служб после перезагрузки зависит также от настроек пользовательского systemd и времени жизни пользовательской сессии. Документация Quadlet описывает доступные типы файлов, каталоги и поведение служб.
Rootless-права, тома и Compose влияют на перенос проектов
При переходе существующего приложения с Docker чаще всего возникают вопросы вокруг трёх компонентов.
Права доступа к файлам. Приложение может записывать данные в каталог, подключённый с хоста через -v или --mount. В rootless-режиме идентификаторы пользователя внутри контейнера сопоставляются с идентификаторами хоста, поэтому обычных прав записи иногда недостаточно. В системах с SELinux дополнительно учитываются метки безопасности.
Сети и порты. Для rootless-контейнеров используются отдельные механизмы подключения к сети. Поведение проброса портов, адресов хоста и доступа к локальным службам зависит от операционной системы и способа запуска. На Windows соединение проходит также через среду Podman Machine.
Compose и сторонние инструменты. Файл compose.yaml может использоваться с Podman через Compose-провайдер, но совместимость конкретного проекта определяется набором настроек. Инструменты, которые напрямую обращаются к Docker Socket или ожидают особую структуру Docker Engine, могут потребовать адаптации.
Rootless-сценарии подходят для локальной разработки, проверки образов и многих серверных задач. Сервисы с особыми требованиями к устройствам, сетевым интерфейсам или правам ядра могут потребовать дополнительной настройки и оценки безопасности.
Podman занимает собственное место в контейнерной инфраструктуре
Podman объединяет повседневную работу с OCI-образами, запуск без центрального демона на Linux, rootless-режим и управление pods. Для длительно работающих Linux-сервисов предусмотрена интеграция с systemd через Quadlet; на Windows и macOS используется управляемая Linux-среда.
Пределы совместимости с Docker определяются настройками приложения и окружения. В простом проекте запуск может сводиться к нескольким привычным командам. В инфраструктуре с Compose, нестандартными сетями, томами и внешними интеграциями различия становятся заметнее.