Найти тему
День-дребедень

Обзор «Podman в действии» Дэниэла Уолша

Оглавление

Коллеги, добрый день! Хочу порекомендовать к чтению книгу «Podman в действии». Несомненно, у книги есть как достоинства, так и свои недостатки (об это подробнее чуть ниже), но со своей основной задачей познакомить читателя с Podman она уверенно справляется.

Это вам не Шекспир

Перед нами переводное издание, и перевод на русский сделан на четверочку. Встречаются откровенные ляпы в переводе технических терминов, да и стиль изложения хромает. Если у вас есть возможность прочитать эту книга на языке оригинала, то выбирайте именно его.

Временами книга перегружена излишними деталями, которые можно смело пропустить, не боясь потерять общую нить повествования.

С придирками покончено, и теперь о главном. Книга дает глубокое понимание Podman и его основных отличий, даже преимуществ в сравнении с его конкурентом — Docker.

Rootless и rootful

В отличии от Docker Podman может работать как в режиме rootful (суперпользователь), так и rootless (обычный пользователь). Это все обеспечивается идеологией и архитектурой Podman, что делает работу с контейнерами более защищенной.

Работа с pod-ами

В docker мы все привыкли работать с контейнерами. Podman — это прежде всего pod manager и он предоставляет возможность не только создавать контейнеры, но и создавать pod-ы и помещать в них контейнеры

podman pod create --name=test-pod
Стартуем новый контейнер в только что созданном pod
podman container run --name=test-container --pod=test-pod busybox
podman pod ls

Работа с systemd

Использование systemd в контейнерах Docker запрещена. Именно идеологически запрещена, а не просто забыта.

В Docker считают, что никакой внутренний процесс контейнера не может управлять его жизненным циклом. Контейнер может управляться только извне и поэтому systemd нет места в конетйнерах.

Авторы Podman считают иначе, поэтому у нас всегда есть выбор: создать контейнер без systemd, где микросервис будет запущен под PID=1 или создать контейнер с systemd и запускать микросервисы в контейнере через механизм unit-файлов.

podman create -name test -it --systemd=always ubi8-init sh

Но и это еще не все. Даже старт самого контейнера можно сделать частью старта хостинговой операционной системы, создав соответствующий unit-файл.

$ podman create -р 8080:8080 --name myapp quay.io/rhatdan/myimage
$ mkdir -р $HOME/.config/systemd/user
$ podman generate systemd myapp > $HOME/. config/systemd/user/myapp.service

Теперь при старте системы, автоматически будет запускаться контейнер myapp.

Автообновление контейнера

Как наш личный образ по жизни, так и контейнеры в ИТ требует постоянного обновления. И Podman это поддерживает, достаточно добавить контейнеру лейбл io.containers.autoupdate=registry

podman create --label “io.containers.autoupdate=registry" -p 8080:8080 - name myapp quay.io/rhatdan/myimage

Теперь при каждом выполнении команды

podman auto-update --roll-back

будет проиcходит автоматическое обновление контейнеров на новую версию образа, если таковой появится в реестре.

Обратите внимание на ключ --roll-back. Он указывает, что в случае возникновения сбоя при обновлении на новую версию, произойдет откат на предыдущую успешную версию.

Podman и Kubernetes

Работа с Kubernetes. Нет, речь не идет о замене docker engine в Kubernetes на podman. Поговорим о миграции контейнеров из среды Podman в Kubernetes и обратно.

$ podman create -p 8080:8080 --name myapp quay.io/rhatdan/myimage
$ podman generate kube myapp > myapp.yaml
$ kubectl create -f myapp.yml

Созданный таким образом файл .yaml позволит нам задеплоить контейнер в Kubernetes.

И чтобы воссоздать k8s окружение у себя, теперь нет необходимости использовать minikube, можно воспользоваться командой

podman play kube myapp.yaml

Заключение

Podman — это больше, чем просто docker alias. В умелых руках он позволит решать проблемы и задачи контейнеризации быстро и эффективно. Именно об этом книга «Podman в действии».