Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / Grundlegende Containerverwaltung mit Podman

Grundlegende Containerverwaltung mit Podman

Veröffentlicht: 12.11.2024
WAS?

Container bieten eine schlanke Methode zur Virtualisierung, mit der mehrere virtuelle Umgebungen (Container) gleichzeitig auf einem einzigen Host ausgeführt werden können. Podman ist das Standardtool unter SLE Micro zum Verwalten der Container.

WARUM?

Der Artikel enthält grundlegende Informationen zu Podman und erklärt, wie es zur Verwaltung von Containern verwendet werden kann.

AUFWAND

Es dauert etwa 30 Minuten, um den Artikel zu lesen.

ZIEL

Sie verstehen Podman, Container-Images und Container.

ANFORDERUNGEN
  • Installierter Podman

1 Grundlagen zu Containern

Container bieten eine schlanke Methode zur Virtualisierung, mit der mehrere virtuelle Umgebungen (Container) gleichzeitig auf einem einzigen Host ausgeführt werden können. Im Gegensatz zu Technologien wie Xen oder KVM, bei denen der Prozessor eine komplette Hardwareumgebung simuliert und ein Hypervisor virtuelle Maschinen steuert, bieten Container eine Virtualisierung auf Betriebssystemebene, bei der der Kernel die isolierten Container steuert.

Vorteile der Verwendung von Containern
  • Mit Containern ist es möglich, Anwendungen in eigenständigen Units zu isolieren.

  • Container bieten eine nahezu native Leistung. Je nach Laufzeit kann ein Container den Host-Kernel direkt verwenden und damit den Overhead minimieren.

  • Es ist möglich, Netzwerkschnittstellen zu steuern und Ressourcen innerhalb von Containern über Kernel-Kontrollgruppen anzuwenden.

Beschränkungen von Containern
  • Container laufen auf dem Kernel des Hostsystems, sodass sie keine anderen Kernel oder unterschiedliche Kernelversionen verwenden können.

  • Die Sicherheit von Containern hängt vom Hostsystem ab. Containerisierte Anwendungen können über AppArmor- oder SELinux-Profile gesichert werden. Das Sichern von Containern ist aufgrund der größeren Angriffsfläche schwieriger als das Sichern virtueller Maschinen.

2 Informationen zu Podman

Podman ist der Kurzname für das Pod Manager Tool. Es handelt sich um eine daemonlose Container-Engine, mit der Sie Anwendungen mithilfe von Containern und Container-Images ausführen und bereitstellen können. Podman umfasst eine Kommandozeilenschnittstelle für die Verwaltung der Container.

Da Podman nicht über einen Daemon verfügt, ist eine Integration in systemd möglich. Dies ermöglicht die Steuerung von Containern über systemd-Units. Sie können diese Units für vorhandene Container erstellen und auch Units generieren, mit denen Container gestartet werden, wenn sie noch nicht im System vorhanden sind. Podman kann systemd in Containern ausführen.

Mit Podman können Sie Ihre Container in Pods organisieren. Pods verwenden dieselbe Netzwerkschnittstelle und dieselben Ressourcen. Ein typischer Anwendungsfall für die Organisation einer Gruppe von Containern in einem Pod ist ein Container, auf dem eine Datenbank ausgeführt wird, und ein Container mit einem Client, der auf die Datenbank zugreift.

2.1 Installation von Podman

Podman ist standardmäßig in SLE Micro enthalten. Wenn Podman jedoch fehlt, können Sie ihn wie unten beschrieben installieren:

  1. Führen Sie folgenden Befehl aus:

    > sudo transactional-update pkg install podman*
  2. Starten Sie Ihr System neu, um in den neuen Snapshot zu booten.

3 Abrufen von Container-Images

Zum Ausführen eines Containers benötigen Sie ein Image. Ein Image enthält alle Abhängigkeiten, die für die Ausführung einer Anwendung erforderlich sind. Sie können Images aus einer Image-Registrierung abrufen. Die verfügbaren Registrierungen sind in der Konfigurationsdatei /etc/containers/registries.conf definiert. Wenn Sie eine lokale Image-Registrierung haben oder andere Registrierungen verwenden möchten, tragen Sie die Registrierungen in die Konfigurationsdatei ein.

