Расскажи про свой опыт работы с Podman

Ответ

Мой опыт с Podman связан с его использованием как безопасной и эффективной альтернативы Docker, особенно в средах, где запуск демона от root нежелателен. Я применял его в нескольких ключевых сценариях:

  • Локальная разработка и тестирование: Сборка образов через podman build с использованием стандартных Dockerfile, запуск и управление контейнерами через CLI-команды, аналогичные Docker (podman run, podman ps, podman exec).
  • Rootless-контейнеры: Настройка и запуск контейнеров от обычного пользователя без привилегий, что значительно повышает безопасность.
  • Интеграция с systemd: Генерация unit-файлов через podman generate systemd для управления контейнерами как системными сервисами, что удобно для развертывания на виртуальных машинах.
  • Оркестрация: Использование podman-compose для описания мультиконтейнерных приложений в development-среде.
  • CI/CD пайплайны: Интеграция Podman в сценарии сборки в GitLab CI для создания образов непосредственно на раннерах.

Пример работы:

# Сборка образа
podman build -t my-app:latest .

# Запуск контейнера в фоне с пробросом порта
podman run -d --name my-app -p 8080:80 my-app:latest

# Генерация systemd-юнита для управления
podman generate systemd --new --name my-app > /etc/systemd/system/my-app.service
systemctl daemon-reload

Ключевые преимущества в моей практике: безопасность rootless-режима, полная совместимость с OCI-образами и Docker CLI, а также прямая работа с cgroups v2. Для production-оркестрации образы, собранные через Podman/Buildah, обычно отправлялись в registry и затем развертывались в Kubernetes.

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут специалист подъехал! Расскажу я тебе, как я с этим Podman'ом вожусь, пока ты тут не подумал, что я просто Docker'ом тыкаю, как все эти модные ребята. Слушай сюда, история про безопасность и удобство.

В общем, взял я его на вооружение, когда с демоном от рута заморачиваться надоело — знаешь, эта вечная песня про безопасность, а в итоге дыра в пол-сервера. Podman в этом плане — просто подарок, ёпта. Я его в нескольких сценариях так впендюрил, что он теперь как родной.

  • Локальная разработка и тестирование: Ну, тут всё просто, как три копейки. Пишешь такой же самый Dockerfile, как и для старого доброго Docker'а. Потом вместо docker build пишешь podman build — и пошла писать губерния. Контейнеры запускаешь, останавливаешь, в них залазишь — все команды один в один, только podman вместо docker. Никакой новой учить не надо, что очень удобно, волнение ебать — ноль.
  • Rootless-контейнеры: А вот это, блядь, главный кайф! Запускаешь всё от своей обычной пользовательской учётки, без всяких там sudo. Никакой демон тебе не нужен, который как чёрт в душу матери сидит. Безопасность на уровне, потому что если контейнер сломается и захочет нагадить, то урона он нанесёт ровно в рамках прав твоего юзера, а не рута всего сервера. Просто красота, я тебе скажу.
  • Интеграция с systemd: Тут вообще магия происходит. Накатал ты себе контейнер, он работает. А надо его в систему как сервис встроить, чтобы при перезагрузке сам поднимался. Так Podman тебе unit-файл для systemd сам сгенерирует! Команду podman generate systemd дал — и он тебе готовый конфиг в руки. Осталось его на место положить, демона перечитать, и всё — твой контейнер теперь как родной системный сервис. Удобно до охуенноща, особенно на каких-нибудь виртуалках.
  • Оркестрация: Ну, когда приложение из кучи контейнеров состоит, тут на помощь podman-compose приходит. Описываешь всю эту банду в docker-compose.yml (да-да, тот же самый файл!) и командой одной всё поднимаешь. Для разработки — идеально, не надо городить огород.
  • CI/CD пайплайны: А вот тут я его в GitLab CI впаял. Раннер собирает образ прямо через Podman, без всяких костылей. Потом этот образ в registry пихается, а оттуда его уже Kubernetes хватает. Всё чётко, без лишних телодвижений.

Вот, смотри, как это выглядит в жизни, на пальцах:

# Собираем образ — всё честно, как привык
podman build -t my-app:latest .

# Запускаем контейнер в фоне, порт 8080 на машине прокидываем на 80 внутри контейнера
podman run -d --name my-app -p 8080:80 my-app:latest

# А теперь делаем из него системный сервис, чтобы жил долго и счастливо
podman generate systemd --new --name my-app > /etc/systemd/system/my-app.service
systemctl daemon-reload

А главные плюсы, за которые я его люблю, вот какие: безопасность этого rootless-режима — просто песня, полная совместимость со всеми OCI-образами (то есть любой docker-образ подойдёт), и команды все те же, мозги ломать не надо. И ещё он с cgroups v2 с первого дня нормально работает, без танцев с бубном. Для продакшена, конечно, образы в registry заливаем, а там уже Kubernetes, этот зверь всеядный, их хавает без вопросов. В общем, инструмент — что надо.