Dieses Tutorial erklärt die ersten Schritte mit Podman in Linux-Betriebssystemen. Am Ende dieses Podman-Tutorials lernen Sie die Grundlagen von Podman kennen, z. B. wie Sie Bilder suchen und herunterladen, einen neuen Container aus dem Bild erstellen, einen Container ausführen, einen Container entfernen und Ihr eigenes Bild aus dem Container erstellen und vieles mehr.
Bevor wir mit Podman beginnen, vergewissern Sie sich, dass Sie Podman auf Ihrem Linux-Rechner installiert haben.
- Was ist Podman und wie wird Podman unter Linux installiert
Erste Schritte mit Podman
Podman bietet eine Befehlszeilenschnittstelle (CLI) ähnlich dem Docker Container-Engine. Tatsächlich zielt Podman darauf ab, ein direkter Ersatz für den von Docker bereitgestellten Docker-Client zu sein.
Podman- und Docker-Befehle sind fast gleich. Sie können docker
einfach ersetzen mit podman
in den meisten Docker-Befehlen. Zum Beispiel der docker run
Der Befehl wird zu podman run
und docker build
wird zu podman build
und so weiter.
Sie können sogar einen docker
erstellen Alias für podman
wie unten:
$ alias docker=podman
Ab sofort können Sie beide docker
verwenden und podman
Befehle gleichzeitig. Wenn Sie beispielsweise docker
ausführen ps, es wird automatisch podman
ausgeführt ps-Befehl. Der Übergang von Docker zu Podman ist viel einfacher geworden!
1. Podman-Hilfe erhalten
Das erste, was Sie wahrscheinlich tun möchten, nachdem Sie eine Anwendung installiert haben, ist, in deren Hilfeabschnitt nachzusehen.
Um das Podman-Hilfehandbuch zusammen mit der Liste der verfügbaren Unterbefehle und allgemeinen Optionen anzuzeigen, führen Sie Folgendes aus:
$ podman --help
Um die Verwendung eines beliebigen Unterbefehls zu lernen, zum Beispiel attach
, tun Sie einfach:
$ podman Attach --help
2. Bilder suchen
Glücklicherweise sind die von Docker und Podman erstellten Images mit dem OCI-Standard kompatibel. So kann Podman Bilder aus Containerregistrierungen wie dem Docker Hub pushen und ziehen und Quay.io .
Lassen Sie uns mit folgendem Befehl nach Alpine Linux-Images suchen:
$ podman search alpine
Wie Sie sehen können, listet Podman Alpine-Images sowohl von Docker Hub als auch von Quay auf.
Wenn Sie Bilder herunterladen, können Sie auswählen, wo Sie sie erhalten möchten.
Ebenso können Sie Bilder basierend auf Arch Linux wie folgt suchen:
$ podman archlinux durchsuchen
Docker Hub und Quay haben viele Bilder verschiedener Typen. Ob es sich um eine Anwendung oder ein Betriebssystem handelt, Sie finden die vorgefertigten Container-Images aus diesen Registrierungen.
3. Bilder herunterladen
Für die Zwecke dieses Leitfadens lade ich Redhat 8 Universal Base Image (UBI) herunter.
Um das Redhat-Image mit Podman herunterzuladen, führen Sie Folgendes aus:
$ podman pull redhat/ubi8
Sie werden aufgefordert, eine Containerregistrierung zum Herunterladen auszuwählen. Ich habe Docker-Hub gewählt. Sie sehen einen kleinen Pfeil vor der ausgewählten Registrierung.
Das Container-Image wird von der ausgewählten Registrierung heruntergeladen.
✔ docker.io/redhat/ubi8:latestTrying zu docker.io/redhat/ubi8:latest...Getting Bildquelle signaturesCopying blob a50df8fd88fe ziehen blob getan Kopieren 1cadda38f72d Kopieren Config 0ced1c7c9b Schreiben Manifest Bild getan getan destinationStoring signatures0ced1c7c9b23d0e107c7b15d5a0017abbbcf7e64e49a4c9f9efa1b9589ca8b68Unabhängig vom verwendeten Verteilungstyp können Sie verschiedene Arten von Bildern herunterladen und ausführen. Beispielsweise können Sie Alpine-Images auf einem Fedora-Host herunterladen und verwenden und umgekehrt.
$ podman pull alpine
Sie können sogar eine bestimmte Version eines Bildes herunterladen. Der folgende Befehl lädt das Ubuntu-Image der Version 20.04 herunter:
$ podman pull ubuntu:20.04Da wir Podman als Nicht-Root-Benutzer verwenden, werden alle Container-Images im Home-Verzeichnis des Benutzers gespeichert, d. h.
$HOME/.local/share/containers/storage
, statt/var/lib/containers
.$ ls ~/.local/share/containers/storage/ cache libpod mounts overlay overlay-containers overlay-images overlay-layers storage.lock tmp userns.lock4. Bilder ansehen
Um die Liste der lokal heruntergeladenen Bilder anzuzeigen, führen Sie Folgendes aus:
$ Podman-Bilder
Beispielausgabe:
REPOSITORY TAG IMAGE ID ERSTELLT GRÖSSEdocker.io/library/ubuntu 20.04 1318b700e415 vor 7 Tagen 75,2 MBdocker.io/redhat/ubi8 neuste 0ced1c7c9b23 vor 13 Tagen 234 MBdocker.io/library/alpine neuste d4ff818577bc vor 6 Wochen 5,87 MBWie Sie sehen können, listet die obige Ausgabe den Namen des Repositorys auf, in das wir die Bilder heruntergeladen haben, das Bild-Tag, die Bild-ID, wann das Bild erstellt wurde und die Bildgröße.
Für diejenigen, die sich fragen, das TAG bezieht sich auf einen bestimmten Schnappschuss des Ubuntu-Images (z. B. 20.04 und aktuell). TAG ist nur ein zusätzlicher Name für ein lokales Bild. Die BILD-ID (z. B. 1318b700e415 ) ist die eindeutige Kennung des Ubuntu-Images.
5. Container ausführen
Ein Container kann entweder mit dem Image-Tag oder der Image-ID gestartet werden.
Lassen Sie uns einen neuen Container mit dem Redhat UBI-Image mit seinem Tag starten:
$ podman run -it ubi8:latestDieser Befehl erstellt einen Redhat 8-Container mit
ubi8:latest
image und verbindet den Container mit dem Terminal, damit Sie damit interagieren können.Hier,
-i
: Ermöglicht es uns, eine interaktive Verbindung herzustellen, indem wir den Standard in (STDIN) des Containers abrufen.-t
:Weist ein neues Pseudo-Terminal innerhalb des Redhat 8-Containers zu.ubi8:latest
:Redhat 8-Container mit TAG "neueste".
Nach dem Start des Containers landen Sie automatisch in der Shell des Containers (Eingabeaufforderung):
Haben Sie die Nummer 607a288c810d
bemerkt? in der obigen Ausgabe? Es ist die Container-ID.
Vorsicht: Bitte beachten Sie, dass Container-ID und Docker-Image-ID unterschiedlich sind .
Sie können jetzt mit Ihrem Container spielen.
Um zum Terminal Ihres Hosts zurückzukehren, ohne den Container zu verlassen, drücken Sie CTRL+p
gefolgt von CTRL+q
.
Jetzt werden Sie vom Container getrennt und zur Konsole des Hostcomputers zurückgebracht. Der Container wird weiterhin im Hintergrund ausgeführt.
Um den Container zu verlassen, geben Sie einfach exit
ein aus der Container-Konsole und drücken Sie die EINGABETASTE:
# Ausfahrt
Dieser Befehl beendet den laufenden Container.
Wenn Sie einen Container mit der IMAGE-ID ausführen möchten, ersetzen Sie im vorherigen Befehl einfach das Image-TAG (ubi8:latest) durch die Image-ID (0ced1c7c9b23):
$ podman run -it 0ced1c7c9b23
Dadurch wird der Redhat 8-Container gestartet.
6. Container im Hintergrund ausführen
Sie können Container auch losgelöst im Hintergrund ausführen.
Um einen Container im getrennten Modus auszuführen, verwenden wir -d
Flagge:
$ podman run -it -d ubi8:latest
Wenn wir den Container im getrennten Modus ausführen, zeigt Podman die Container-ID in der Standardausgabe an.
a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29
Lassen Sie uns die laufenden Container mit dem Befehl:
überprüfen$ podman ps
Jetzt läuft der Container im Hintergrund.
Sie können ihn wie im folgenden Abschnitt beschrieben anhängen.
7. Anbringen und Abnehmen von Behältern
Wie im vorherigen Abschnitt erwähnt, können Sie sich sicher von einem laufenden Container trennen, indem Sie CTRL+p
drücken gefolgt von CTRL+q
. Dadurch können Sie zum Terminal des Hosts zurückkehren.
Um sich wieder an den Container anzuhängen, suchen Sie zuerst die laufende Container-ID oder ihren Namen mit podman ps
Befehl:
$ podman ps
Beispielausgabe:
CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTNAMEN607a288c810d docker.io/redhat/ubi8:latest /bin/bash vor 2 Stunden Up vor 2 Stunden cool_cannon
Hier, 607a288c810d
ist die Container-ID.
Und dann geben Sie einfach podman attach
ein Befehl gefolgt von der Container-ID wie unten:
$ podman hängt 607a288c810d an
Sie können es auch mit dem Containernamen wie unten anhängen:
$ podman hängt coole_kanone an
Um sich vom Container zu trennen, drücken Sie einfach CTRL+p
und CTRL+q
.
8. Laufende Container anzeigen
Geben Sie Folgendes ein, um die ausgeführten Container zu finden oder aufzulisten:
$ podman ps
Beispielausgabe:
CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMESe783c0202b7d docker.io/library/alpine:latest /bin/sh vor 37 Sekunden Up vor 38 Sekunden optimistic_murdock
Dadurch werden nur die laufenden Container aufgelistet. Wenn Sie sowohl laufende als auch gestoppte Container auflisten möchten, verwenden Sie -a
Flagge.
$ podman ps -a
Beispielausgabe:
CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash vor 3 Stunden Beendet (0) vor 3 Stunden wizardly_albattanid23672b15cff docker.io/redhat/ubi8:latest /bin/bash vor 3 Stunden Beendet (0) vor 3 Stunden nifty_merkle89b2c038e1ba docker.io/redhat/ubi8:latest /bin/bash vor 3 Stunden Beendet (0) vor 2 Stunden xenodochial_euler607a288c810d docker.io/redhat/ubi8:latest /bin/bash vor 2 Stunden Beendet (0) vor etwa einer Minute cool_cannone783c0202b7d docker.io/library/alpine:latest /bin/sh vor 43 Sekunden Hoch vor 43 Sekunden optimistic_murdock
9. Container nach dem Schließen automatisch löschen
Vielleicht möchten Sie einen Container testen und ihn einfach löschen, sobald Sie mit dem Container fertig sind. In diesem Fall können Sie den Container nach dem Schließen automatisch löschen, indem Sie --rm
verwenden Flagge:
$ podman run -it --rm ubi8:latest
Sobald Sie den Container verlassen, wird er automatisch gelöscht.
10. Container starten und stoppen
Wie bereits erwähnt, können wir mehrere Container mit demselben Image erstellen. Dies ist einer der größten Vorteile von Containern im Vergleich zu physischen oder virtuellen Maschinen.
Um mehrere neue Container zu erstellen, können wir den podman run
verwenden wie unter "5. Container ausführen" beschrieben Abschnitt.
Um einen bestehenden Container zu starten (einzuschalten), machen wir einfach:
$ podman starte
Auf ähnliche Weise können wir einen laufenden Befehl mit dem Befehl stoppen (ausschalten):
$ podman stop
Lass mich dir ein Beispiel zeigen, damit du es besser verstehst.
Suchen Sie zuerst die Liste aller Container:
$ podman ps -a CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash vor 2 Tagen Beendet (0) vor 2 Tagen wizardly_albattani d23672b15cff docker.io/redhat/ubi8:latest /bin/bash vor 2 Tagen Beendet (0) vor 2 Tagen nifty_merkle 89b2c038e1ba docker.io/redhat/ubi8:latest /bin/bash vor 2 Tagen Beendet (0) vor 2 Tagen xenodochial_euler 607a288c810d docker.io/redhat/ubi8:latest /bin/bash vor 2 Tagen Beendet (0) vor 2 Tagen cool_cannon e783c0202b7d docker.io/library/alpine:latest /bin/sh vor 2 Tagen Beendet (0) vor 2 Tagen optimistic_murdock
Die Namen der Container werden in den NAMEN angezeigt Abschnitt (letzte Spalte) der obigen Ausgabe.
Ich werde den Container namens wizardly_albattani
starten mit Befehl:
$ podman start Wizardly_albattani
Lassen Sie uns überprüfen, ob es gestartet wurde:
$ podman ps CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash vor 2 Tagen Up vor 7 Sekunden wizardly_albattani
Ja, es war vor 7 Sekunden.
Um den Container zu stoppen, tun Sie einfach:
$ podman stoppt Wizardly_albattani
11. Containern Namen zuweisen
Wenn Sie sich die Ausgabe früherer Befehle genau ansehen, vergibt Podman jedes Mal, wenn Sie einen Container starten, zufällige Namen. Wenn Sie Ihre Container nicht benennen, wird Podman sie automatisch für Sie benennen.
Sehen Sie sich den folgenden Screenshot an. Ich habe den gleichen Container zweimal mit dem gleichen Image gestartet. Nachdem ich den Container beendet und beim zweiten Mal neu gestartet habe, erhält er einen neuen Namen, auch wenn ich dasselbe Bild verwendet habe.
Die Container erhalten jedes Mal einen neuen Namen, nachdem wir sie geschlossen und jedes Mal gestartet haben.
Sie können den Containern aber mit --name
einen statischen Namen zuweisen Flagge wie unten:
$ podman run -it -d --name ostechnix_redhat ubi8:latest
Der obige Befehl erstellt einen neuen Container im getrennten Modus und nennt ihn ostechnix_redhat
.
Um die Liste der laufenden Container anzuzeigen, machen wir:
$ podman ps
Beispielausgabe:
CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN6fa78116dcb7 docker.io/redhat/ubi8:latest /bin/bash vor 4 Sekunden Up vor 5 Sekunden ostechnix_redhat
Haben Sie den Namen des Containers bemerkt? Wir haben einen benutzerdefinierten Namen vergeben (z. B. ostechnix_redhat
) in den Container.
12. Erstellen Sie benutzerdefinierte Bilder
Podman dient nicht nur zum Herunterladen und Ausführen von Containern aus vorkonfigurierten Images. Sie können Ihre benutzerdefinierten Bilder auch aus vorhandenen Bildern erstellen.
Starten Sie zunächst einen vorhandenen Container oder führen Sie einen neuen aus.
Ich werde einen neuen Ubuntu-Container erstellen:
$ podman run -it 1318b700e415
Jetzt befinden Sie sich im Container.
[E-Mail-geschützt]:/#
Installieren, aktualisieren oder entfernen Sie einfach alle Anwendungen im Container.
Für die Zwecke dieser Anleitung werde ich den Apache-Webserver installieren:
[email protected]:/# apt update
[email protected]:/# apt install apache2 -y
[email protected]:/# service apache2 start
Wenn Sie fertig sind, trennen Sie sich vom Container und kehren Sie zum Terminal des Hosts zurück, indem Sie CTRL+p
drücken und CTRL+q
.
Bitte beachten Sie, dass der Container noch im Hintergrund läuft!
Erstellen Sie nun das Image aus dem vorhandenen Container mit dem Befehl:
$ podman commit b871b0fd5810 ostechnix/ubuntu_apache
Hier,
b871b0fd5810
- Ubuntu-Container-ID.ostechnix
– Name des Benutzers, der den Container erstellt hat.ubuntu_apache
– Name des vom Benutzer ostechnix erstellten Images.
Überprüfen Sie nun, ob das neue Bild erstellt wurde, indem Sie die verfügbaren Bilder auflisten:
$ Podman-Bilder
Beispielausgabe:
REPOSITORY-TAG-BILD-ID ERSTELLTE GRÖSSElocalhost/ostechnix/ubuntu_apache neustes 6c9b2fb66400 vor 25 Sekunden 222 MB docker.io/library/ubuntu 20.04 1318b700e415 vor 10 Tagen 75,2 MBdocker.io/redhat/ubi8 neu 0ced1c7c9b23 vor 2 Wochen 234 MBdocker.io/library/alpine neu d4ff818577bc vor 7 Wochen 5,87 MB
Wie Sie in der obigen Ausgabe sehen, wird ein neues Bild namens ubuntu_apache
erstellt.
Beginnen wir einen neuen Container mit diesem Bild:
$ podman run -it --rm --name apache_webserver -p 8080:80 localhost/ostechnix/ubuntu_apache
Hier führe ich Container mit neu erstelltem Image im vorherigen Schritt aus. Ich bilde auch den lokalen Port 8080
ab auf dem lokalen System auf Port 80
im Behälter.
Stellen Sie nach dem Start des Containers sicher, dass der Apache-Webserver mit folgendem Befehl gestartet wird:
[email protected]:/# service apache2 start
Öffnen Sie nun Ihren Browser in Ihrem Hostsystem und navigieren Sie zu http://localhost:8080
um zu überprüfen, ob der Apache-Webserver im Container läuft.
13. Containerprotokolle anzeigen
Um alles anzuzeigen, was Sie in Ihrem Container getan haben, können Sie einfach die Protokolle des Containers mit dem folgenden Befehl überprüfen:
$ podman protokolliert apache_webserver
14. Behälter entfernen
Stellen Sie sicher, dass der Container gestoppt ist:
$ podman stop ostechnix_redhat
Nachdem Sie den Container gestoppt haben, löschen Sie ihn mit dem Befehl:
$ podman rm ostechnix_redhat
Löschen Sie auf ähnliche Weise alle Container nacheinander, wie oben gezeigt.
Das Löschen mehrerer Container nacheinander kann eine mühsame Aufgabe sein, wenn Sie eine große Anzahl von Containern haben. Anstatt einen nach dem anderen zu löschen, können Sie alle auf einmal löschen. Sei einfach vorsichtig! Gelöschte Container können nicht wiederhergestellt werden!
Um alle angehaltenen Container auf einmal zu löschen, führen Sie einfach Folgendes aus:
$ podman container prune
Geben Sie "Y"
ein zu bestätigen und ENTER
zu drücken Taste, um die Container zu löschen.
WARNUNG! Dadurch werden alle nicht ausgeführten Container entfernt. Möchten Sie wirklich fortfahren? [j/N] j 2124a1fbc85a6be7d516e747723129bd7bb9c39d3a54951c9a81407d30ded1ab54884f3375947026d4e87b99cb3a09e114c89120b101f5c8c1e614aca963975c56c20497cbcdd9599c2fa729277ecf679ac29f79a0b06af3ae1a135726465ba7607a288c810d2e605d9ba7590f8f7558ef5f96e87897a1cdde471ae9a74b36ad69bbd87b44cb6c9a582749f4ad010b6b273e65f9fe424058fdc0bc55b188d7e489b2c038e1baf6ac59f0da8e43a7efedc7ba73a18ed8d704c879ffdbc7eb7f28a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29aa14879baf0919323730539dd949231d5bb89ca4207dd36c02a741316e6d0f18b871b0fd5810f55e75bdd480d5fb34b09b0e293604f88896002a9368a607bf7ed23672b15cffc0a774227dc6b457a8bff5347073a112f6729d63ddf400f19dc7e783c0202b7d7a6664e731feeff4bdb57a79df79080046ed2b728df4bce789d2ebfd6210a6beedce43af0c41296e329d416128752ab603abd44c73117bf5dfd0
15. Bilder entfernen
Nicht mehr benötigte Bilder können Sie löschen!
Listen Sie alle heruntergeladenen Bilder mit dem Befehl auf:
$ Podman-Bilder
Beispielausgabe:
REPOSITORY TAG BILD-ID ERSTELLT GRÖSSElocalhost/ostechnix/ubuntu_apache neuste 6c9b2fb66400 vor 37 Minuten 222 MBdocker.io/library/ubuntu 20.04 1318b700e415 vor 10 Tagen 75,2 MBdocker.io/redhat/ubili8 neuste 0ced1c7c9b23 vor 2docker.io/4docker.io/vor 2 Wochen /alpine neuste d4ff818577bc vor 7 Wochen 5,87 MB
Löschen Sie nun ein Bild entweder anhand seiner Bild-ID oder seines Namens, wie unten:
$ podman rmi 6c9b2fb66400
Beispielausgabe:
Untagged:localhost/ostechnix/ubuntu_apache:latestDeleted:6c9b2fb66400138738ad12643d8461fbbb859f33d3be3c35181bb9ee9b11748d
Löschen Sie auf ähnliche Weise alle anderen nicht verwendeten Bilder,
Vorsicht: Sie können kein Image löschen, das derzeit von laufenden oder angehaltenen Containern verwendet wird.
Schlussfolgerung
In diesem umfassenden Podman-Tutorial haben wir 15 praktische Beispiele für die ersten Schritte mit Podman unter Linux bereitgestellt. Wenn Sie ein Entwickler sind, ist das Erlernen von Podman sehr wichtig, um Ihre Karriere voranzutreiben. Lernen Sie, Podman gründlich zu verwenden. Es lohnt sich!