Wichtig
Wichtig: Keine Tools zum Erstellen von Images in SLE Micro

SLE Micro umfasst keine Tools zum Erstellen benutzerdefinierter Images. Die einzige Möglichkeit, ein Image zu erhalten, besteht darin, das Image aus einer Image-Registrierung abzurufen.

Anmerkung
Anmerkung: openSUSE-Registrierung und Docker Hub standardmäßig nicht aktiviert

Die openSUSE-Registrierung und Docker Hub sind in der Standardinstallation nicht konfiguriert. Wenn Sie die Container-Images von diesen Registrierungen herunterladen möchten, müssen Sie die Registrierungen wie folgt zur Datei /etc/containers/registries.conf hinzufügen:

unqualified-search-registries = ["registry.suse.com", "registry.opensuse.org", "docker.io"]

Das Kommando podman pull ruft ein Image aus einer Image-Registrierung ab. Die Syntax lautet wie folgt:

# podman pull [OPTIONS]SOURCE

Als source kann ein Image ohne den Registrierungsnamen angegeben werden. In diesem Fall versucht Podman, das Image aus allen Registrierungen abzurufen, die in der Datei /etc/containers/registries.conf konfiguriert sind. Das Standard-Image-Tag lautet latest. Der Standardspeicherort der abgerufenen Images lautet /var/lib/containers/storage/overlay-images/.

So rufen Sie alle zulässigen Optionen für das Kommando podman pull ab:

# podman pull --help
Anmerkung
Anmerkung: Abrufen von Images über Cockpit

Wenn Sie mit Cockpit arbeiten, können Sie Images auch über das Menü Podman containers aus einer Image-Registrierung abrufen; klicken Sie hierzu auf + Get new image.

In Podman können Sie Images in einer Image-Registrierung oder in einer Registrierungsliste mit folgendem Kommando suchen:

# podman search IMAGE_NAME

Alternativ können Sie mit dem skopeo-Tool Container-Images und Image-Repositorys verwalten. Weitere Informationen finden Sie im folgenden Abschnitt.

3.1 skopeo

skopeo ist ein Kommandozeilenprogramm zum Verwalten, Überprüfen und Signieren von Container-Images und Image-Repositorys. skopeo ermöglicht Ihnen die Inspektion von Containern und Repositorys in Remote- und lokalen Container-Registrierungen und erleichtert auch das Kopieren von Container-Images zwischen verschiedenen Speicher-Backends.

skopeo arbeitet mit den folgenden Registrierungstypen:

Container-Speicher:IMAGE_REFERENCE

Ein Image, das sich in einem lokalen Image-Speicher befindet.

docker://IMAGE_REFERENCE

Ein Image in einer Registrierung.

skopeo bietet mehrere Kommandos zur Verwaltung von Images und Registrierungen:

inspect

Das Kommando ruft das Repository-Manifest ab und kann Ihnen Informationen wie Tags anzeigen, die für das angegebene Repository verfügbar sind, Bezeichnungen eines Container-Images, das Betriebssystem eines Images usw.

Das Kommando hat die folgende Syntax:

              >  skopeo inspect REGISTRY_TYPEIMAGE_NAME

Es folgt ein Anwendungsbeispiel:

