GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So installieren und verwenden Sie Podman in Rocky Linux/Alma Linux/Centos 8

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 Rocky Linux/Alma Linux/Centos 8 installiert. Dieser Beitrag funktioniert auch für RHEL 8-Derivate wie Oracle Linux.

Verwandte Beiträge

  • So installieren und verwenden Sie Podman in Debian 11
  • So installieren und verwenden Sie Podman in Fedora 34/35
  • So installieren und verwenden Sie Podman in OpenSUSE Leap 15.3
  • 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 aktualisiertes Rocky Linux/Centos 8
  • Root-Zugriff oder Benutzer mit Sudo-Zugriff
  • Zugang zum Internet

Inhaltsverzeichnis

  1. Sicherstellen, dass der Server auf dem neuesten Stand ist
  2. Podman installieren
  3. Befehlszeilenbeispiele
  4. Führen Sie einen persistenten Postgres-Container aus
  5. 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 dnf update -y

Lassen Sie uns sicherstellen, dass gemeinsame Pakete installiert werden

sudo dnf install -y vim

2. Podman installieren

Podman ist im standardmäßigen AppStream-Repository für CentOS 8 und Stream verfügbar. Installieren Sie es mit diesem Befehl:

sudo dnf install -y podman

Dieser Befehl installiert Podman und auch seine Abhängigkeiten: atomic-registriesrunCskopeo-containers , und SELinux-Richtlinien.

Das ist alles. Jetzt können wir jetzt mit Podman spielen.

3. Beispiele für Befehlszeilen

Lassen Sie uns untersuchen, wie Rocky Linux Container mit podman ausgeführt wird.

Auf Docker würden wir diesen Befehl verwenden, um einen Rocky-Linux-Container auszuführen:

docker run -it rockylinux/rockylinux:8.4 sh

Dies wird fehlschlagen, da kein docker vorhanden ist Befehl auf meinem Rocky Linux Server. Wir können docker durch podman ersetzen:

podman run -it rockylinux/rockylinux:8.4 sh

Lassen Sie uns einige Befehle ausführen, um zu bestätigen, dass es wie erwartet funktioniert:

$ podman run -it rockylinux/rockylinux:8.4 sh
✔ docker.io/rockylinux/rockylinux:8.4
Trying to pull docker.io/rockylinux/rockylinux:8.4...
Getting image source signatures
Copying blob 1b474f8e669e done
Copying config 333da17614 done
Writing manifest to image destination
Storing signatures
sh-4.4# ps ax
    PID TTY      STAT   TIME COMMAND
      1 pts/0    Ss     0:00 sh
      6 pts/0    R+     0:00 ps ax
sh-4.4# exit
exit

Verwenden Sie zum Überprüfen des Containerstatus podman ps Befehl

$ podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED        STATUS                    PORTS       NAMES
5f81814c698e  docker.io/rockylinux/rockylinux:8.4  sh          3 minutes ago  Exited (0) 3 minutes ago              competent_pasteur

Verwenden Sie zum Löschen des Containers podman rm :

$ podman rm 5f81814c698e
5f81814c698ef09484c66d4427fda5de21c4dca1766a67ee108d256117460d71
$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
docker.io/rockylinux/rockylinux  8.4         333da17614b6  4 months ago  234 MB
[[email protected] ~]$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7

So listen Sie die Bilder auf:

$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
docker.io/rockylinux/rockylinux  8.4         333da17614b6  4 months ago  234 MB

Wir können das Bild mit dem Bild podman image rm löschen Befehl:

$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7

Aus dem Obigen können wir bestätigen, dass der Podman-Befehl die gleiche Syntax wie Docker verwendet

Führen Sie einen dauerhaften 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 pull docker.io/library/postgres:14.0-alpine
✔ 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 c6b2245b2f36 done
Copying blob a0d0a0d46f8b done
Copying blob 3da258773353 done
Copying blob ccd761727716 done
Copying blob 5034a66b99e6 done
Copying blob 2c7ee7bc69e8 done
Copying blob 028554d3b6cc 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:Z \
    -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:Z \
