Podman: установка и базовые команды на Rocky Linux

Podman — бездемонный OCI-совместимый движок контейнеризации, который можно использовать вместо Docker. В этой статье показано, как установить Podman на Rocky Linux, искать и скачивать образы, запускать и управлять контейнерами и подами, а также приведены советы по безопасности, миграции и короткие чеклисты для ролей.
Введение — что такое Podman
Podman — это свободная и открытая платформа для контейнеров, созданная для разработки, управления и запуска контейнеров и подов в среде Linux. Проект развивала компания Red Hat и активное сообщество с 2018 года.
Ключевые особенности в одну строку:
- Бездемонная архитектура: Podman не требует постоянно работающего фонового процесса (демона).
- OCI-совместимость: может работать с теми же образами, что и Docker.
- Работа без root: поддержка запуска контейнеров от непривилегированных пользователей.
Важно: под “бездемонная” архитектурой понимается отсутствие единого системного демона, уменьшающего точку отказа и улучшая безопасность.
Предварительные требования
- Сервер на базе Rocky Linux.
- Непривилегированный пользователь, имеющий возможность выполнять sudo для административных команд.
- Система должна быть обновлена:
$ sudo dnf update
Важно: обновление пакетов перед установкой минимизирует конфликты зависимостей.
Установка Podman
Podman входит в модуль container-tools вместе с Buildah и Skopeo. Для Rocky Linux 8 рекомендован модульный метод установки.
Установите набор инструментов контейнеризации:
$ sudo dnf module install container-tools
Проверьте установленную версию:
$ podman --version
podman version 3.2.3
Поиск и загрузка образов
Чтобы найти образ Nginx в реестре, используйте:
$ podman search nginx

