Leichtgewichtige Container mit Podman unter Linux: Ein praktischer Leitfaden

Letzte Aktualisierung: 22/09/2025
Autor: Holger
  • Podman ist daemonlos, OCI-kompatibel und ermöglicht einen Rootless-Betrieb mit erhöhter Sicherheit.
  • UBI, Buildah und Skopeo bilden einen soliden Stapel zum Erstellen, Signieren und Verteilen von Bildern.
  • Pods, Kubernetes YAML und systemd-Einheiten erleichtern den Wechsel von der lokalen zur stabilen Bereitstellung.

Leichtgewichtige Container mit Podman unter Linux

Wenn Ihr Ziel darin besteht, zu starten Leichtbehälter in Linux Mit maximaler Sicherheit und Kontrolle ist Podman eine der besten Karten, die Sie spielen können. Es nutzt das OCI-Ökosystem, bietet eine sehr vertraute CLI für Docker-Umsteiger und eliminiert vor allem den zentralen Daemon, wodurch die Angriffsfläche und der Ressourcenverbrauch reduziert werden.

Diese praktische und ausführliche Tour vereint die wichtigsten Anleitungen für Red Hat, SUSE und verwandte Tools wie Buildah und Skopeo. Sie lernen, wie Sie Container und Pods installieren, konfigurieren und betreiben, effiziente Images (einschließlich UBI) erstellen, YAML-Dateien für Kubernetes- oder Systemd-Einheiten generieren und dabei problemlos durch Protokolle, Vertrauensrichtlinien, Integritätsprüfungen und Ereignisse navigieren.

Was ist Podman und warum zeichnet es sich durch leichte Behälter aus?

Was ist Podman

Podman ist ein Daemonlose Container-Engine Es entspricht den OCI-Spezifikationen und ermöglicht das Ausführen, Erstellen und Verwalten von Images und Containern mit einer Syntax, die praktisch mit der von Docker identisch ist. Der große Unterschied ist architektonischer Natur: Es gibt keinen Masterprozess. Wurzel im Hintergrund, an den Anfragen gesendet werden können, was die Sicherheit und das Betriebsmodell vereinfacht.

Ein weiterer wichtiger Vorteil ist die Unterstützung von wurzellos: Nicht privilegierte Benutzer können Container erstellen und ausführen, ohne ihre Berechtigungen zu erhöhen. Dies ist nicht nur sicherer, sondern verbessert auch die Rückverfolgbarkeit, da Aktionen dem tatsächlichen Systembenutzer und nicht einem als Root ausgeführten Daemon zugeordnet sind.

Die Docker CLI-Unterstützung ist sehr ausgefeilt. Sie können verwenden Befehle als Podman-Build, Podman laufen o podman Bilder Fast dasselbe. Es gibt sogar ein Podman-Docker-Paket, das einen Alias ​​erstellt, sodass beim Ausführen von Docker Podman transparent aufgerufen wird. Dies ist nützlich, wenn Sie über Legacy-Skripte verfügen.

Podman übernimmt das Konzept von Schoten Kubernetes: Gruppierung mehrerer Container, die ein Netzwerk und bestimmte Namespaces gemeinsam nutzen. Es eignet sich ideal zum Zusammenstellen kooperierender Dienste (z. B. einer Datenbank und ihres Clients) und zum Generieren portabler Beschreibungen für Kubernetes mithilfe von YAML, z. B.: Docker in Kubernetes integrieren.

Im Enterprise-Ökosystem ersetzte Red Hat die Docker-Engine auf RHEL 8 für einen Daemon-losen Stack basierend auf Podman, Buildah und Skopeo. Es fördert auch UBI-Bilder Weiterverteilbare Dateien zum Aufbau auf einer hochwertigen RHEL-Basis ohne Abonnement-Lock-Ins.

Installation und Anforderungen nach Distribution

Installieren Sie Podman unter Linux

In RHEL 8 und Derivaten ist es am bequemsten, das Modul zu aktivieren Container-Tools, das Podman, Buildah und Skopeo unterstützt. Installieren Sie nach der Registrierung des Systems gegebenenfalls das verfügbare Modul und Sie haben das Paket für die integrierte Arbeit mit Containern bereit.

