Гид по технологиям

Установка и базовое использование Podman на Ubuntu 20.04

7 min read Контейнеризация Обновлено 25 Nov 2025
Установка Podman на Ubuntu 20.04 — руководство
Установка Podman на Ubuntu 20.04 — руководство

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

Подключение репозитория и установка Podman

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, устанавливают пакет и проверяют версию. Объяснение команд даётся после блоков кода.

  1. Экспорт переменных окружения из файла /etc/os-release — это позволяет использовать ${VERSION_ID} в путях.
. /etc/os-release
  1. Добавьте репозиторий 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 -
  1. Обновите список пакетов и при необходимости обновите систему.
sudo apt update
sudo apt -y upgrade

Добавление репозитория Podman в Ubuntu

  1. Установите podman через apt:
sudo apt install podman

При запросе подтверждения введите y и нажмите Enter.

Установка Podman на Ubuntu 20.04

  1. Проверьте установленную версию:
podman version

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

Проверка версии Podman

Создание нового пользователя и запуск hello-world контейнера (rootless)

Podman позволяет запускать контейнеры от обычного пользователя. Это полезно в рабочих процессах, где полномочия root нежелательны.

  1. Создайте пользователя ‘johndoe’ и задайте пароль:
useradd -m -s /bin/bash johndoe
passwd johndoe

Введите новый пароль для пользователя johndoe.

  1. Переключитесь на пользователя и запустите контейнер hello-world:
su - johndoe

podman run hello-world

При первом обращении Podman может предложить выбрать реестр (например, docker.io). Выберите docker.io и дождитесь окончания загрузки образа.

Запуск hello-world с помощью Podman

  1. Проверка контейнеров и образов локально:
podman ps -a
podman images

Вы увидите контейнер со статусом Exited и образ hello-world.

Базовые команды Podman — управление образами, контейнерами и томами

Podman максимально совместим с Docker CLI, поэтому большинство ваших знаний по Docker пригодится.

  1. Поиск образов в реестре:
podman search nginx

Команда ищет соответствия в дефолтных публичных реестрах (Docker Hub, Quay и т. п.).

  1. Скачивание образа nginx:alpine:
podman pull nginx:alpine

Выберите docker.io, если будет предложено.

Загрузка образов Podman

  1. Просмотр локальных образов:
podman images
  1. Запуск 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 по умолчанию.

Nginx контейнер, доступный по HTTP

  1. Просмотр логов контейнера:
podman logs web

podman logs --tail 10 web

Просмотр логов контейнера в Podman

  1. Остановка контейнера:
podman stop web

Если контейнер был запущен с –rm, он удалится автоматически при остановке. Проверьте состояния:

podman ps
podman ps -a
  1. Монтирование тома для замены 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 монтирует локальную папку в контейнер.

Контейнер Nginx с пользовательским index.html

  1. Вход внутрь контейнера:
podman exec -it web /bin/sh

Внутри можно выполнить команды hostname, ip a, route -n и т. д. Выйдите командой exit.

Вход в контейнер с помощью podman exec

  1. Очистка: остановка и удаление 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 шагов

  1. Установите Podman параллельно с Docker на тестовой машине.
  2. Запустите существующие образы через podman run и сравните поведение.
  3. Пересоберите образы в CI с использованием podman/buildah, проверьте результаты.
  4. Настройте запуск приложений в rootless режиме и проверьте доступ к ресурсам.
  5. Обновите документацию команды и переведите 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 — основные команды.

Конец руководства.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Sea of Thieves: баги и проверенные решения
Gaming

Sea of Thieves: баги и проверенные решения

Новые Together Mode и End Event в Microsoft Teams
Новости

Новые Together Mode и End Event в Microsoft Teams

Загрузочная USB Windows 10 из Linux — как сделать
Linux

Загрузочная USB Windows 10 из Linux — как сделать

Как пользоваться Microsoft Teams — полное руководство
Продуктивность

Как пользоваться Microsoft Teams — полное руководство

Слушать музыку в браузере: выбор и советы
Музыка

Слушать музыку в браузере: выбор и советы

Как добавить табло в видео — быстрый способ
Видео монтаж

Как добавить табло в видео — быстрый способ