# Podman

> Инструмент для запуска контейнеров без демона и без прав root, совместимый с командной строкой Docker; развивается Red Hat.

Источник: https://llmdocs.ru/wiki/podman/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Разработчик**: Red Hat и сообщество (проект Containers)
- **Первый выпуск**: 2018 (1.0 — январь 2019)
- **Язык**: Go
- **Лицензия**: Apache 2.0
- **Архитектура**: без демона (fork/exec), rootless
- **Совместимость**: CLI Docker, образы OCI, Docker API
- **Связанные инструменты**: Buildah, Skopeo, CRI-O
- **Платформы**: Linux; macOS и Windows через виртуальную машину
**Podman** (*Pod Manager*) — программа для сборки, запуска и управления контейнерами в Linux, альтернатива [Docker](https://llmdocs.ru/wiki/docker.md). Его главные отличия — отсутствие постоянно работающего демона и запуск контейнеров от обычного пользователя без прав root (rootless). Команды Podman повторяют Docker настолько точно, что многие пользователи просто делают `alias docker=podman`. Podman по умолчанию входит в Red Hat Enterprise Linux, Fedora и CentOS Stream.

## История

Podman вырос в Red Hat из проекта libpod в 2017–2018 годах как часть набора инструментов, разбирающих монолитный Docker на независимые части: **Buildah** — сборка образов, **Skopeo** — копирование и проверка образов в реестрах, **CRI-O** — среда выполнения для [Kubernetes](https://llmdocs.ru/wiki/kubernetes.md), **Podman** — запуск контейнеров.[1] Версия 1.0 вышла в 2019 году. С версии 2.0 Podman предоставляет REST API, совместимый с Docker, а Podman Desktop — графический интерфейс для macOS и Windows.

## Архитектура

| | Docker | Podman |
|---|---|---|
| Демон | `dockerd` работает постоянно от root | нет: каждый контейнер — дочерний процесс команды |
| Права | по умолчанию root (есть rootless-режим) | rootless по умолчанию для пользователя |
| Поды | нет (только в Compose/Kubernetes) | встроенные поды, как в Kubernetes |
| Автозапуск | политика restart демона | [systemd](https://llmdocs.ru/wiki/systemd.md) через Quadlet |
| Сборка | BuildKit | Buildah (встроен) |

Без демона нет единой точки отказа и привилегированного сокета: доступ к `/var/run/docker.sock` фактически равен правам root на хосте, а у Podman такого сокета по умолчанию нет. Каждый контейнер запускается через небольшой процесс-монитор `conmon` и низкоуровневую среду выполнения (`crun` или `runc`), совместимую со стандартом OCI.[2]

## Rootless-контейнеры

В rootless-режиме Podman использует пространства имён пользователей (user namespaces, см. [Namespaces и cgroups](https://llmdocs.ru/wiki/namespaces-cgroups.md)): root внутри контейнера отображается на непривилегированного пользователя хоста через диапазоны из `/etc/subuid` и `/etc/subgid`.[3] Даже при выходе из контейнера злоумышленник получит только права этого пользователя. Сеть в rootless-режиме обеспечивает `pasta` (раньше `slirp4netns`). Ограничения: без дополнительных настроек нельзя слушать порты ниже 1024, а файлы в смонтированных томах могут получить неожиданные UID.

## Основные команды

```bash
podman run -d --name web -p 8080:80 docker.io/library/nginx:alpine
podman ps
podman logs -f web
podman build -t myapp .              # тот же Dockerfile (Containerfile)
podman images
podman push myapp registry.example.com/myapp:1.0
```

Короткие имена образов (`nginx`) Podman разрешает по списку реестров в `/etc/containers/registries.conf`; надёжнее всегда указывать полный адрес, например `docker.io/library/nginx`. Файл сборки может называться `Containerfile`, но `Dockerfile` тоже подходит, включая [многоэтапную сборку](https://llmdocs.ru/wiki/multi-stage-build.md).

## Поды

Как и в Kubernetes, под — группа контейнеров с общим сетевым пространством имён:

```bash
podman pod create --name app -p 8080:80
podman run -d --pod app docker.io/library/postgres:17
podman run -d --pod app myapp
podman kube generate app > app.yaml   # манифест Kubernetes
podman kube play app.yaml             # и обратно
```

Это удобно для локальной разработки: связку контейнеров можно отладить на ноутбуке и получить заготовку манифеста для [Pod](https://llmdocs.ru/wiki/pod.md) в кластере.

## Интеграция с systemd

Для сервисов на сервере Podman предлагает **Quadlet**: контейнер описывается декларативным файлом `.container`, из которого systemd сам генерирует юнит.[4]

```ini
# ~/.config/containers/systemd/web.container
[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
AutoUpdate=registry

[Install]
WantedBy=default.target
```

После `systemctl --user daemon-reload` контейнер управляется как обычная служба: запуск при загрузке, перезапуск при сбое, логи в journald. `podman auto-update` обновляет такие контейнеры при появлении новой версии образа.

## Совместимость с Docker

- `podman compose` вызывает docker-compose или podman-compose; [Docker Compose](https://llmdocs.ru/wiki/docker-compose.md)-файлы в большинстве случаев работают без изменений.
- Включив сокет (`systemctl --user enable --now podman.socket`), можно направить на Podman инструменты, ожидающие Docker API, через `DOCKER_HOST`.
- На macOS и Windows Podman, как и Docker Desktop, запускает Linux в виртуальной машине (`podman machine`).

Отличия проявляются в деталях: сетевые настройки, поведение томов в rootless-режиме и отсутствие Docker Swarm.

## См. также

- [Docker](https://llmdocs.ru/wiki/docker.md)
- [Контейнеризация](https://llmdocs.ru/wiki/containerization.md)
- [Namespaces и cgroups](https://llmdocs.ru/wiki/namespaces-cgroups.md)
- [Kubernetes](https://llmdocs.ru/wiki/kubernetes.md)

## Источники

1. [Podman — официальный сайт](https://podman.io/)
2. [Podman Documentation](https://docs.podman.io/)
3. [Podman — Rootless tutorial](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md)
4. [podman-systemd.unit(5) — Quadlet](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html)
5. [Buildah — официальный сайт](https://buildah.io/)
