Podman wurde von RedHat entwickelt und ist eine kostenlose und daemonlose Open-Source-Container-Engine, die als direkter Ersatz für die beliebte Docker-Laufzeit-Engine konzipiert ist. Genau wie Docker erleichtert es das Erstellen, Ausführen, Bereitstellen und Freigeben von Anwendungen mithilfe von Container-Images und OCI-Containern ( Open Container Initiative ). Podman verwendet Benutzer- und Netzwerk-Namespaces und gilt im Vergleich zu Docker als isolierter und sicherer. Die meisten Befehle in Docker funktionieren in Podman. Wenn Sie also mit der Ausführung von Docker-Befehlen vertraut sind, wird die Verwendung von podman so ein Kinderspiel sein.
In dieser Anleitung lernen wir, wie man podman installiert auf Debian 11 Volltreffer.
Podman unter Debian 11 installieren
Die Podman-Pakete, -Bibliotheken und -Abhängigkeiten werden bereits in den offiziellen Debian-Repositories gehostet. Daher können Sie podman einfach mit dem APT-Paketmanager installieren.
Aktualisieren Sie zuerst die Paketlisten:
$ sudo apt update
Installieren Sie als Nächstes die Podman-Container-Engine wie folgt:
$ sudo apt install podman
Wenn Sie zum Fortfahren aufgefordert werden, geben Sie „Y“ ein und drücken Sie die EINGABETASTE.
Um die installierte Version von Podman zu überprüfen, führen Sie Folgendes aus:
$ podman --version
Führen Sie den folgenden Befehl aus, um weitere Details über die Podman-Container-Engine zu erhalten:
$ sudo podman info
Sie sollten eine Flut von Ausgaben sehen, die komplizierte Details anzeigen, wie z. B. das, was wir unten haben.
Konfigurieren Sie die Podman-Registrierungen
Die Registrierungsdatei registry.conf
ist eine Konfigurationsdatei, die die zu verwendenden Containerregistrierungen angibt, wenn Sie ein Image per Push oder Pull übertragen möchten. Der vollständige Pfad zur Datei lautet /etc/containers/registries.conf
. Es gibt verschiedene Containerregistrierungen, darunter Docker Hub, Quay.io, RedHat und viele mehr.
Sie können die Datei wie gezeigt mit Ihrem Texteditor anzeigen
# sudo /etc/containers/registries.conf
In Docker ist Docker Hub die einzige Containerregistrierung. Podman bietet Benutzern mehr Freiheit beim Suchen und Abrufen von Bildern aus jeder Registrierung. Sie können die Liste der Containerregistrierungen definieren, indem Sie die folgende Zeile hinzufügen.
unqualified-search-registries = [ 'registry.access.redhat.com', 'registry.redhat.io', 'docker.io']
Beim Ausführen der podman search
oder podman pull
Befehl, wird podman diese Registrierungen beginnend mit der ersten in dieser Reihenfolge kontaktieren. Speichern Sie die Änderungen und beenden Sie die Datei.
Bilder suchen
Bevor Sie Container-Images ziehen, ist es ratsam, in verschiedenen Registrierungen nach ihrer Verfügbarkeit zu suchen.
Zum Beispiel
$ sudo podman search nginx
Die Ausgabe zeigt Ihnen eine Fülle von Informationen, darunter den Registrierungsnamen, den Bildnamen und eine kurze Beschreibung.
Anmelden bei einer Registrierung
Bevor Sie mit dem Pullen oder Pushen von Images beginnen, müssen Sie sich bei einer Registrierung anmelden. Im folgenden Beispiel melde ich mich bei meinem Redhat-Konto an, wodurch ich tatsächlich auf die Registrierung zugreifen kann.
$ sudo podman login registry.access.redhat.com
Um sich von der Registrierung abzumelden, führen Sie den folgenden Befehl aus:
$ sudo podman logout registry.access.redhat.com
Bild abrufen
Um ein Bild abzurufen, verwenden Sie die Syntax:
$ sudo podman pull image_name
Um beispielsweise die offiziellen Build-Images von Nginx abzurufen, führen Sie den folgenden Befehl aus:
$ sudo podman pull docker.io/library/nginx
Lassen Sie uns versuchen, ein anderes Bild zu ziehen. Wir ziehen das offizielle MongoDB-Image wie folgt.
$ sudo podman pull docker.io/library/mongo
Auflisten eines Bildes
Um alle Bilder aufzulisten, führen Sie den Befehl aus.
$ sudo podman images
Container aus einem Bild erstellen
Nachdem sich unsere Images nun auf dem Debian-System befinden, können wir einen Container mit der gezeigten Syntax starten. Die Option -d führt den Container im Hintergrund aus und den --name
Option gibt einen benutzerdefinierten Namen für den Container an
$ sudo podman run -d --name container_name image
Um beispielsweise einen Container namens webserv1 aus dem Nginx-Image im Hintergrund zu starten, führen Sie den folgenden Befehl aus:
$ sudo podman run -d --name webserv1 docker.io/library/nginx
Sie können mehrere Container aus demselben Image starten. Lassen Sie uns einen weiteren Container namens webserv2 aus demselben Nginx-Image starten.
$ sudo podman run -d --name webserv2 docker.io/library/nginx
Container auflisten
In diesem Abschnitt sehen wir uns verschiedene Befehle an, die Sie mit Containern verwenden können.
Um die derzeit laufenden Container zu überprüfen, geben Sie den folgenden Befehl ein:
$ sudo podman ps
Die Ausgabe wird in Spalten dargestellt, die Informationen wie Container-ID, IMAGE-Name, den Befehl, der den Container ausführt, Erstellungsdatum und Status enthalten.
Um alle Container aufzulisten, einschließlich derjenigen, die beendet wurden, führen Sie Folgendes aus:
$ sudo podman ps -a
Stoppen eines Containers
Um einen Container zu stoppen, verwenden Sie die Syntax
$ sudo podman stop CONTAINER_ID
ODER
$ sudo podman stop container_name
Im Beispiel unten habe ich den ersten aufgelisteten Container anhand seiner Container-ID gestoppt
$ sudo podman stop 9daeaabdfdfc
Sie können mit podman ps
überprüfen, ob der Container gestoppt wurde Befehl. Wir können deutlich sehen, dass nach dem Stoppen des Bildes nur noch 1 Bild läuft.
Der podman ps -a
Der Befehl listet beide Container auf, die den gerade gestoppten Container enthalten.
$ sudo podman ps -a
Starten eines Containers
Verwenden Sie zum Starten eines Containers die Syntax:
$ sudo podman start CONTAINER_ID
ODER
$ sudo podman start container_name
Um beispielsweise webserv1 zu starten, führen Sie Folgendes aus:
$ sudo podman start webserv1
Greifen Sie auf die Shell eines Containers zu
Der Zugriff auf die Shell eines Containers lässt sich am besten anhand eines Containers eines Betriebssystems demonstrieren.
Hier werden wir ein Ubuntu-Image herunterladen oder ziehen:
$ sudo podman pull docker.io/library/ubuntu
Aus dem Image erstellen oder starten wir einen Container und erhalten mithilfe von -it
Zugriff auf die Shell Option.
$ sudo podman run --name ubuntu -it docker.io/library/ubuntu /bin/bash
- -i, –interactive STDIN offen halten, auch wenn es nicht angehängt ist
- -t, –tty Weist ein Pseudo-TTY zu. Der Standardwert ist falsch
Überprüfen Sie die Protokolle eines Containers
Um die Protokolle eines Containers zu überprüfen, verwenden Sie die Syntax:
$ sudo podman logs container_name
Zum Beispiel:
$ sudo podman logs webserv2
Containerstatistik anzeigen
Um die Statistiken aller laufenden Container anzuzeigen, führen Sie Folgendes aus:
$ sudo podman stats
Untersuchen Sie einen Behälter
Um komplizierte Details über einen Container auszudrucken, verwenden Sie die Untersuchungsoption:
$ sudo podman inspect webserv2
Dies gibt eine lange Ausgabe im JSON-Format aus.
Verwenden Sie die Option --format, um die Ausgabe zu filtern. Zum Beispiel, um die IP-Adresse des webserv2-Containers auszugeben
$ sudo podman inspect webserv2 --format '{{.NetworkSettings.IPAddress}}'
Sie können dann zusätzliche Informationen zur IP ausführen, zum Beispiel mit curl HTTP-Header abrufen.
$ curl -I ip-address
Container löschen
Um einen Container vollständig zu entfernen oder zu löschen, stoppen Sie zuerst den Container, falls er ausgeführt wird, und entfernen Sie ihn schließlich. In diesem Beispiel haben wir den Container websev1 angehalten und entfernt.
$ sudo podman stop webserv1
Entfernen Sie dann den angehaltenen Behälter.
$ sudo podman rm webserv1
Entfernen eines Bildes
Um ein Image zu entfernen, stellen Sie zunächst sicher, dass Sie alle Container beendet und entfernt haben, die von dem Image gestartet wurden. Als nächstes verwenden Sie rmi
Option wie gezeigt.
$ sudo podman rmi image_name
Um beispielsweise das Ubuntu-Image zu entfernen, führen Sie den folgenden Befehl aus:
$ sudo podman rmi docker.io/library/ubuntu
Installieren Sie den neusten Podman - Compile from source
Sie können die neueste Version von Podman testen, indem Sie die Entwicklungsversion von der Quelle installieren.
01. Abhängigkeiten erstellen und ausführen
sudo apt-get install \
btrfs-progs \
git \
golang-go \
go-md2man \
iptables \
libassuan-dev \
libbtrfs-dev \
libc6-dev \
libdevmapper-dev \
libglib2.0-dev \
libgpgme-dev \
libgpg-error-dev \
libprotobuf-dev \
libprotobuf-c-dev \
libseccomp-dev \
libselinux1-dev \
libsystemd-dev \
pkg-config \
runc \
make \
libapparmor-dev \
gcc \
cmake \
uidmap \
libostree-dev
02. Conmon installieren
Der Conmon ist der Container Monitor, ein kleines C-Programm, dessen Aufgabe es ist, den primären Prozess des Containers zu überwachen.
git clone https://github.com/containers/conmon
cd conmon
make
sudo make podman
sudo cp /usr/local/libexec/podman/conmon /usr/local/bin/
03. Runc installieren
So installieren Sie die neueste Version von runc
git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="selinux seccomp"
sudo cp runc /usr/bin/runc
03. Container Network Interface (CNI) installieren
Das CNI-Plugin wird verwendet, um eine Netzwerkschnittstelle in den Namensraum des Containernetzwerks einzufügen.
git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.sh
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni
Richten Sie das Netzwerk ein
sudo mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | sudo tee /etc/cni/net.d/99-loopback.conf
Konfiguration hinzufügen
sudo mkdir -p /etc/containers
sudo curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
sudo curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json
04. Installieren Sie Podman von der Quelle
git clone https://github.com/containers/podman/ $GOPATH/src/github.com/containers/podman
cd $GOPATH/src/github.com/containers/podman
make
sudo make install
$ podman --version
podman version 4.0.0-dev
Schlussfolgerung
Wir hoffen, dass wir Ihnen eine solide Grundlage auf Ihrem Weg zu einem besseren Profi bei der Verwendung von Podman zum Erstellen und Verwalten von Containern geboten haben. Diese Anleitung führte Sie durch die Installation von podman auf Debian 11 Buster.