Коллеги, добрый день! Хочу порекомендовать к чтению книгу «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 в действии».