Установка и базовое использование Podman на Ubuntu 20.04
Важно: в примерах используется Ubuntu 20.04. Для других версий пакетов и команды могут отличаться.

Podman — это свободный движок для управления контейнерами, образами, томами и pod’ами (группами контейнеров). Он использует библиотеку libpod для управления жизненным циклом контейнеров и поддерживает форматы образов OCI и Docker. Podman совместим с интерфейсом командной строки Docker и умеет запускать контейнеры без прав root (rootless).
В этом материале вы получите не только инструкции по установке на Ubuntu 20.04, но и практические рекомендации: как управлять образами и томами, как отлаживать контейнеры, как безопасно использовать rootless режим и какие альтернативы существуют.
Что такое rootless контейнеры (одно предложение)
Rootless контейнеры запускаются от обычного пользователя, без прав root, что снижает область возможного ущерба при компрометации контейнера.
Предварительные требования
- Сервер с Ubuntu 20.04, обновлённый до последних пакетов. Это уменьшит риск конфликтов зависимостей при установке.
- Пользователь с привилегиями sudo или root для установки пакетов и добавления репозиториев.
Установка Podman на Ubuntu 20.04 — пошагово
Ниже приведён детальный набор команд, которые добавляют официальный репозиторий Podman, устанавливают пакет и проверяют версию. Объяснение команд даётся после блоков кода.
- Экспорт переменных окружения из файла /etc/os-release — это позволяет использовать ${VERSION_ID} в путях.
. /etc/os-release- Добавьте репозиторий Podman (stable) и импортируйте GPG‑ключ. Эти команды добавляют источник пакетов openSUSE Build Service для Podman и доверяют его ключу.
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add -- Обновите список пакетов и при необходимости обновите систему.
sudo apt update
sudo apt -y upgrade
- Установите podman через apt:
sudo apt install podmanПри запросе подтверждения введите y и нажмите Enter.

- Проверьте установленную версию:
podman versionОжидаемый вывод может выглядеть примерно так (пример из исходного документа): Podman v3.3.1, собранный с Go 1.16 для amd64.

Создание нового пользователя и запуск hello-world контейнера (rootless)
Podman позволяет запускать контейнеры от обычного пользователя. Это полезно в рабочих процессах, где полномочия root нежелательны.
- Создайте пользователя ‘johndoe’ и задайте пароль:
useradd -m -s /bin/bash johndoe
passwd johndoeВведите новый пароль для пользователя johndoe.
- Переключитесь на пользователя и запустите контейнер hello-world:
su - johndoe
podman run hello-worldПри первом обращении Podman может предложить выбрать реестр (например, docker.io). Выберите docker.io и дождитесь окончания загрузки образа.

- Проверка контейнеров и образов локально:
podman ps -a
podman imagesВы увидите контейнер со статусом Exited и образ hello-world.
Базовые команды Podman — управление образами, контейнерами и томами
Podman максимально совместим с Docker CLI, поэтому большинство ваших знаний по Docker пригодится.
- Поиск образов в реестре:
podman search nginxКоманда ищет соответствия в дефолтных публичных реестрах (Docker Hub, Quay и т. п.).
- Скачивание образа nginx:alpine:
podman pull nginx:alpineВыберите docker.io, если будет предложено.

- Просмотр локальных образов:
podman images- Запуск nginx-контейнера на порту 8080:
podman run -it --rm -d -p 8080:80 --name web nginx:alpineКлючи и их назначение:
- -i, –interactive — держать STDIN открытым.
- -t, –tty — выделять псевдотерминал.
- –rm — удалять контейнер при остановке.
- -d — запуск в фоновом режиме (detached).
- -p 8080:80 — проброс порта 8080 на хост к порту 80 в контейнере.
- –name web — имя контейнера.
Проверка запущенных контейнеров:
podman psОткройте в браузере http://192.168.1.15:8080/ (замените IP на адрес вашего сервера). Вы должны увидеть страницу nginx по умолчанию.

- Просмотр логов контейнера:
podman logs web
podman logs --tail 10 web
- Остановка контейнера:
podman stop webЕсли контейнер был запущен с –rm, он удалится автоматически при остановке. Проверьте состояния:
podman ps
podman ps -a- Монтирование тома для замены index.html
Создайте директорию и файл index.html на хосте:
mkdir -p ~/data/
nano ~/data/index.htmlВставьте HTML:
Welcome to Container Nginx
Hello from Nginx container - Managed with Podman
Запустите контейнер с монтированием тома:
podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpineКлюч -v монтирует локальную папку в контейнер.

- Вход внутрь контейнера:
podman exec -it web /bin/shВнутри можно выполнить команды hostname, ip a, route -n и т. д. Выйдите командой exit.

