![](https://habrastorage.org/getpro/habr/upload_files/f10/e91/4e4/f10e914e444f521bf8c0004288be16cb.jpeg)
Podman — один из множества инструментов для контейнеризации. Но в отличие от Docker, используется он не часто, даже в тестировании или хотя бы pet-проектах.
При этом, в мире программного обеспечения, чем новее игрушка и чем больше плюшек она обещает относительно предшественников, тем сильнее она облеплена вниманием. Особенно, если заявлена более высокая безопасность из коробки.
Но Podman, будучи на 4 года младше Docker, а также, в теории, фундаментально безопаснее, подобного приёма не получил. Быть может, он его всё-таки заслуживает?
Возможно, к ужасу ваших DevOps и SRE-инженеров, вам стоит уже сейчас бежать и громить выстроенные пайплайны оркестрации кластеров Docker-контейнеров, чтобы менять всё на Podman?!
Не повторяйте в домашних условиях
Привет Хабр, с вами снова Матвей Мочалов из cdnnow!, и, как можно догадаться из лида, я бы хотел продолжить тему контейнеризации, начавшейся со статьи — Docker — не то, чем кажется.
Маленький дисклеймер к лиду:
Возможно, к ужасу ваших DevOps и SRE-инженеров, вам стоит уже сейчас бежать громить выстроенные пайплайны оркестрации кластеров Docker-контейнеров?
Во избежание проклятий и угроз страшной расправы со стороны тех, кто пострадает от принявших это за команду к действию. Не надо, не делайте так. Если что-то работает — не трогай, а если трогать и очень хочется, то делай это аккуратно, постепенно и на тестовом сервере, а не сразу в продакшен.
На этом дисклеймер закончен.
![](https://habrastorage.org/getpro/habr/upload_files/9fa/95f/e25/9fa95fe2567dbd97bd5fea7eb0315d28.png)
Podman, the voyage to the corner of the globe
![](https://habrastorage.org/getpro/habr/upload_files/4be/ecf/08b/4beecf08b52de1fd3aef8b23b5e6b9ed.png)
…Is a real trip. Пожалуй, идеальное звуковое сопровождение для тематики контейнеров, так привязавшейся к морской стилистике.
Как мы уже выяснили, за множеством «магических» слов про контейнеризацию и Docker (где полёт фантазии доходит до того, что контейнеры — это как виртуальные машины и даже круче) — кроется суровая реальность в виде базового функционала UNIX-подобных систем, появившегося ещё аж в конце 70-х.
![Мем с просторов гугла, на деле chroot, функционал которого лежит в основе всех контейнеров, был ещё в 7 версии UNIX, в 1979. Первый выпуск Linux состоялся только в 1991. Мем с просторов гугла, на деле chroot, функционал которого лежит в основе всех контейнеров, был ещё в 7 версии UNIX, в 1979. Первый выпуск Linux состоялся только в 1991.](https://habrastorage.org/getpro/habr/upload_files/140/9e9/aa0/1409e9aa0792648af9c7f820df689d44.png)
А что же у нас такое Podman? Первый коммит в репозитории проекта был сделан ещё 1 ноября 2017 года, а версия 1.0 только 16 января 2019 года (Docker к тому моменту отметил шестилетие). Наверное, в этом новом, свежем инструменте для контейнеризации какой-то другой рантайм вместо runс, возможно, написан на Rust, он сам себя деплоит на сервер, заваривает кофе, переписывает за вас .yaml конфиги и вместо вас выходит на созвоны с коллегами?
![](https://habrastorage.org/getpro/habr/upload_files/a1b/3e6/ca3/a1b3e6ca35b9295d0291262dba9fa5cf.gif)
В рантайме под капотом Podman использует runc. Потом, в 2020 добавился crun (да, очень оригинально) вместо Go, написанный Ред Хатовцами на C. Но в целом же, основа осталась на Go, никаким Rust тут и не пахнет. На созвоны его тоже, увы, не пошлёшь.
Ну и зачем же он тогда нужен?
Как и у любой внезапно появившейся разработки от крупной корпорации, в этом случае Red Hat, ответ на реальную первопричину начала проекта и вопрос {Зачем?} — всегда один:
![](https://habrastorage.org/getpro/habr/upload_files/c5e/172/a1b/c5e172a1bac0d098ed4f03eddda7c0f8.png)
Если кто-то думает, что я преувеличиваю, то почитайте самих же Red Hat, у которых основная аргументация — потому что можем и хотим. Гугл V8 сделала зачем-то, значит и мы можем контейнерами командовать. Чтобы все знали, где контейнеры — там это лицо с красной федорой.
![](https://habrastorage.org/getpro/habr/upload_files/e82/ad9/251/e82ad92510388878c52b25ac1352c838.png)
Если же переходить от первопричин к тому, чем конкретно оправдывали жизнеспособность этой затеи — это в первую очередь легковесность и простота проекта. Docker относительно Podman представляет из себя махину размером с кита не только на логотипе, но и по сути. Ведь он несёт в себе целую экосистему, необходимую не только для создания и запуска контейнеров, но и для их оркестрации — Docker Swarm, который некоторые зачем-то используют вместо Kubernetes и OpenShift.
Podman же изначально разрабатывался так, что он будет использоваться в комбинации с k8s и OpenShift.
Правда, по иронии, остальная индустрия окромя Red Hat про это оказалась не в курсе и по сей день продолжила использовать Docker в связке с k8s и OpenShift. Это при том, что в RHEL 8, вышедшей ещё в 2019, Podman сменил Docker, а в k8s от поддержки Docker отказались ещё в 2020.
Стоп, отказались от Docker?
![](https://habrastorage.org/getpro/habr/upload_files/01a/a23/9e9/01aa239e9eb104a8daa4e3282ea29f95.png)
Но… каким же образом тогда все продолжают его и дальше использовать с k8s и OpenShift?
Во-первых, Podman, который должен был прийти на замену Docker в деле создания и тестирования контейнеров, которые уже дальше скармливаются инструментам их оркестрирования — почти полностью совместим с Docker, начиная от синтаксиса консольных команд и заканчивая непосредственно контейнерами, которые зачастую из коробки запускаются без дополнительных изменений в них.
Во-вторых, прекращение поддержки коснулось только рантайма — модуля, который непосредственно запускает контейнеры в работу, в его роли выступает CRI-O. И нет, он не заменил рантаймы runc и crun. Опустим лингвистические злоключения термина рантайм с его применением, но runc и его собрат crun — это более низкоуровневые рантаймы, которые используются рантаймами и контейнерными движками по типу CRI-O и ему подобными.
Но отчего же всё-таки то одно, то другое называют то tool, то runtime, то engine, как на картинке ниже? Потому что. Просто, потому что.
![](https://habrastorage.org/getpro/habr/upload_files/35e/e32/ff9/35ee32ff99e9b9133d06cf299ca9b790.png)
Почему Docker победил?
Для начала, не смотря на любовь мира IT сломя голову бежать использовать всё новое, а также по чистой случайности накачивать стоимость акций новинки (точно-точно не по стратегии pump- and-dump, не привлекая внимания санитаров регулирующих органов) рынок — есть рынок. IT или не IT, а преимущество первопроходца (FMA) есть везде.
COBOL, до сих пор живущий в фундаменте мировой банковской системы ещё с начала 60х годов прошлого века — передаёт привет в напоминание об этом.
![Компьютерный департамент General Electric 1961-1965 год. Компьютерный департамент General Electric 1961-1965 год.](https://habrastorage.org/getpro/habr/upload_files/384/993/dcb/384993dcb84906b854c49f44f954a17a.png)
Да, концептуально Docker не был первым решением, но он был первым инструментом, что объединил в себе целую экосистему для контейнеризации под одной оберткой. Удобной, как для отдельно взятого разработчика, так и для интернациональной мегакорпорации зла добра, у которой один дата-центр может потреблять электричества и воды, как небольшое африканское государство. И вот, с появления Docker в 2013 до первого релиза Podman v0.3.5, прошло уже 5 лет, а к 1.0 в 2019, аж 6.
И в который раз сделаю акцент на том, что Docker — это экосистема. Экосистема сервисов построенных вокруг него, экосистема сборки и деплоя, экосистема множества образов на все случаи жизни, которые пусть в большинстве своём и будут совместимы с Podman, но зачем заморачиваться, если и так работает? Да, кодовая база у него побольше из-за того, что к проекту привинчен Docker Swarm для оркестрации контейнерами, но это проблема по большей части разработчиков Docker, а не их конечных пользователей. Которые под Windows, MacOS и FreeBSD готовы мириться даже с тем, что он запускается в виртуалке. А как мы выяснили в прошлом посте, в MacOS на ARM устройствах до недавнего времени запускался в виртуалке внутри виртуалки.
К тому же, Podman, банально не предлагает ничего радикально нового относительно Docker.. Чем-то “модным”, как тот же Rust, или выходящие из его тени Zig c Nim, он тоже не щеголяет. Разве что с FreeBSD отношения у него получше, только вот у сообщества Фряхи, со всем, что называется контейнеры, а не «jail» - отношения не очень.
Эээксперименты
![Взаимоотношения SRE-инженера с контейнерами, обвалившими ему половину микросервисов. Взаимоотношения SRE-инженера с контейнерами, обвалившими ему половину микросервисов.](https://habrastorage.org/getpro/habr/upload_files/e02/6f7/157/e026f7157593786d6b3d1ae12d31449e.gif)
Попробуем запустить для примера Docker-контейнер с помощью Podman, для этого нам потребуется совершение следующих, чрезвычайно сложных и опасных для жизни действий:
```bash
podman pull docker.io/library/hello-world
podman run --rm docker.io/library/hello-world
```
Как можно заметить на практике, синтаксис Docker и Podman практически идентичен.
И да, зачастую больше ничего не требуется, чтобы запустить Docker-образ в Podman. Просто скачать и никаких дополнительных телодвижений. И да, я знаю, что за пределами «Hello World», в крупном проекте может и возникнет множество проблем и «сюрпризов», но они неизбежны и в рамках использования Docker-контейнеров с самим же Docker.
И кажется что-то мы упускаем, ах да, безопасность! Podman позиционируется как более безопасный, потому что у него нет собственного демона для его запуска и поддержания работы. А ещё по умолчанию ему не требуются рут-права. Но как же тогда он запускается, сам себе демон, что-ли? Нет, просто, в отличие от Docker, Podman использует не демона, а ДЕМОНЮГУ, на миллион+ строк кода, имя которому Сот… SystemD.
![](https://habrastorage.org/getpro/habr/upload_files/cdc/f25/dc4/cdcf25dc4fdd645de2ce3e321fa39dd0.png)
И который имеет рут-права по умолчанию, ещё и как PID1 процесс, но зато это тоже разработка Red Hat! А поэтому, мы будем это решение гордо называть rootless!
Кроме того, отсутствие необходимости в рут-правах обусловлено использованием пространств имён. За этим мистическим шаманским словосочетанием из мира Линуксоидов кроется такая же простая концепция, как у chroot и pivot-root. Но вместо того, чтобы сделать абстракцию и внутри файловой системы хоста создать ещё одну, изолированную корневую папку, пространства имён заходят ещё дальше. Они создают также своё древо процессов, позволяют отдельно регулировать выделяемую для запускаемых из-под них процессов память, нагрузку на процессор, сеть и т.д.
В общем, чтобы запустить контейнер, Podman для начала сам запускается в контейнере пространств имён, который если говорить ещё проще, представляет из себя создание временной папки, только в рамках которой у него есть свои собственные рут-права.
Правда, фишка эта уже давно не уникальна, и в 2020 с версии 20.10 Docker также получил возможность запускаться в rootless режиме. И да, точно так же через использование пространств имён.
Из хорошего можно отметить, что Podman, на удивление, неплохо себя чувствует под FreeBSD, в то время как Docker для FreeBSD в нативном-виде скорее мёртв, чем жив. Подтверждением этому являются безуспешные попытки несчастных экспериментаторов запустить на нём что-то актуальное, а также рассылка внутри проекта Фряхи где, как оказывается, на 2023 год команды двух проектов даже не контактировали друг с другом.
![](https://habrastorage.org/getpro/habr/upload_files/e90/d32/e61/e90d32e61214395deec86e2ea307b9e2.png)
Выводы
![](https://habrastorage.org/getpro/habr/upload_files/eff/7fa/e3b/eff7fae3bdf6d8450958a7a92b51ca5d.png)
Docker, несмотря на все старания Red Hat как был, так и остаётся предпочтением большинства пользователей инструментов контейнеризации. Куда чаще можно встретить любителей поедать кактус Docker Swarm, чем тех, кто хотя бы в домашних условиях использует Podman.
Мы, в cdnnow! — не исключение из этого правила, работа с контейнерами у нас ведётся с помощью привычного всем Docker, а дальше они уже бороздят просторы интернета под управлением k8s. Да и честно говоря, из всего моего опыта общения с коллегами, я ещё не встречал тех, кто бы использовал Podman, хотя я старался и спрашивал напрямую при первой же возможности.
Если такие есть — отзовитесь, пожалуйста, в комментариях. Дайте знак, что вы реальны. А также вопрос к тем, кто использует Docker Swarm вместо k8s и OpenShift — зачем?
Комментарии (22)
nalgeon
01.07.2024 13:11+16Если бы автор так яростно не кривлялся, статья была бы лучше.
cdnnow_writer
01.07.2024 13:11+5Спасибо за замечание, у меня самого было ощущение что перебор.
В процессе поиска золотой середины, постараюсь сделать следующий материал более сбалансированным, если читателям так будет больше по душе.
benjik
01.07.2024 13:11+2Пол года пользуюсь podman + podman desktop (компания получила "письмо счастья" от Docker inc с просьбой купить подписочку всем сотрудникам с Docker Desktop и все пересели на альтернативы).
Есть ещё некоторые шероховатости в запуске yaml'ов docker-compose через podman compose, но в целом для большинства задач подходит отлично.
Самый жырный минус пока что - не получится запустить в podman проект docker compose, в котором контейнерам назначены gpu-ресурсы. Просто не умеет в такой формат. Так что приходится извращаться с общими сетями для запуска какой-нибудь ollama и open-webui локально.
cdnnow_writer
01.07.2024 13:11+3Вечное проклятие UNIX-подобных систем, GPU-вычисления. Надеюсь что в скором времени это допилят и прокинуть доступ к GPU будет также просто и на Docker, чтобы окончательно забыть про "письма счастья".
Tony-Sol
01.07.2024 13:11Самый жырный минус пока что - не получится запустить в podman проект docker compose
podman-compose или standalone бинарь docker-compose
Команда `podman compose` по сути врапппер для провайдера compose функционала (дока)
Johan_Palych
01.07.2024 13:11+1в то время как Docker для FreeBSD в нативном-виде скорее мёртв, чем жив
Использование Docker с FreeBSD через bhyve(реализация, аналогичная MacOS/xhyve, но на FreeBSD/bhyve)
https://www.bsdstore.ru/ru/articles/docker_on_freebsd.html
Podman желательно использовать с buildah и skopeo
Когда в конце мая заблокировали Docker Hub, я и не заметил. Настроено проксирование через mirror.gcr.io.
https://github.com/containers/podman/blob/main/test/registries.confcdnnow_writer
01.07.2024 13:11Да, по сути решение получается и как под Виндой, и МакОСью, но я скорее о полностью нативном решение, в виртуалке не нуждавшемся.
Впрочем, если bhyve и так удовлетворяет потребности большинства для развёртывания Docker, то не удивительно, почему нативная версия в не самом живом состояние.
leahch
01.07.2024 13:11Freebsd, увы, мертв уже лет 15 как.
А podman я пользую, есть некоторые моменты неприятностей, запуск systemd внутри контейнера, но вроде бы сейчас все нормально.
jsirex
01.07.2024 13:11А мне очень понравилась их новая интеграция контейнеров с systemd - пишешь systemd unit который запускает контейнер: https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html
blindmen
01.07.2024 13:11Держу на подмане пачку домашних контейнеров(ha+обвязка,minecraft, и прочее) хорошая штука когда для k3s ресурсов маловато.
greengo_go
01.07.2024 13:11+2Ceph на podman прекрасно бегает. Не то чтоб осознанный выбор, просто на момент первого знакомства, самый актуальный вариант был именно по такому варианту запуска.
amironov
01.07.2024 13:11Но как же тогда он запускается, сам себе демон, что-ли? Нет, просто, в отличие от Docker, Podman использует не демона, а ДЕМОНЮГУ, на миллион+ строк кода, имя которому Сот… SystemD.
Как это относится к скачиванию и запуску контейнеров? Для работы podman под пользователем не нужно дополнительных сервисов и прав.
я ещё не встречал тех, кто бы использовал Podman
Для разработки использую и на линукс, и на виндовс, потому как проще поставить.
DieSlogan
01.07.2024 13:11+1Использую на домашнем Docker, потому что у него есть в комплекте тот же Scout и есть docker compose. Не знаю аналогов Docker compose в Podman. Вот чтобы compose, но без swarm
dmitriyshepelev
01.07.2024 13:11Nerdctl - это не совсем podman, но позволяет работать с compose-файлами без набора инструментов от docker. У себя на проекте перевёл сборку образов на podman. Пришлось правда сделать свою сборку sbt-плагина, для сборки образов. И не могу сказать, что работает сильно стабильнее докера.
man4j
01.07.2024 13:11+1swarm отличная и удобная штука для небольших проектов. Особенно в условиях, когда кубер начал сдуваться в России с огромной скоростью. Иностранных компаний которые его пушали нет, спецы разбежались, короче кубер остался в прошлом на мой взгляд.
Resursator
01.07.2024 13:11По мелочи пробовал запускать всякое в подмане, столкнулся с тем, что не работает проброс портов средствами самого подмана. Приходилось использовать виндовую утилиту netsh для этого, пока я не столкнулся с тем, что она не может пробрасывать udp траффик.. в итоге пришлось городить велосипед с использованием опенсорсной утилиты sudpipe. В общем, в итоге всё работало довольно некрасиво (но работало, да), так в итоге докером и пользуюсь.
Tony-Sol
01.07.2024 13:11Недавно как раз на macos переехал с Docker Desktop (который homebrew cask) на docker (который formula) в связке с podman и limactl, и Podman Desktop в качестве «красивого окошка» (к моему сожалению Podman Companion как будто перестали развивать).
В целом полет нормальный, потерял разве что в каких-то свистелках, типа cli-plugins (и то их можно доставить дополнительно (можно добавить их в homebrew-core и станет сильно проще)), но и не сказать чтобы прям выиграл.
Могу сказать что стало удобнее делить окружения и управлять выделенными ресурсами - например minikibe/kind запускаю только в podman или например авторизацию в приватные registry храню только в lima машине.
В целом, как по мне, это было в довольно развлекательно-образовательно, потраченного времени не жалею.
Tony-Sol
01.07.2024 13:11Недавно как раз на macos переехал с Docker Desktop (который homebrew cask) на docker (который formula) в связке с podman и limactl, и Podman Desktop в качестве «красивого окошка» (к моему сожалению Podman Companion как будто перестали развивать).
В целом полет нормальный, потерял разве что в каких-то свистелках, типа cli-plugins (и то их можно доставить дополнительно (можно добавить их в homebrew-core и станет сильно проще)), но и не сказать чтобы прям выиграл.
Могу сказать что стало удобнее делить окружения и управлять выделенными ресурсами - например minikibe/kind запускаю только в podman или например авторизацию в приватные registry храню только в lima машине.
В целом, как по мне, это было в довольно развлекательно-образовательно, потраченного времени не жалею.
Himura
01.07.2024 13:11Как только Docker Desktop стал платным и коллеги отправились в путешествие в разные стороны (кто-то к менеджменту за лицензиями, кто-то к Rancher), я перешёл на Podman в WSL на своей рабочей машине, и до сих пор на нём сижу, не испытывая серьезных проблем. Когда появился Podman Desktop, стало вообще кайфово. Даже очень сложные компоузы от коллег прекрасно запускаются и работают.
Испытываю весьма теплые чувствства к redhat, мне кажется они много прекрасного делают
vanzhiganov
На мой взгляд проблема перехода с docker на podman как раз в отсутствии строить кластер встроенными средствами, как docker swarm.
Так и получается, у тебя ничего (просто контейнер), либо чугунный мост в виде кубера - что как бы не очень удобно.
cdnnow_writer
Справедливое замечание, пусть и корявый, но готовый инструмент оркестрации из коробки, для большей части простых задач будет скорее всего быстрее и проще, чем развёртка полноценного и самостоятельного.
Wendor
Подскажите, а в чем кривость swarm?
Использую его как простой и легковесный способ поднять кластер и настроить деплой с хелфчеками.