Unter Fedora befindet sich das Paket in Repos und wird mit dem üblichen Paketmanager installiert. Ubuntu (ab 20.04) kann mit APT aus den Standard-Repos installiert werden oder durch Hinzufügen des stabilen libcontainers PPA, um auf dem neuesten Stand zu sein. SLEMicroPodman ist standardmäßig enthalten und kann, falls es fehlt, gemäß der offiziellen SUSE-Dokumentation hinzugefügt werden.

Überprüfen Sie die Umgebung mit Podman-Informationen um Details zu sehen von Lagerung, cgroups, Rootless-Kompatibilität und Plugins. Ein Starten Der schnelle und leichte Netzwerk- und DNS-Checker besteht aus der interaktiven Ausführung eines Alpine-Containers mit einem einfachen podman run –rm -it alpine sh.

Wenn Sie geschützte Red Hat-Images kompilieren oder verwenden möchten (z. B. in registry.redhat.io), denken Sie daran, dass Sie Authentifizierung mit gültigen Portal-Anmeldeinformationen, während registry.access.redhat.com bietet nicht authentifizierten Zugriff auf einen Teil seines Katalogs.

Arbeiten im Rootless-Modus: Konfiguration und praktische Grenzen

Der Rootless-Modus ist eine der interessantesten Funktionen von Podman. Um ihn korrekt zu aktivieren, sollten Sie Folgendes einstellen: Benutzer-Namespaces und Subuid- und Subgid-Maps. Wenn Sie von älteren Systemen oder bereits vorhandenen Konten kommen, überprüfen Sie die Dateien. /etc/subuid y /etc/subgid um jedem Benutzer ausreichende Bereiche zuzuweisen.

  Windows 10 8.1 7: Vollständige Lösung für Fehler #0x80070570

Die Bestellung Podman-Freigabe aufheben Sie können den Namespace des Benutzers aufrufen und die effektiven UID- und GID-Zuordnungen überprüfen. Dies ist hilfreich, um zu diagnostizieren, warum ein Rootless-Container nicht auf bestimmte Dateien zugreifen kann oder warum ein Remote-Volume unter diesem Benutzer fehlschlägt.

Es gibt wichtige Einschränkungen: Ein Container im Rootless-Modus kann nicht offene Ports kleiner als 1024In Entwicklungsszenarien können Sie den Kernelparameter ändern, um niedrigere, nicht privilegierte Ports zu aktivieren, oder die Portweiterleitung auf dem Host verwenden, um auf 80 oder 443 zuzugreifen, ohne die Berechtigungen zu erhöhen.

Es gibt auch Dienste, die globale Berechtigungen erfordern, wie zum Beispiel SystemzeiteinstellungenWenn Sie ntpd in einem Rootless-Container ausführen und ihm unangemessene Berechtigungen erteilen, kann dies Auswirkungen auf den Host haben. Es ist besser, diese Daemons auf dem System zu belassen oder Pods/Dienste mit entsprechenden Einschränkungen zu verwenden.

Ein betriebliches Detail: Rootless-Containerspeicher müssen in einem lokales Dateisystem. Remote-Mounts verursachen oft Probleme mit Benutzernamensräumen. Auch wenn Ihre Benutzerauthentifizierung von LDAP oder Active Directory, müssen Sie statische Subuid- und Subgid-Bereiche lokal verwalten, damit die Zuordnung ordnungsgemäß funktioniert.

Suche, Extraktion und Vertrauensrichtlinien in Protokollen

Podman fragt standardmäßig die Protokolle ab, die in /etc/containers/registries.confAls Root können Sie Systemeinstellungen ändern; als nicht-privilegierter Benutzer können Sie diese überschreiben, indem Sie eine eigene Datei in $HOME/.config/containers/registries.conf um Prioritäten anzupassen, zu spiegeln oder unsichere Datensätze in Ihrer Sitzung zu markieren.

Um Bilder zu finden, verwenden Sie Podman-Suche. Sie können alle definierten Datensätze durchsuchen oder nach Domänen einschränken. Wenn Sie vollständige Ergebnisse benötigen, fügen Sie –no-truncWenn für einen Eintrag Anmeldeinformationen erforderlich sind, melden Sie sich bitte zuerst an, damit der Eintrag zugängliche private Repos anzeigt.