>     -e POSTGRES_PASSWORD=Sup3rSecre7 \
>     -e POSTGRES_USER=citizix_user \
>     -e POSTGRES_DB=citizix_db \
>     docker.io/library/postgres:14.0-alpine
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbd

Prozesse prüfen:

$ podman ps
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS             PORTS                   NAMES
9aa1fb68beee  docker.io/library/postgres:14.0-alpine  postgres    46 seconds ago  Up 47 seconds ago  0.0.0.0:5432->5432/tcp  gracious_jemison

Bestätigen Sie damit die Container-Logs. Sie können sehen, dass es die Datenbank initialisiert

$ podman logs 9aa1fb68beee | head
performing post-bootstrap initialization ... sh: locale: not found
2021-11-11 09:05:00.481 UTC [30] WARNING:  no usable system locales were found
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 9aa1fb68beee /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 9aa1fb68beee
9aa1fb68beee
$ podman ps -a
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS                       PORTS                   NAMES
9aa1fb68beee  docker.io/library/postgres:14.0-alpine  postgres    14 minutes ago  Exited (137) 20 seconds ago  0.0.0.0:5432->5432/tcp  gracious_jemison
$ podman rm -f 9aa1fb68beee
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbd

Container als Systemdienste über systemd und Podman verwalten

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/rocky/apps/postgres/data:/var/lib/postgresql/data:Z \
    -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; vendor preset: disabled)
   Active: active (running) since Thu 2021-11-11 10:07:09 UTC; 21s ago
  Process: 71868 ExecStop=/usr/bin/podman stop postgrespodman (code=exited, status=125)
  Process: 71943 ExecStartPre=/usr/bin/podman rm -f postgrespodman (code=exited, status=1/FAILURE)
 Main PID: 71973 (podman)
    Tasks: 11 (limit: 23167)
   Memory: 27.8M
   CGroup: /system.slice/postgres-podman.service
           ├─71973 /usr/bin/podman run -p 5432:5432 -v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z -e POSTGRES_PASSWORD=Sup3rSecre7 -e POSTGRES_USER=citizix_user -e POSTGRE>
           └─72073 /usr/bin/conmon --api-version 1 -c 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103 -u 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103>

Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Starting Custom Postgres Podman Container...
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal podman[71943]: Error: no container with name or ID "postgrespodman" found: no such container
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Started Custom Postgres Podman Container.
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: PostgreSQL Database directory appears to contain a database; Skipping initialization
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.428 UTC [1] LOG:  starting PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10>
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG:  listening on IPv6 address "::", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.432 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.437 UTC [20] LOG:  database system was shut down at 2021-11-11 10:07:09 UTC
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.440 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 Rocky Linux/Centos 8-Server installiert wird.


Cent OS
  1. So installieren und verwenden Sie PHP Composer in Rocky Linux/Centos 8

  2. So installieren und konfigurieren Sie Docker in Rocky Linux/Centos 8

  3. So installieren und konfigurieren Sie Ansible unter Rocky Linux/CentOS 8

  4. So installieren Sie den FreeIPA-Client unter Rocky Linux/Alma Linux/CentOS 8

  5. So installieren und konfigurieren Sie Mono unter Rocky Linux 8 und CentOS 8

So installieren Sie Rabbitmq in Rocky Linux/Alma Linux/Centos 8

So konfigurieren Sie die FreeIPA-Replikation unter Rocky Linux/Alma Linux/Centos 8

So installieren und verwenden Sie Firewalld unter Rocky Linux 8

So installieren und verwenden Sie den Rocky Linux Docker-Container

So installieren und konfigurieren Sie Ansible AWX unter Rocky Linux 8.3 und CentOS 8

So installieren Sie Docker unter Rocky Linux und AlmaLinux