> skopeo inspect docker://registry.suse.com/suse/pcp:latest
{
  "Name": "registry.suse.com/suse/pcp",
  "Digest": "sha256:eee17c009fb8b05e5825a8c9658d972ab13a17541180bd7a1348fccc6e4fc77f",
  "RepoTags": [
      "5",
      "5-12.54",
      "5-13.10",
      ...
      ],
  "Created": "2023-06-19T16:59:01.617731565Z",
  "DockerVersion": "20.10.23-ce",
  "Labels": {
      "com.suse.application.pcp.created": "2023-06-19T16:58:29.786850402Z",
      "com.suse.application.pcp.description": "Performance Co-Pilot (pcp) container image based on the SLE Base Container Image. This container image is not supported when using a container runtime other than podman.",
      ...
      ],
      "Architecture": "amd64",
  "Os": "linux",
  "Layers": [
      "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e",
      "sha256:19793da49ce886a67aa62657dc24a105a26d63568ce27de241246bc6cc9bc008",
      "sha256:403f9ef6c98d4cf277caf3166ca4455817828e33c8b699237bb8eb24cb2b41bf"
  ],
  "LayersData": [
      {
          "MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
          "Digest": "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e",
          "Size": 47291175,
          "Annotations": null
      },
      ...
  ],
  "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
copy

Mit dem Kommando können Sie Container-Images zwischen Registrierungen, Container-Speicher-Backends und lokalen Verzeichnissen kopieren.

Es folgt ein Anwendungsbeispiel:

>  skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory
delete

Zum Markieren eines Images zum späteren Entfernen durch den Garbage Collector der Registrierung.

>  skopeo delete docker://registry.example.com/example/pause:latest
sync

Zum Synchronisieren von Images zwischen Registrierungs-Repositorys und lokalen Verzeichnissen.

4 Arbeiten mit Containern

4.1 Ausführen von Containern

Nachdem Sie das Container-Image abgerufen haben, können Sie Container auf der Grundlage dieses Images erstellen. Mit dem Kommando podman run können Sie eine Instanz des Image ausführen. Die Syntax für das Kommando lautet wie folgt:

# podman run [OPTIONS] IMAGE [CONTAINER_NAME]

IMAGE wird im Format Transport:Pfad angegeben. Falls Transport nicht angegeben ist, wird standardmäßig docker verwendet. Der Pfad kann auf eine bestimmte Image-Registrierung verweisen. Wird diese Angabe ausgelassen, sucht Podman das Image in den Registrierungen, die in der Datei /etc/containers/registries.conf definiert sind. In diesem Beispiel wird ein Container mit dem Namen sles15 auf der Grundlage des sle15-Image ausgeführt:

# podman run registry.opensuse.org/suse/templates/images/sle-15-sp4/base/images/suse/sle15 sles15

Hier finden Sie eine Liste der häufig verwendeten Optionen. Eine vollständige Liste der verfügbaren Optionen erhalten Sie mit folgendem Kommando: podman run --help

--detach, -d

Der Container wird im Hintergrund ausgeführt.

--env, -e=env

Bei dieser Option sind willkürliche Umgebungsvariablen zulässig, mit denen der Prozess innerhalb des Containers gestartet werden kann. Wenn eine Umgebungsvariable ohne Wert angegeben wird, überprüft Podman die Hostumgebung auf einen Wert und legt die Variable nur fest, wenn sie auf dem Host festgelegt ist.

--help

Gibt Hilfe für das Kommando podman run aus.

--hostname=Name, -h

Legt den Container-Hostnamen fest, der im Container verfügbar ist.

--pod= Name

Führt den Container in einem vorhandenen Pod aus. Zum Erstellen eines Pods stellen Sie dem Pod-Namen den Wert new: voran.

--read-only

Hängt das Root-Dateisystem des Containers als Nur-Lese-Dateisystem ein.

--systemd=true|false|always

Führt den Container im systemd-Modus aus. Der Standardwert ist „true“.

4.2 Auflisten von Containern

In Podman können Sie eine Liste aller ausgeführten Container mit dem Kommando podman ps abrufen. Die allgemeine Syntax für das Kommando lautet:

# podman  ps [OPTIONS]

Kommandooptionen können die angezeigten Informationen ändern. Mit der Option --all werden beispielsweise alle Container ausgegeben, die von Podman erstellt wurden (nicht nur die ausgeführten Container).

So erhalten Sie eine vollständige Liste der Optionen für podman ps:

# podman ps --help

4.3 Stoppen von Containern

Wenn das Kommando podman run erfolgreich abgeschlossen wurde, wurde ein neuer Container gestartet. Mit folgendem Kommando können Sie den Container stoppen:

# podman stop [OPTIONS]CONTAINER

Sie können den Namen oder die Kennung eines einzelnen Containers angeben oder auch eine durch Leerzeichen getrennte Liste mit Containern. Das Kommando akzeptiert die folgenden Optionen:

--all, -a

Stoppt alle ausgeführten Container.

--latest, -l

Hier wird kein Containername angegeben, sondern der zuletzt erstellte Container gestoppt.

--time, -t= Sekunden

Wartezeit (in Sekunden), bevor das Stoppen des Containers erzwungen wird.

So rufen Sie alle zulässigen Optionen für das Kommando podman stop ab:

# podman stop --help

4.4 Starten von Containern

Um bereits erstellte, jedoch gestoppte Container zu starten, verwenden Sie das Kommando podman start. Die Syntax für das Kommando lautet wie folgt:

# podman start [OPTIONS]CONTAINER

CONTAINER kann ein Containername oder eine Containerkennung sein.

Eine vollständige Liste der zulässigen Optionen für podman start erhalten Sie mit folgendem Kommando:

# podman start --help

4.4.1 Übernehmen von geänderten Containern

Sie können einen neuen Container mit bestimmten Attributen ausführen, die kein Bestandteil des ursprünglichen Images sind. Mit dem Kommando podman commit können Sie den Container mit diesen Attributen als neues Image speichern:

# podman commit [OPTIONS]CONTAINERIMAGE

CONTAINER ist ein Containername oder eine Containerkennung. IMAGE ist der Name des neuen Image. Wenn der Image-Name nicht mit einem Registrierungsnamen beginnt, wird der Wert localhost verwendet.

4.5 Entfernen von Containern

Sollen ein oder mehrere nicht verwendete Container vom Host entfernt werden, verwenden Sie das Kommando podman rm wie folgt:

# podman rm [OPTIONS]CONTAINER

CONTAINER kann ein Containername oder eine Containerkennung sein.

Das Kommando entfernt den angegebenen Container nicht, wenn der Container ausgeführt wird. Um einen ausgeführten Container zu entfernen, verwenden Sie die Option -f.

So erhalten Sie eine vollständige Liste der Optionen für podman rm:

# podman rm --help
Anmerkung
Anmerkung: Löschen aller gestoppten Container

Sie können alle gestoppten Container mit einem einzigen Kommando vom Host löschen:

# podman container prune

Stellen Sie sicher, dass jeder angehaltene Container entfernt werden soll, bevor Sie das Kommando ausführen, da Sie sonst möglicherweise Container entfernen, die noch verwendet werden und nur vorübergehend beendet wurden.

5 Arbeiten mit Pods

Container können zu einem Pod gruppiert werden. Die Container im Pod teilen sich dann Netzwerk, PID und IPC-Namespace. Pods können mit podman pod-Kommandos verwaltet werden. Dieser Abschnitt vermittelt einen Überblick über die Kommandos für die Verwaltung von Pods.

5.1 Erstellen von Pods

Mit dem Kommando podman pod create wird ein Pod erstellt. Die Syntax für das Kommando lautet:

# podman pod create [OPTIONS]

Das Kommando gibt die Pod-ID aus. Standardmäßig werden die Pods nur erstellt, nicht jedoch gestartet. Zum Starten eines Pods können Sie einen Container im Pod ausführen oder die Anweisungen in Abschnitt 5.3, „Starten/Stoppen/Neustarten von Pods“ befolgen.

Anmerkung
Anmerkung: Pod-Standardnamen

Wenn Sie keinen Pod-Namen mit der Option --name angeben, weist Podman einen Standardnamen für den Pod zu.

Eine vollständige Liste der zulässigen Optionen erhalten Sie mit folgendem Kommando:

# podman pod create --help

5.2 Auflisten von Pods

So rufen Sie eine Liste mit allen Pods auf:

# podman pod list

Die Ausgabe sieht wie folgt aus:

POD ID        NAME               STATUS   CREATED       # OF CONTAINERS  INFRA ID
30fba506fecb  upbeat_mcclintock  Created  19 hours ago  1                4324f40c9651
976a83b4d88b  nervous_feynman    Running  19 hours ago  2                daa5732ecd02

Jeder Pod enthält den Container INFRA; die Anzahl der Container in einem Pod ist daher immer größer als null.

5.3 Starten/Stoppen/Neustarten von Pods

Nach dem Erstellen eines Pods müssen Sie ihn starten, da er sich nicht standardmäßig im Status running befindet. In den Kommandos unten kann POD ein Pod-Name oder eine Pod-Kennung sein.

So starten Sie einen Pod:

# podman pod start [OPTIONS]POD

So erhalten Sie eine vollständige Liste der zulässigen Optionen:

# podman pod start --help

Zum Stoppen eines Pods verwenden Sie das Kommando podman pod stop wie folgt:

# podman pod stop POD

Zum Neustarten eines Pods verwenden Sie das Kommando podman pod restart wie folgt:

# podman pod restart POD

5.4 Verwalten von Containern in einem Pod

Um einem Pod einen neuen Container hinzuzufügen, verwenden Sie das Kommando podman run mit der Option --pod. Die allgemeine Syntax des Kommandos lautet:

# podman run [OPTIONS] --pod POD_NAME IMAGE

Ausführliche Informationen zum Kommando podman run finden Sie in Abschnitt 4.1, „Ausführen von Containern“.

Anmerkung
Anmerkung: Nur neue Container können einem Pod hinzugefügt werden

Mit dem Kommando podman start ist es nicht möglich, einen Container in einem Pod zu starten, wenn der Container dem Pod nicht bei der ersten Ausführung des Containers hinzugefügt wurde.

Sie können einen Container nicht aus einem Pod entfernen und den Container laufen lassen, da der Container selbst vom Host entfernt wird.

Andere Aktionen wie Start, Neustart und Stopp können für bestimmte Container ausgeführt werden, ohne den Status des Pods zu beeinträchtigen.

5.5 Überwachen der Prozesse in Pods

Um alle Container in allen Pods anzuzeigen, führen Sie folgendes Kommando aus:

# podman ps -a --pod

Die Ausgabe des Kommandos sieht in etwa wie folgt aus:

CONTAINER ID  IMAGE                       COMMAND    CREATED       STATUS                 [...]
4324f40c9651  k8s.gcr.io/pause:3.2                   21 hours ago  Created
daa5732ecd02  k8s.gcr.io/pause:3.2                   22 hours ago  Up 3 hours ago
e5c8e360c54b  localhost/test:latest       /bin/bash  3 days ago    Exited (137) 3 days ago
82dad15828f7  localhost/opensuse/toolbox  /bin/bash  3 days ago    Exited (137) 3 days ago
1a23da456b6f  docker.io/i386/ubuntu       /bin/bash  4 days ago    Exited (0) 6 hours ago
df890193f651  localhost/opensuse/toolbox  /bin/bash  4 days ago    Created

Die ersten beiden Datensätze sind die INFRA-Container der einzelnen Pods auf der Grundlage des Image k8s.gcr.io/pause:3.2. Andere Container in der Ausgabe sind eigenständige Container, die nicht zu einem Pod gehören.

5.6 Entfernen von Pods

Zum Entfernen von Pods haben Sie zwei Möglichkeiten. Mit dem Kommando podman pod rm können Sie einen oder mehrere Pods entfernen. Alternativ können Sie alle gestoppten Pods mit dem Kommando podman pod prune entfernen.

Um einen oder mehrere Pods zu entfernen, führen Sie das Kommando podman pod rm wie folgt aus:

# podman pod rm POD

POD kann ein Pod-Name oder eine Pod-Kennung sein.

Sollen alle aktuell gestoppten Pods entfernt werden, verwenden Sie das Kommando podman pod prune. Vergewissern Sie sich, dass die einzelnen gestoppten Pods tatsächlich entfernt werden sollen, bevor Sie das Kommando podman pod prune ausführen. Ansonsten könnten Sie Pods entfernen, die noch in Gebrauch sind.