La Vertrauenspolitik ermöglicht die Überprüfung von Bildsignaturen. Es ist definiert in /etc/containers/policy.json und im YAML von /etc/containers/registries.d/Red Hat veröffentlicht Signaturen für seine Bilder. Sie können spezielle Abschnitte für registry.access.redhat.com und registry.redhat.io hinzufügen und die Sigstore-URLs angeben, die das System beim Abrufen konsultieren soll.

Wenn Sie die Standardrichtlinie ändern in ablehnenkönnen Sie nur aus signierten oder explizit zugelassenen Bereichen ziehen. Dies ist nützlich, um Build-Server oder regulierte Umgebungen zu härten. Sie können die aktive Richtlinie überprüfen, indem Sie die JSON-Datei der Richtlinie anzeigen und mit einem ubi8-minimal um zu sehen, wie die Signatur während des Pulls validiert wird.

Es wird dringend empfohlen, Namen zu verwenden voll qualifiziert Geben Sie beim Pullen Registrierung, Namespace, Repository und Tag an. So vermeiden Sie das Spoofing von Kurznamen und dokumentieren gleichzeitig die Herkunft jedes Images in Ihren Skripten besser.

UBI-Basisbilder und -Konstruktion mit Buildah

Die UBI (Universal Base Images) RHEL 8 ist eine offizielle Basis mit einer kostenlosen Weiterverbreitungslizenz. Sie haben Standard-, Minimal- und Init-Varianten sowie Laufzeit-Images für jede Sprache (z. B. Python, PHP, Ruby oder Node.js). Ziel ist es, Ihnen zu ermöglichen, Ihre Anwendung auf einer hochwertigen RHEL-Grundlage aufzubauen und zu verteilen, ohne am Ziel an ein Abonnement gebunden zu sein.

Das Bild ubi8 Standard bietet einen robusten Satz von Werkzeugen für die meisten Szenarien. Im Gegensatz dazu ubi8-minimal Reduzieren Sie die Größe auf das Minimum und schließen Sie nur das Wesentliche ein. Sie können Pakete hinzufügen mit microdnf während des Builds, wenn Sie zusätzliche Abhängigkeiten benötigen.

Die Variante ubi8-init integriert systemd als PID 1 und setzt einen Stoppsignal Dies ist besonders wichtig, da systemd herkömmliche Exit-Signale ignoriert. Dies ist nützlich, wenn Sie von systemd verwaltete Dienste innerhalb des Containers ausführen möchten, genauer als auf einer herkömmlichen Maschine.

  Erfahren Sie, wie Sie eine Pivot-Tabelle in Excel löschen

Auf abonnierten RHEL-Hosts kann der Standard-UBI-Container sowohl Host-Repos als auch UBI-Repos sehen, sodass Sie den gesamten PaketkatalogWenn das resultierende Image weiterverteilbar sein soll, deaktivieren Sie beim Erstellen Nicht-UBI-Repos, um sicherzustellen, dass nur frei verteilte RPMs enthalten sind.

Um zu bauen, Bauah gibt Ihnen zwei Pfade: von einer Docker-Datei mit Buildah Knospe, oder auf eine detailliertere Art und Weise, indem Sie einen funktionierenden Container erstellen, sein Dateisystem mounten, Dateien kopieren und Konfigurationen mit ausführen Buildah-Konfiguration. Mit ubi8-minimal Denken Sie daran, microdnf anstelle von yum zu verwenden.

Container und Images mit Podman betreiben

Für einmalige Ausführungen können Sie kurze Befehle starten mit podman run –rm. Zum Beispiel das Basissystem eines Bildes mit cat / etc / os-release oder öffnen Sie eine interaktive Bash-Shell, um den Containerinhalt zu untersuchen und Tests ohne Persistenz durchzuführen.

Die Inspektion ist sehr umfassend: mit Podman-Inspektion Sie können Metadaten von Containern und Bildern anzeigen und formatear die Ausgabe, um bestimmte Felder zu erhalten, wie z. B. NetworkSettings.IPAddress, .Config.ExposedPorts oder Status.Pid des Prozesses.

Wenn Sie einen Container eingeben müssen, der bereits in Aktion, Verwendet Podman-Exec mit einer Shell, ohne den Hauptprozess zu unterbrechen. Dies ist ideal, um zu beobachten, was eine Anwendung tatsächlich tut, während sie Datenverkehr bedient oder Aufträge verarbeitet.

