Podman Tutorial: Einstieg in die Container-Engine ohne Daemon
Container-Virtualisierung hat in den vergangenen Jahren an Bedeutung gewonnen. Insbesondere durch das 2013 erschienene Docker populär geworden, ist die Technologie mittlerweile Grundkomponente diverser Tools für die Ansteuerung virtueller Namespaces (dt. „Namensräume“). Eine der interessantesten Lösungen ist Podman: Ursprünglich als Debugging-Tool für CRI-O konzipiert, das die Arbeit mit Kubernetes-Clustern einfacher gestalten sollte, hat sich die Software schnell zu einer eigenständigen, umfangreichen Engine für das Management von Containern entwickelt.
Namespaces bzw. Namensräume ermöglichen es, ausgewählte Elemente eines Codes (z. B. Klassen) in einem Container zu gruppieren.
Was Podman so besonders macht und wie sich das Container-Werkzeug für die eigenen Zwecke nutzen lässt, erfahren Sie im Folgenden.
Was ist Podman?
Podman (Abkürzung für: Pod-Manager) ist eine Container-Engine, die erstmals im Februar 2018 veröffentlicht wurde. Entwickler ist die amerikanische Software-Schmiede Red Hat, die vor allem durch leistungsstarke Enterprise-Lösungen für verschiedenste Open-Source-Projekte wie Red Hat Enterprise Linux (RHEL) oder OpenStack bekannt ist. Auf den Erfahrungen von Docker aufbauend, war Podman ursprünglich aber gar nicht als eigenständige Engine, sondern als einfaches Debugging-Tool für CRI-O geplant – ein Plan, der schnell wieder verworfen wurde.
Die Container-Software ähnelt Docker in vielen Punkten und verwendet beispielsweise denselben Kommandozeilen-Interpreter wie der Industriestandard. Das macht es sogar möglich, typische Docker-Befehle in Podman zu nutzen – hierfür muss lediglich der Alias alias docker=podman gesetzt werden. Dementsprechend ist ein Umstieg von Docker auf Podman in den meisten Fällen relativ unkompliziert. Die entscheidende Neuerung, die Podman mit sich bringt, ist der Verzicht auf einen zentralen Daemon als Steuerungsinstanz für die einzelnen Container. Dies gibt Ihnen die Möglichkeit, auch ohne Root-Rechte auf die verschiedenen virtualisierten Anwendungen zuzugreifen.
Als Daemon bezeichnet man in Unix/Linux-Betriebssystemen ein Programm, das im Hintergrund ausgeführt wird und bestimmte Dienste und Prozesse zur Verfügung stellt.
Podman läuft auf allen gängigen Linux-Distributionen wie Ubuntu, Fedora, CentOS, Debian und RHEL sowie auf Raspbian (Raspberry-Pi-Betriebssystem). Dabei lässt sich die Engine in den meisten Fällen direkt über die Paketverwaltung des jeweiligen Systems installieren.
Erfahren Sie mehr zum Thema "Podman vs. Docker – wo liegt die Zukunft der Container-Welt?".
Aufbau und Funktionsweise von Podman
Zusätzlich zu dem Verzicht auf einen zentralen Daemon zählen die sogenannten Pods zu den entscheidenden Auszeichnungsmerkmalen von Podman. Bei diesen Pods, die dem Konzept von Kubernetes Pods nachempfunden sind, handelt es sich um Zusammenschlüsse mehrerer Container innerhalb eines gemeinsamen Linux-Namensraums, die sich bestimmte Ressourcen teilen. Auf diese Weise lassen sich verschiedenste virtualisierte Anwendungen flexibel miteinander kombinieren.
Wie zuvor erwähnt, gelingt das Ausführen der einzelnen Container auf dem Host als gewöhnlicher Nutzer ohne Root-Rechte – nur innerhalb eines Containers laufen die Prozesse rootgesteuert. Um dies zu ermöglichen, greift Podman auf die User-Namespaces des Linux-Kernels zurück, die den Prozessen spezielle Rechte und Nutzer-IDs zuweisen. Dass die Container in Wirklichkeit aber als Administrator ausgeführt werden, verleiht der virtualisierten Podman-Umgebung einen hohen Sicherheitsstandard.
Den Kern eines Pods bilden sogenannte Infra-Container, die ausschließlich für die Funktionalität des Zusammenschlusses verantwortlich sind und zu diesem Zweck die einzelnen Ressourcen wie Namespaces, Netzwerk-Ports, CPU, Arbeitsspeicher etc. verwalten und gewährleisten. Ferner setzt Podman beim Pod-Management auf das in C geschriebene Monitoring-Tool Conmon, das die einzelnen virtualisierten Komponenten überwacht und beispielsweise Logs sichert. Zudem fungiert das Werkzeug als Schnittstelle zum Terminal des jeweiligen Containers. Als Laufzeit für die Container verwendet Podman die Software runC, die auch in vielen anderen Lösungen wie Docker oder rkt zum Einsatz kommt.
Podman-Tutorial: Die ersten Schritte mit Podman
Nachdem wir die grundlegenden Eigenschaften von Podman vorgestellt haben, fassen wir im nachfolgenden Podman-Tutorial die wichtigsten Punkte für den Einstieg in die Arbeit mit der Container-Engine zusammen.
Podman installieren unter Linux
Podman ist eine Software zur Ausführung von Linux-Containern. Auf Linux-Distributionen wie CentOS, Ubuntu, Debian und Co. ist das Tool ebenso leicht wie schnell installiert: In den meisten Fällen sind die Installationspakete direkt in der Paketverwaltung der jeweiligen Systemsoftware zu finden und mithilfe der systemtypischen Terminal-Befehle installiert.
Als Alternative zu den nativen Paketen im System-Repository stellt das Kubic-Projekt auf opensuse.org verschiedene Podman-Installationspakete für diverse Distributionen und Releases zur Verfügung.
Debian, Ubuntu, Raspbian:
sudo apt-get update -qq
sudo apt-get -qq -y install podman
Fedora, CentOS, Amazon Linux 2, RHEL 7:
sudo yum -y install podman
OpenSUSE:
sudo zipper install podman
Podman installieren unter Windows und macOS
Podman ist in Linux-Umgebungen zuhause. Sie können die Container-Engine aber auch auf Geräten nutzen, die Windows oder macOS als Betriebssystem verwenden. Voraussetzung hierfür ist, dass Sie von diesen Geräten aus Zugriff auf eine Linux-Installation haben, die entweder innerhalb einer virtuellen Maschine auf dem Host läuft oder über das Netzwerk zugänglich ist.
Falls Sie über eine solche Zugriffsmöglichkeit verfügen, benötigen Sie lediglich einen Podman-Remote-Client, mit dem Sie eine SSH-Verbindung zum Podman-Backend aufbauen können.
Die Verbindungsinformationen für die SSH-Verbindung sind in der Konfigurationsdatei podman-remote.conf einzutragen. Ausführliche Informationen über die Einrichtung und Nutzung liefert folgendes Podman-Remote-Client-Tutorial auf GitHub.
So funktioniert das Container-Image-Management mit Podman
Podman orientiert sich in Bezug auf Features und Syntax vorrangig an Docker, weshalb Sie bei der Einrichtung der gewünschten Container auf den großen Fundus aus einsatzfertigen Docker-Images zurückgreifen können, der auch als Docker Hub bekannt ist. Mithilfe des pull-Kommandos können Sie von dort beliebige Anwendungs-Images herunterladen, z. B. die neueste Version von Ubuntu:
podman pull hub.docker.com/_/ubuntu:latest
Der offizielle Speicherpfad für die einzelnen Images ist der lokale Pfad /.local/share/containers/, wobei jeder Nutzer seinen eigenen Namensraum besitzt, sodass das eigene Container-Setup beispielsweise vom Root-Setup getrennt ist. Einen Überblick über die lokal gespeicherten Images erhalten Sie mit folgendem Befehl:
podman images
Für eine Auflistung der Root-Images ist das Linux-typische Kommando „sudo“ voranzustellen:
sudo podman images