Podman ergänzt Buildah und Skopeo, indem es eine ähnliche Erfahrung wie die Docker-Befehlszeile bietet:Benutzer können eigenständige (nicht orchestrierte) Container ausführen. Und Podman benötigt keinen Daemon, um Container und Pods auszuführen, sodass wir uns leicht von großen, fetten Daemons verabschieden können. Es gibt keine Daemons im Hintergrund, die Dinge erledigen, und das bedeutet, dass Podman über systemd
in Systemdienste integriert werden kann .
In dieser Anleitung lernen wir, wie man Podman in OpenSUSE Leap installiert.
Verwandte Beiträge
- So installieren und verwenden Sie Podman in Debian 11
- So installieren und verwenden Sie Podman in Rocky Linux/Alma Linux/Centos 8
- So installieren und verwenden Sie Podman in Fedora 34/35
- So installieren und konfigurieren Sie Docker in Rocky Linux/Centos 8
- Erste Schritte mit Docker Compose mit Beispielen
- Docker als Build-Agent – Führen Sie Jenkins-Builds auf Docker aus
Voraussetzungen
Um mitzumachen, stellen Sie sicher, dass Sie über Folgendes verfügen:
- Ein aktualisierter OpenSUSE LEAP Server/Workstation
- Root-Zugriff oder Benutzer mit Sudo-Zugriff
- Zugang zum Internet
Inhaltsverzeichnis
- Sicherstellen, dass der Server auf dem neuesten Stand ist
- Podman installieren
- Befehlszeilenbeispiele
- Runa postgres persistenter Container
- Container als Systemdienste über systemd und Podman verwalten
1. Sicherstellen, dass der Server auf dem neuesten Stand ist
Verwenden Sie diesen Befehl, um sicherzustellen, dass unsere Serverpakete aktualisiert werden
sudo zypper ref
sudo zypper update -y
Lassen Sie uns sicherstellen, dass gemeinsame Pakete installiert werden
sudo zypper install -y vim
2. Podman installieren
Podman ist in den Standard-Repositories für OpenSUSE verfügbar. Installieren Sie es mit diesem Befehl:
sudo zypper install -y podman
Dieser Befehl installiert Podman und auch seine Abhängigkeiten.
Das ist alles. Jetzt können wir jetzt mit Podman spielen.
3. Beispiele für Befehlszeilen
Lassen Sie uns untersuchen, wie OpenSUSE Leap Container mit podman ausgeführt wird.
Auf Docker würden wir diesen Befehl verwenden, um einen OpenSUSE Leap-Container auszuführen:
docker run -it opensuse/leap:15.3 sh
Dies wird fehlschlagen, da kein docker
vorhanden ist Befehl auf meinem OpenSUSE-Rechner. Wir können docker durch podman ersetzen:
podman run -it opensuse/leap:15.3 sh
Lassen Sie uns einige Befehle ausführen, um zu bestätigen, dass es wie erwartet funktioniert:
~> podman run -it opensuse/leap:15.3 sh
Trying to pull registry.opensuse.org/opensuse/leap:15.3...
Getting image source signatures
Copying blob 7bc46307c67f done
Copying config 09d5e2cf44 done
Writing manifest to image destination
Storing signatures
sh-4.4# whoami
root
sh-4.4# cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.3"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.3"
PRETTY_NAME="openSUSE Leap 15.3"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.3"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
sh-4.4#
Um den Containerstatus zu prüfen, verwenden Sie podman ps
Befehl
~> podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaa09408b382 registry.opensuse.org/opensuse/leap:15.3 sh 53 seconds ago Exited (0) 13 seconds ago priceless_curran
Verwenden Sie zum Löschen des Containers podman rm
:
~> podman rm eaa09408b382
eaa09408b382ceb33a4696fed282e76df5130abf556b085ddc199eb30af54c8c
So listen Sie die Bilder auf:
~> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.opensuse.org/opensuse/leap 15.3 09d5e2cf44af 2 weeks ago 111 MB
Wir können das Bild mit dem Bild podman image rm
löschen Befehl:
~> podman image rm opensuse/leap:15.3
Untagged: registry.opensuse.org/opensuse/leap:15.3
Deleted: 09d5e2cf44af39c62b803e65991d700d8300dc34d82ff03c9cf359b9e092177a
Aus dem Obigen können wir bestätigen, dass der Podman-Befehl die gleiche Syntax wie Docker verwendet
4. Führen Sie einen persistenten Postgres-Container aus
Lassen Sie uns als Nächstes untersuchen, wie wir einen persistenten Container ausführen können. In diesem Beispiel führen wir einen Postgres 14-Container aus und stellen die Postgres-Daten auf einem lokalen Volume bereit, damit Neustarts bestehen bleiben. Da Container vergänglich sind, gehen Daten verloren, wenn wir sie nicht auf einem lokalen Volume speichern.
Ziehen Sie docker.io/library/postgres:14.0-alpine
Bild
~> podman image rm opensuse/leap:15.3
Untagged: registry.opensuse.org/opensuse/leap:15.3
Deleted: 09d5e2cf44af39c62b803e65991d700d8300dc34d82ff03c9cf359b9e092177a
[email protected]:~> podman pull docker.io/library/postgres:14.0-alpine
Trying to pull docker.io/library/postgres:14.0-alpine...
Getting image source signatures
Copying blob 82e9eb77798b done
Copying blob 5034a66b99e6 done
Copying blob 3da258773353 done
Copying blob c6b2245b2f36 done
Copying blob a0d0a0d46f8b done
Copying blob ccd761727716 done
Copying blob 028554d3b6cc done
Copying blob 2c7ee7bc69e8 done
Copying config 87440f4e7f done
Writing manifest to image destination
Storing signatures
87440f4e7f9e60607dc11a4f0590a1c69b3a1c075211df478e22b0c27fb263e6
Bilder bestätigen
~> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/postgres 14.0-alpine 87440f4e7f9e 2 weeks ago 198 MB
Untersuchen Sie das Bild mit
$ podman inspect 87440f4e7f9e
Lassen Sie uns einen Ordner einrichten, der Postgres-Daten verarbeitet, sobald wir unseren Container starten:
$ mkdir -p ~/apps/postgres/data
Führen Sie es aus
podman run -d \
-p 5432:5432 \
-v ~/apps/postgres/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=Sup3rSecre7 \
-e POSTGRES_USER=citizix_user \
-e POSTGRES_DB=citizix_db \
docker.io/library/postgres:14.0-alpine
Dies ist meine Ausgabe
~> podman run -d \
> -p 5432:5432 \
> -v ~/apps/postgres/data:/var/lib/postgresql/data \
> -e POSTGRES_PASSWORD=Sup3rSecre7 \
> -e POSTGRES_USER=citizix_user \
> -e POSTGRES_DB=citizix_db \
> docker.io/library/postgres:14.0-alpine
1607081ed241073e20e6186543c1882e977f2a91c9c061ccdd36a3e357051a44
Prozesse prüfen:
~> podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1607081ed241 docker.io/library/postgres:14.0-alpine postgres 11 seconds ago Up 10 seconds ago 0.0.0.0:5432->5432/tcp happy_jang
Bestätigen Sie damit die Container-Logs. Sie können sehen, dass es die Datenbank initialisiert
~> podman logs 1607081ed241 | head The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.utf8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/data ... ok
Lassen Sie uns eine Verbindung zur Datenbank herstellen und einige Operationen ausführen
$ podman exec -it 1607081ed241 /bin/bash
bash-5.1# psql -U citizix_user -d citizix_db;
psql (14.0)
Type "help" for help.
citizix_db=# select version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
(1 row)
citizix_db=#
Lassen Sie uns als Nächstes das Töten und Entfernen des Containers untersuchen. Wir können podman kill
verwenden um den Behälter zu stoppen. Dadurch wird der Container gestoppt, aber er ist immer noch da. Verwenden Sie podman ps -a
auflisten. Um es vollständig zu entfernen, dann podman rm -f
.
~> podman kill 1607081ed241
1607081ed241073e20e6186543c1882e977f2a91c9c061ccdd36a3e357051a44
~> podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1607081ed241 docker.io/library/postgres:14.0-alpine postgres About a minute ago Exited (137) 15 seconds ago 0.0.0.0:5432->5432/tcp happy_jang
~> podman rm -f 1607081ed241
1607081ed241073e20e6186543c1882e977f2a91c9c061ccdd36a3e357051a44
5. Verwalten von Containern als Systemdienste über systemd und Podman
Wir können Podman-Container über systemd verwalten. Lassen Sie uns ein systemd
erstellen Ressourcendatei für den Umgang mit dem Postgres-Container, den wir gerade oben erstellt haben.
Erstellen Sie eine Postgres-Podman-Datei:
sudo vim /etc/systemd/system/postgres-podman.service
Diesen Inhalt hinzufügen
[Unit]
Description=Custom Postgres Podman Container
After=network.target
[Service]
Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/podman rm -f postgrespodman
ExecStart=/usr/bin/podman run \
-p 5432:5432 \
-v /home/ec2-user/apps/postgres/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=Sup3rSecre7 \
-e POSTGRES_USER=citizix_user \
-e POSTGRES_DB=citizix_db \
docker.io/library/postgres:14.0-alpine
ExecReload=-/usr/bin/podman stop postgrespodman
ExecReload=-/usr/bin/podman rm postgrespodman
ExecStop=-/usr/bin/podman stop postgrespodman
Restart=always
RestartSec=30
[Install]
Dann können wir die systemd
neu laden catalog und starten Sie den Dienst:
sudo systemctl daemon-reload
sudo systemctl start postgres-podman
Bestätigen Sie den Dienststatus
~> sudo systemctl status postgres-podman
● postgres-podman.service - Custom Postgres Podman Container
Loaded: loaded (/etc/systemd/system/postgres-podman.service; static)
Active: active (running) since Mon 2021-11-15 05:40:34 UTC; 12s ago
Process: 23658 ExecStartPre=/usr/bin/podman rm -f postgrespodman (code=exited, status=1/FAILURE)
Main PID: 23687 (podman)
Tasks: 12 (limit: 4587)
CGroup: /system.slice/postgres-podman.service
├─23687 /usr/bin/podman run -p 5432:5432 -v /home/ec2-user/apps/postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=Sup3rSecre7 -e POSTG>
└─23828 /usr/bin/conmon --api-version 1 -c 8a18a63727ecd19d03710544e3e7ee9241e886d9fed45c1f25e29547ab61d600 -u 8a18a63727ecd19d03710544e3e7ee924>
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.477 UTC [1] LOG: starting PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine>
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.478 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.478 UTC [1] LOG: listening on IPv6 address "::", port 5432
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.482 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.486 UTC [22] LOG: database system was interrupted; last known up at 2021-11-15 05:35:02 UTC
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.497 UTC [22] LOG: database system was not properly shut down; automatic recovery in progre>
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.499 UTC [22] LOG: redo starts at 0/16FAD98
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.499 UTC [22] LOG: invalid record length at 0/16FADD0: wanted 24, got 0
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.499 UTC [22] LOG: redo done at 0/16FAD98 system usage: CPU: user: 0.00 s, system: 0.00 s, >
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.509 UTC [1] LOG: database system is ready to accept connections
Wir haben gerade einen benutzerdefinierten Systemdienst basierend auf einem Container eingerichtet, der über Podman verwaltet wird!
Schlussfolgerung
Wir konnten in diesem Handbuch untersuchen, wie Podman auf unserem OpenSUSE Leap-Server installiert wird.