Хотя Docker является стандартом в области контейнеров, мы начинаем понимать, почему такие альтернативы, как Podman, быстро становятся популярной заменой для разработки на основе контейнеров. Хотя Docker существует уже почти 10 лет и стандартизировал контейнеризацию, Podman имеет ряд огромных преимуществ, а именно: он «без демонов» (не нуждается в systemd
или любой другой службе для работы в фоновом режиме). Существуют ли альтернативы Docker? Да, и давайте рассмотрим, как можно начать работу с Podman, Buildah и Skopeo.
Введение
Docker был новатором в том, как разработчики создают и развертывают приложения, и это хороший инструмент. Docker умеет все: создавать образы, выталкивать/вытаскивать образы из реестров и запускать образы. Однако Docker является огромным монолитным приложением и полагается на тяжелого демона, который, если в какой-то момент выйдет из строя, все дочерние процессы станут недоступными.
Именно с этой целью был разработан Podman, контейнерный движок с открытым исходным кодом без демона и без корней. Podman работает с помощью процесса runC container runtime, непосредственно на ядре Linux, и запускает контейнеры и pods как дочерние процессы. Кроме того, он был разработан для разработчиков Docker, большинство команд и синтаксис полностью повторяют синтаксис Docker. Buildah, инструмент для создания образов, и Skopeo, утилита для работы с образами, также дополняют Podman и расширяют спектр выполняемых операций.
Поскольку Docker — такой большой инструмент, мы можем разбить его на несколько компонентов, в основном это контейнерный движок, построитель образов и дистрибутив образов. Вместо того чтобы полагаться на Docker, давайте рассмотрим некоторые легкие замены, которые могут обеспечить ту же функциональность.
Podman
Podman — это контейнерный движок без демонов и корней, позволяющий запускать контейнеры, управлять ими и взаимодействовать с ними. Команды такие же, как и у Docker, благодаря стандартам Open Container Initiative (OCI), и вы даже можете сделать псевдоним Docker на Podman (alias docker=podman
). В то время как демон Docker обычно запускается от имени root, что является давней проблемой безопасности, Podman можно запускать в режиме без root. Podman даже включает функциональность для оркестровки контейнеров с Kubernetes!
Начало работы с Podman
- Прежде всего, давайте установим Podman. В зависимости от вашей среды выполнения вы можете использовать различные методы установки, описанные в документации. Вы даже можете легко использовать Podman на Mac с помощью
brew install podman
и Windows с помощью этого блога.
$ sudo dnf -y install podman
- Запустите контейнер httpd
$ podman run -dt -p 8080:80/tcp docker.io/library/httpd
Trying to pull docker.io/library/httpd:latest...
Getting image source signatures
Copying blob d6bc17b4451a done
…
- Проверка состояния контейнера
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d5f92a59ea3 docker.io/library/httpd:latest httpd-foreground 24 seconds ago Up 25 seconds ago 0.0.0.0:8080->80/tcp happy_beaver
- Доступ к вашему приложению! Мы можем просто выполнить команду
curl
или зайти на IP нашего приложения с портом 8080 через браузер, и мы увидим, что наш серверhttpd
запущен.
$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Buildah
Buildah — это инструмент для создания образов без демона и без корня, дополняющий Podman, который создает OCI-совместимые образы. Он способен создавать образы из Dockerfile
и может быть запущен непосредственно внутри контейнеров.
Начало работы с Buildah
- Давайте установим Buildah, что можно сделать, ознакомившись с документацией по установке. Как и Podman, Buildah поставляется на Fedora 35/36, RHEL 8+, CentOS, OpenSUSE, Ubuntu и др.
$ sudo dnf -y install buildah
- Сборка образа из
Dockerfile
. Хотя по умолчанию для создания любого образа контейнера используется командаbuildah bud -t tag-name .
в каталоге сDockerfile
, допустим, мы работаем над приложением Next.js. Для начала загрузим бутстрап с помощьюnpx
.
$ npx create-next-app --example with-docker nextjs-docker
$ cd next-js docker
- Теперь у нас есть приложение Next.js с Dockerfile внутри, готовое к сборке нашего приложения. Давайте продолжим и создадим образ нашего контейнера.
$ buildah build -t nextjs-docker .
[1/3] STEP 1/5: FROM node:16-alpine AS deps
Resolved "node" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/node:16-alpine…
Successfully tagged localhost/nextjs-docker:latest
- Проверьте состояние образа.
$ buildah images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/nextjs-docker latest 162bee38beb9 8 seconds ago 118 MB
- Запустите контейнер и проверьте установку, выглядит отлично!
$ podman run -p 3000:3000 nextjs-docker
Skopeo
Skopeo — это утилита для работы с образами, которая дополняет Podman и Buildah, позволяя вам удаленно проверять образы, копировать образы между реестрами и многое другое. Как и другие, он не требует запуска демона или прав root, и может работать с образами, совместимыми с OCI.
Начало работы со Skopeo
- Давайте установим Skopeo, что можно сделать с помощью документации по установке.
$ sudo dnf -y install skopeo
- Переместите наш образ в удаленный реестр. Если мы еще не сделали этого, давайте загрузим образ, который мы только что создали с помощью Buildah, в хаб Docker.
$ podman login docker.io
$ podman push nextjs-docker docker.io/cedricclyburn/nextjs-docker
- Скопируйте образ в другой реестр. Недавно ограничения тарифов Docker Hub и изменения платного уровня побудили инженеров начать использовать альтернативные реестры образов, такие как Quay.io. Давайте возьмем наш существующий образ из Docker и скопируем его на Quay.io.
$ skopeo login quay.io
$ skopeo copy docker://cedricclyburn/nextjs-docker:latest docker://quay.io/cedric-clyburn/nextjs-docker:latest
- Осмотрите изображение. Skopeo позволяет нам проверять свойства или конфигурацию образа на удаленных хранилищах с помощью
skopeo inspect
.
$ skopeo inspect docker://quay.io/cedric-clyburn/nextjs-docker
{
"Name": "quay.io/cedric-clyburn/nextjs-docker",
"Digest": "sha256:779bf91bd2d407b4db9e7e7035cc77dfbd0f2cbd435067a40f485960d2889ded",
"RepoTags": [
"latest"
],
"Created": "2022-07-19T18:30:29.872420186Z",
…
Заключение
Как мы видели, вы можете использовать Podman, Buildah и Skopeo в качестве замены традиционного рабочего процесса Docker без использования демона или привилегий root. Использование этих инструментов дает множество преимуществ, и благодаря росту числа разработчиков их применение только увеличивается. Я верю, что у контейнеров есть будущее без Docker, и Podman (а также семейство Buildah и Skopeo) — отличная альтернатива для работы.
Седрик Клайберн (Cedric Clyburn)@cedricclyburn
только что опубликовал свой #Podman блог на @rhdevelopers! Взгляните, это супер крутой #Linux инструмент, который наконец-то стал «Dockerless» 🐳 red.ht/2IQ9xdg22:56 PM — 19 Nov 2020![]()
![]()
![]()
Примечание: Этот материал взят из одного из моих выступлений на DevNation Tech Talks, а полную презентацию + слайды можно найти здесь!