Um Daten zu speichern und zu teilen, unterstützt Podman BändeSie können ein Volume erstellen, es in einen Container einbinden und so Dateien behalten, selbst wenn Sie den Container löschen und neu erstellen. Es empfiehlt sich, das Volume nach dem Namen und nicht nach dem internen Hostpfad einzubinden, um versehentliche Bereinigungen durch Prune zu vermeiden.

Bilder und Container werden verwaltet mit podman Bilder, podman rmi, podman ps, Podman RM und Unternehmen. Um Bilder zwischen Maschinen zu verschieben, speichern Sie mit Podman speichern in ein Tar und neu laden mit Podman-Ladung. Das Ehepaar Export / Import Es ist auch vorhanden, wenn Sie das Dateisystem eines bestimmten Containers erfassen möchten.

Pods und YAML-Generierung für Kubernetes

Un Schote gruppiert Container und stellt ihnen einen Infra-Container zur Verfügung, der ihre Namespaces verwaltet. Sie können sie mit Podman Pod erstellen, Liste mit Podman Pod PS und führen Sie Container im Inneren aus, die –podDies ist eine natürliche Möglichkeit, Bereitstellungen mit mehreren zusammenarbeitenden Teilen einzurichten.

Sobald Sie einen Pod nach Ihren Wünschen definiert haben, können Sie sein Manifest generieren. Kubernetes mit Podman generiert Kube. Sie erhalten eine portable YAML-Datei, die den Pod und die Container beschreibt. Später können Sie das Set auf demselben Host neu erstellen mit Podman spielt Kube oder bringen Sie es zu einem Cluster mit kubectl u oc.

Bedenken Sie, dass die Generation nicht das Volumen widerspiegelt, LVM des Gastgebers noch Details von Lagerung fortgeschritten; wenn Sie sie verwenden, dokumentieren Sie diese Anforderungen separat oder erstellen Sie entsprechende Speicherobjekte im Orchestrator.

In OpenShift können Sie verwenden oc erstellen mit Dry-Run-Flags, um Ressourcen-YAMLs aus Bildern zu erstellen und kontrolliert zu veröffentlichen. In Kubernetes ist der Vorgang sehr ähnlich mit kubectl erstellen.

Die lokale Arbeit mit Pods beschleunigt die Zur Produktion springen, da die Topologie bereits in Form von Pods und Containern durchdacht ist und die YAML-Datei als Vertrag zwischen Entwicklung und Betrieb dient.

Systemd-Integration: Container- und Pod-Dienste

Podman integriert sich wunderbar mit systemd. Mit podman generiert systemd Sie erstellen Einheiten für vorhandene Container oder Pods oder generieren portable Definitionen mit -neu die den Container erstellen und starten, wenn er nicht vorhanden ist, und ihn zerstören, wenn der Dienst gestoppt wird.

Einheiten können sein von Benutzer (At $HOME/.config/systemd/Benutzer) oder von System (At /etc/systemd/system o /usr/lib/systemd/system). Aktivieren Sie für Benutzerdienste mit systemctl –Benutzer und denken Sie daran, den anhaltenden Start des Benutzers anzupassen, wenn dieser nach der Abmeldung bestehen bleiben soll.

Wenn Sie einen Pod mit mehreren Containern verwalten, konzentrieren Sie sich auf die Pod-Dienst und vermeiden Sie das separate Starten oder Stoppen interner Container mit systemctl, da diese vom Pod-Dienst zusammen mit dem Infra-Container koordiniert werden.

  Beispiel: Wie kann ich mein Spotify-Konto mit meinen Freunden und meiner Familie teilen?

Schauen Sie sich Optionen an wie –Neustartrichtlinie So können Ihre Containerdienste beim Start und im Fehlerfall automatisch gestartet werden. Es handelt sich um eine einfache Form der lokalen Orchestrierung mit der unter Linux bekannten Service-Unit-Semantik.

Ein Tipp: Erneuern Sie die Unit-Dateien, wenn Sie Podman aktualisieren. Die Vorlagen entwickeln sich weiter und podman generiert systemd stellt Ihnen die neueste Version der empfohlenen Richtlinien zur Verfügung.

