Контейнеры без Docker (podman, buildah и skopeo)

Хотя 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/2IQ9xdg
22:56 PM — 19 Nov 2020

Примечание: Этот материал взят из одного из моих выступлений на DevNation Tech Talks, а полную презентацию + слайды можно найти здесь!

Оцените статью
devanswers.ru
Добавить комментарий