В выводе отображается реестр, имя образа и краткое описание.
Чтобы скачать образ, используйте один из вариантов:
$ podman pull docker.io/library/nginx
OR
$ podman pull nginx
Просмотреть загруженные образы:
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Запуск контейнеров
Запустим контейнер Nginx в фоновом режиме и назовём его webserver:
$ podman run -d --name webserver nginx
Можно запустить ещё один контейнер на том же образе с другим именем:
$ podman run -d --name webserver2 nginx
Один образ может служить основой для произвольного числа контейнеров.
Список и остановка контейнеров
Список запущенных контейнеров:
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver
35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Остановка контейнера:
$ podman stop webserver
webserver
Проверка статуса:
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Чтобы увидеть все контейнеры, включая остановленные, используйте флаг -a:
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver
35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Запуск остановленного контейнера
$ podman start webserver
webserver
Проверка:
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver
35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Удаление контейнера
Перед удалением контейнер должен быть остановлен:
$ podman stop webserver2
Удаление контейнера:
$ podman rm webserver2
Можно принудительно удалить запущенный контейнер флагом –force:
$ podman rm webserver2 --force
35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Принудительное завершение (kill)
Остановка и принудительное завершение отличаются: stop выполняет аккуратное завершение, kill отправляет сигнал, который может привести к потере данных.
Пример принудительного завершения с SIGKILL:
$ podman kill -s 9 webserver2
Чтобы убить все контейнеры, используйте –all или -a; чтобы только последний — –latest или -l.
Удаление образа
Удаление одного образа:
$ podman rmi registry.redhat.io/rhel8/rsyslog
Удаление нескольких образов через пробел:
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Удаление всех образов:
$ podman rmi -a
Просмотр логов контейнера
Просмотр логов:
$ podman logs webserver
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
......
Ограничить вывод последними 5 строками:
$ podman logs --tail=5 webserver
2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64
2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144
2021/10/05 10:13:52 [notice] 1#1: start worker processes
2021/10/05 10:13:52 [notice] 1#1: start worker process 23
Добавить отметки времени:
$ podman logs -t webserver
2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
.....
Инспекция контейнеров
Команда inspect выводит подробную информацию в формате JSON:
$ podman inspect webserver
[
{
"Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59",
"Created": "2021-10-05T09:25:01.784949744Z",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
"State": {
"OciVersion": "1.0.2-dev",
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 4423,
....
Чтобы получить конкретное поле, используйте –format. Пример: время старта контейнера:
$ podman inspect webserver --format '{{.State.StartedAt}}'
2021-10-05 10:13:52.794806322 +0000 UTC
Доступ к Shell контейнера
Получить интерактивный терминал внутри контейнера:
$ podman exec -it webserver2 /bin/bash
Поды — уникальная особенность Podman
Podman поддерживает Pods — группу контейнеров, которые разделяют сетевой и/или PID неймспейсы и управляются как единое целое. Это схоже с концепцией Pod в Kubernetes.
Создадим pod:
$ podman pod create --name mypod
Запустим контейнеры внутри pod:
$ podman run --pod mypod --name myimage1 image:latest
$ podman run --pod mypod --name myimage2 diff-image:latest
Управление pod и контейнерами внутри него — те же привычные команды:
$ podman kill mypod # Kill all containers
$ podman restart mypod # Restart all containers
$ podman stop mypod # Stop all containers
$ podman pod ps # List all pods
$ podman pod top mypod # Display running processes in a pod
$ podman pod inspect mypod # Inspect a Pod
$ podman pod rm mypod # Remove the pod
Когда Podman подходит, а когда нет
Когда использовать Podman:
- Нужна работа без системного демона и минимизация прав доступа.
- Требуется совместимость с OCI-образами и локальная разработка контейнеров.
- Планы по переходу на Kubernetes (Pods упрощают модель).
Когда Podman может не подойти:
- Если ваш рабочий процесс жёстко привязан к Docker-демону или специфичным API докера, которые не покрываются совместимостью.
- В некоторых enterprise-интеграциях требуется Docker Engine из-за поставщика ПО.
Альтернативы
- Docker Engine — наиболее распространённый движок, удобен для начинающих и широкого экосообщества.
- containerd — более «низкоуровневый» компонент, используется внутри Docker и Kubernetes.
- Buildah/Skopeo — дополнительные инструменты для сборки и работы с образами (часть набора container-tools).
Советы по миграции с Docker
- Podman совместим с OCI-образами, поэтому большинство образов Docker можно запускать без изменений.
- Для совместимости CLI можно установить пакет podman-docker, который предоставляет команду docker, перенаправляющую вызовы к Podman.
- Учтите различия в поведении демона и systemd-интеграции: некоторые сценарии, завязанные на Docker daemon, потребуют адаптации.
Меры безопасности (жёсткие советы)
- Запускайте контейнеры от непривилегированных пользователей, когда это возможно (rootless containers).
- Ограничивайте возможности (capabilities) и монтирования только необходимыми правами.
- Используйте подписанные образы и проверку целостности (при наличии инфраструктуры подписей).
- Минимизируйте слои в образах и используйте минимальные базовые образы.
- Применяйте политики SELinux/AppArmor и сетевые политики для ограничения взаимодействий.
Ролевые чек-листы
Разработчик:
- Собирать и тестировать образы локально.
- Запускать контейнеры в rootless-режиме для тестов.
- Писать лёгкие Dockerfile/Containerfile и проверять размер образа.
Оператор/DevOps:
- Настроить системные обновления и мониторинг Podman-сервисов.
- Автоматизировать загрузку/удаление образов и ротацию логов.
- Настроить резервирование и политики хранения образов.
SRE/Безопасность:
- Настроить сканирование образов на уязвимости.
- Ограничить сетевые и системные привилегии контейнеров.
- Проверять соответствие политик SELinux и namespace.
Быстрый SOP / Playbook для типичных задач
- Установка: проверить dnf update → dnf module install container-tools.
- Скачать образ: podman pull <образ>.
- Запустить контейнер: podman run -d –name <имя> <образ>.
- Просмотреть логи: podman logs -t –tail=100 <имя>.
- Остановить и удалить: podman stop <имя> && podman rm <имя>.
- Очистка образов: podman rmi -a.
Критерии приёмки
- Контейнер успешно запускается и отвечает на ожидаемые запросы.
- Логи доступны и содержат отметки времени (если требуется).
- Образ хранится в реестре и доступен для развёртывания.
- При запуске в rootless-режиме контейнеры не требуют прав root в хосте.
Маленькая методология принятия решений (heuristic)
Если важна безопасность и отсутствие демона → выбирайте Podman. Если нужен конкретный интегрированный пайплайн, завязанный на Docker Engine → оцените затраты на адаптацию.
Мини-глоссарий (1 строка каждый)
- Контейнер: изолированный экземпляр приложения с зависимостями.
- Образ (image): шаблон для создания контейнера.
- Pod: группа контейнеров, управляемая как единое целое.
- Rootless: режим запуска контейнеров без root-привилегий.
Decision flowchart (Mermaid)
flowchart TD
A[Нужна контейнеризация?] --> B{Требуется демон?}
B -- Да --> C[Docker Engine или containerd]
B -- Нет --> D[Podman]
D --> E{Нужна совместимость Docker CLI?}
E -- Да --> F[Установить podman-docker]
E -- Нет --> G[Использовать Podman напрямую]Заключение
Это руководство покрывает базовую установку и основные команды Podman на Rocky Linux: поиск и загрузку образов, запуск и управление контейнерами и подами, просмотр логов и инспекцию. Podman подходит для сценариев, где важна безопасность и отсутствие единой точки отказа, а также удобен при интеграции с Kubernetes.
Если у вас остались вопросы по конкретным сценариям или вы хотите мигрировать готовую инфраструктуру с Docker — опишите ваш случай, и можно разработать пошаговый план миграции.
Wichtig: если вы используете Podman в продакшне, протестируйте политики безопасности и резервные сценарии до переноса нагрузки.
Похожие материалы
Discord не обновляется в Windows 10 — быстрые исправления
Экспорт контактов iPhone в Windows 10
Тыловые 5.1 колонки не работают после Windows 10
Как недорого работать в дороге — гаджеты и планы
Где находятся файлы конфигурации Apache