Skopeo Tools, Buildah und die Toolbox

Skopeo Damit können Sie Bilder in Remote-Registrierungen prüfen, ohne ganze Bilder herunterladen zu müssen, sie zwischen Speicher-Backends kopieren und signieren. Es eignet sich ideal für die Prüfung von Bildmetadaten und die Synchronisierung von Repositories und teilt eine Authentifizierungsdatei mit Podman und Buildah, wenn es auf demselben Host ausgeführt wird.

Wenn Sie Skopeo auf einem Behälter, montieren Sie die Authentifizierungsdatei vom Host mit der entsprechenden Option oder melden Sie sich erneut beim Container an. Um in den lokalen Speicher aufzulisten oder zu kopieren, mounten Sie je nach Bedarf auch den Speicherpfad des Benutzer- oder Systemcontainers.

Bauah Vereinfacht das Erstellen von OCI-Images von Grund auf, aus Dockerfiles oder aus laufenden Containern. Es nutzt denselben lokalen Speicher, sodass Images, die Sie mit Podman oder Buildah erstellen, unabhängig davon verfügbar sind. Sie können das Dateisystem des Arbeitscontainers mounten, Dateien kopieren und Änderungen mit Buildah-Commit.

Es gibt Nutzen Werkzeugkasten und das Bild Support-Tools um einen privilegierten Container für die Hostdiagnose zu öffnen. Mountet das Systemdateisystem auf /Gastgeber und ermöglicht Ihnen die Ausführung von Tools wie SOS-Bericht oder gcore gegen Hostprozesse, ohne das Basissystem zu verschmutzen.

Einige Red Hat-Images enthalten Lauflabels die Befehle definieren, die zur Installation, Ausführung oder Deinstallation bereit sind. Mit Podman-Container-Runlabel Sie können diese Tags auf Images wie rsyslog oder Support-Tools aufrufen, um Bereitstellungen mit den entsprechenden Berechtigungen und Mounts zu vereinfachen.

Healthchecks, Systeminformationen und Ereignisse

Die Gesundheitschecks Sie dienen dazu, festzustellen, ob der Prozess im Container fehlerfrei oder bereit ist. Sie werden mit einem auszuführenden Befehl und Parametern wie Intervall, Anzahl der Wiederholungsversuche, Timeout und Karenzzeit beim Start definiert. Sie arbeiten innerhalb des Containers. Entwerfen Sie die Prüfung daher mit Kenntnissen der Anwendung.

Wenn Sie es manuell ausführen möchten, können Sie den Check-Befehl verwenden, um den neuesten Status und seine Exit-Code; Null bedeutet Erfolg. Dies ist eine nützliche Methode zum Debuggen, wenn eine Sonde den Container als fehlerhaft markiert.

Mit Podman-System Sie erhalten globale Umgebungsinformationen: Speicher, Version, Cgroups-Unterstützung, Laufzeit und Konfiguration. Sehr nützlich, wenn Sie ein Problem mit Berechtigungen, Cgroups oder der Kernel-Kompatibilität vermuten.

Schließlich Podman-Ereignisse Sie können alle Vorgänge überwachen: Containererstellung, -start und -abschaltung, Pod-Änderungen, Image-Operationen sowie System- und Volume-Ereignisse. Jedes Ereignis enthält Zeitstempel, Typ, Status und Namen – ideal für die Verfolgung ungewöhnlichen Verhaltens.

Mit all dem oben genannten können Sie Erstellen Sie wirklich leichte Behälter und gut kontrolliert mit Podman unter Linux: Installieren Sie es auf Ihrer bevorzugten Distribution, verwenden Sie Rootless mit Bedacht, ziehen Sie UBI, wenn nötig, erstellen Sie mit Buildah, prüfen und synchronisieren Sie mit Skopeo, stellen Sie Dienste in Pods zusammen, generieren Sie YAML für Kubernetes, integrieren Sie es mit systemd und überwachen Sie Integrität und Ereignisse, ohne die Sicherheit aus den Augen zu verlieren.

Docker in Kubernetes-3 integrieren
Verwandte Artikel:
Vollständiger Leitfaden zur Integration von Docker mit Kubernetes: Konzepte, Beispiele und Best Practices