- Очистка: остановка и удаление exited контейнеров
podman stop web
podman rm $(podman ps --filter "status=exited" -q)
Чек‑лист перед деплоем (роль разработчика / админа)
- Разработчик:
- Тестировать приложение локально в контейнере.
- Убедиться, что приложение не требует прав root внутри контейнера.
- Собрать минимальный образ (multi‑stage build по возможности).
- Системный администратор:
- Настроить пользователям возможность запускать rootless контейнеры.
- Проверить, что mount‑пункты и тома имеют корректные права.
- Развернуть мониторинг и логирование.
Шпаргалка команд (Cheat sheet)
- podman run [опции] IMAGE — запуск контейнера
- podman ps [-a] — список запущенных/всех контейнеров
- podman images — локальные образы
- podman pull IMAGE — загрузить образ
- podman logs [–tail N] CONTAINER — логи
- podman exec -it CONTAINER /bin/sh — войти в контейнер
- podman stop CONTAINER — остановить
- podman rm CONTAINER — удалить контейнер
- podman rmi IMAGE — удалить образ
- podman volume ls / podman volume rm — управление томами
Ментальные модели и рекомендации
- Модель «образ как код»: архивируйте варианты Dockerfile/OCI и сборку образов в CI. Образы должны быть воспроизводимы.
- «Минимальные привилегии»: контейнеры не должны запускать процессы от root. Если нужен доступ к ресурсам хоста, используйте ограниченные capabilities.
- «Immutable infrastructure»: контейнеры короткоживущие; для сохранения состояния используйте внешние тома или сервисы.
Когда Podman не лучшая опция (контрпримеры)
- Если вам критически нужен Docker Swarm или интеграция с Docker‑тулчейном, возможно, проще использовать Docker Engine.
- Для некоторых облачных CI/CD платформ поддержка Podman может быть ограничена; проверьте совместимость.
- В окружениях, где уже настроены сложные Docker‑ориентированные утилиты (UI/орchestration), миграция может потребовать доработок.
Альтернативные подходы
- Docker Engine — привычный инструмент с широкой экосистемой и GUI‑интеграциями.
- containerd — лёгкий runtime для интеграции в Kubernetes.
- Buildah — утилита для сборки OCI/Docker образов (комплементарна Podman).
Безопасность и рекомендации для продакшена
- Запускайте контейнеры в rootless режиме, когда это возможно.
- Ограничьте capabilities (например, –cap-drop ALL и добавить только необходимые).
- Настройте SELinux/AppArmor (в зависимости от дистрибутива) для дополнительной изоляции.
- Регулярно обновляйте базовые образы и пакеты в контейнерах.
- Храните секреты вне образов (используйте секреты, vault или переменные окружения, доступные в runtime).
Советы по отладке и частые проблемы
Проблема: контейнер не поднимается, ошибка bind: port already allocated.
- Решение: проверьте, не занят ли порт на хосте (ss -ltnp), или смените порт во флагe -p.
Проблема: при rootless запуске нет доступа к нужным портам <1024.
- Решение: порты <1024 требуют прав root; используйте порты >1024 или перенаправление на хосте.
Проблема: проблемы с правами при монтировании директорий из домашней папки.
- Решение: проверьте uid/gid и права; в rootless режиме UID сопоставления важны.
Проблема: при запуске podman pull возникает ошибка GPG/подключения к репозиторию.
- Решение: убедитесь, что ключ импортирован и соединение не блокируется прокси/фаерволом.
Совместимость и миграция: заметки для Ubuntu 20.04
- Репозиторий devel:/kubic:/libcontainers:/stable предоставляет пакеты, собранные для конкретной версии Ubuntu. При переходе на Ubuntu 22.04 проверьте соответствие ${VERSION_ID}.
- Если вы мигрируете с Docker, команды CLI почти идентичны, но механизмы storage drivers и networking могут отличаться. Протестируйте пакеты на тестовом окружении.
Мини‑методология: как перейти от Docker к Podman за 5 шагов
- Установите Podman параллельно с Docker на тестовой машине.
- Запустите существующие образы через podman run и сравните поведение.
- Пересоберите образы в CI с использованием podman/buildah, проверьте результаты.
- Настройте запуск приложений в rootless режиме и проверьте доступ к ресурсам.
- Обновите документацию команды и переведите CI на podman.
Decision flow: выбирать Podman или Docker?
flowchart TD
A[Нужна интеграция со Swarm/Kubernetes?] -->|Да| B[Docker или containerd]
A -->|Нет| C[Требуется запуск без root?]
C -->|Да| D[Podman 'rootless']
C -->|Нет| E[Оба решения подходят, оцените экосистему]Критерии приёмки
- Podman установлен и отвечает podman version.
- Контейнер nginx запускается и отвечает на запросы по назначенному порту.
- Приложение корректно работает в rootless режиме (если применимо).
- Логи доступны и сохранены в ожидаемом месте.
Примерный план тестов / приемочных сценариев
- Тест 1: podman version возвращает версию без ошибок.
- Тест 2: podman pull nginx:alpine успешно завершён.
- Тест 3: podman run -p 8080:80 nginx:alpine — страница доступна по HTTP.
- Тест 4: podman exec -it web /bin/sh — доступ в контейнер.
- Тест 5: при использовании –rm контейнер удаляется после остановки.
Итоги и дальнейшие шаги
Поздравляем — вы установили Podman на Ubuntu 20.04 и выполнили базовые операции: загрузка образов, запуск контейнеров (включая rootless), проброс портов, монтирование томов и отладка через логи и exec. На следующем этапе можно:
- Изучить Buildah для сборки образов в CI.
- Автоматизировать создание и публикацию образов в реестр (например, quay.io или docker.io).
- Настроить systemd unit для управления долгоживущими контейнерами.
Короткое напоминание: при работе с реальными данными соблюдайте принципы безопасности и хранения секретов.
Ключевые ресурсы и команды, повторно в удобной форме:
- Установка репозитория и ключа (см. раздел «Установка»).
- podman run / pull / images / ps / logs / exec / stop / rm — основные команды.
Конец руководства.
Похожие материалы
Sea of Thieves: баги и проверенные решения
Новые Together Mode и End Event в Microsoft Teams
Загрузочная USB Windows 10 из Linux — как сделать
Как пользоваться Microsoft Teams — полное руководство
Слушать музыку в браузере: выбор и советы