![](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 и crunc. Опустим лингвистические злоключения термина рантайм с его применением, но runc и его собрат crunc — это более низкоуровневые рантаймы, которые используются рантаймами и контейнерными движками по типу 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 — зачем?
ссылка на оригинал статьи https://habr.com/ru/articles/825828/
Добавить комментарий