Podman (the POD MANager) este un instrument pentru gestionarea întregului ecosistem al containerelor dintr-o distribuție Linux: cu ajutorul bibliotecii libpod, Podman poate crea și lucra cu poduri, containere, imagini de containere, volume montate în containere. Podman este creat de RedHat, dar poate fi instalat ușor și pe alte distribuții. Este construit și conceput pentru a respecta conformitatea OCI.
Cu Podman, containerele pot fi rulate atât ca root, cât și de sub userul obișnuit (rootless).
Podman poate fi folosit ca înlocuitor pentru Docker, ambele având funcționalități care se suprapun. Ambele pot crea imagini pe care celălalt instrument le poate folosi pentru a rula containere.
Instalarea Podman
Instalarea este simplă, indiferent de distribuție:
În CentOS 7/ RedHat 7
sudo yum install podman
În CentOS 8/ RedHat 8
În RedHat 8, Podman este inclus în modulul container-tools, împreună cu Buildah si Skopeo (alte două instrumente dedicate containerelor create de Red Hat).
sudo dnf config-manager --set-enabled PowerTools
sudo dnf install -y @container-tools
În Ubuntu
sudo apt install podman
Pentru instalarea în alte distribuții vezi aici.
După instalare, verificăm versiunea:
$ podman version Version: 3.1.2 API Version: 3.1.2 Go Version: go1.15.2 Built: Thu Jan 1 02:00:00 1970 OS/Arch: linux/amd64
Imagini și containere
Înn mod voit, Podman s-a aliniat la Docker, astfel că majoritatea comenzilor sunt asemănătoare și putem rula comenzile cu care suntem deja obișnuiți din Docker CLI - mai mult, putem face un alias de genul alias docker=podman
și aproape nici nu ne dăm seama că lucrăm cu alt tool.
podman pull nume_imagine:latest
podman run nume_imagine:latest --name nume_container
podman ps
podman rm nume_container
În imaginea de mai jos am pornite 4 containere cu podman: Prometheus, Alertmanager, Node-Exporter și Grafana (într-un articol viitor am să prezint modul de a porni un container podman la startul unei mașini - nu mai exista un daemon în spate care să-l pornească):
Ce are diferit Podman față de Docker
Deși este aproape similar lui Docker, Podman are câteva diferențe față de Docker. Prima, și cea mai importantă, este arhitectura - Podman este daemonless, adică nu există un proces în spate care să monitorizeze containerele. Când rulăm o comandă podman
, interacționăm direct cu kernelul Linux prin intermediul procesului runC container runtime (nu e un daemon). Docker CLI este dependent de daemon-ul Docker, care rulează ca serviciu: Docker CLI trimite comenzi către daemon, iar daemon-ul acționează apoi pentru a crea containerele.
Poduri
O altă diferență majoră față de Docker este aceea că Podman poate lucra cu poduri - containerele pot forma poduri similare cu conceptul de poduri din Kubernetes.
Pentru a crea un pod, rulăm comanda:
podman pod create --name nume_pod
Containerele pot fi adăugate într-un pod adăugând flagul --run
comenzii podman run
:
podman run --pod nume_pod --name image-1 my-image:latest podman run --pod nume_pod --name image-2 another-image:latest
Gestionarea podurilor:
podman kill nume_pod # oprește toate containerele
ele
podman restart nume_pod # restartează toate containerele
podman stop nume_pod # oprește toate container
Conceptul de pod e puternic, permițându-ne să gestionăm mai multe containere în mod agregat. Putem crea containere de aplicații (frontend, backend), dar și o bază de date, apoi să le adăugăm într-un pod și să le gestionăm pe toate în același timp. Putem opri, porni, șterge containerele dintr-un pod folosind comenzile podman pentru poduri.
Când trebuie să exportăm definiția unui pod, Podman poate produce fișiere manifest YAML compatibile cu Kubernetes - putem lua acest fișier și să-l aplicăm direct într-un cluster kubernetes. Comanda pentru generarea fișierelor YAML:
podman generate kube
Containere rootless
Podman suportă containere rootless - containere care nu rulează sub userul root pentru a preveni potențiale vulnerabilități. Mai nou, și Docker suportă acum modul rootless - dar primul a fost Podman. 🙂
Concluzie
De ceva timp prefer Podman în defavoarea Docker: prima dată m-a atras la el faptul că nu există un serviciu în spate care să-l gestioneze. Pentru cei care erau obișnuiți cu docker-compose, de ceva timp a apărut și podman-compose, așa ca nu cred că va lipsi cuiva foarte mult docker (va urma un scurt articol despre asta).
Prin abilitatea sa de a exporta fișiere YAML compatibile, Podman esta gata să facă trecerea la seviciile de gestionare și orchestrare a containerelor, cum este Kubernetes.
Resurse
- Website Podman: www.podman.io
- GitHub Podman: github.com/containers/podman
- RedHat: access.redhat.com/documentation/...
- RedHat: developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods
[…] ce am instalat Podman, nu ne rămâne decât să ridicăm containerele […]