Podman bootet den Container automatisch und vergleicht ihn mit Docker

Podman bootet den Container automatisch und vergleicht ihn mit Docker

1. Einführung in Podman

Podman war zuvor Teil des CRI-O-Projekts und wurde später in ein unabhängiges Projekt, libpod, ausgegliedert. Libpod ist ein Tool und eine Bibliothek zum Erstellen von Container-Pods. Podman ist eine daemonlose Container-Engine, die als Root-Benutzer oder im Rootless-Modus ausgeführt wird. Kurz gesagt bietet Podman eine Docker-CLI-Befehlszeile zum Verwalten von Containern.

2. Vorteile gegenüber Docker

Docker-Nachteil 1:

Wie wir alle wissen, belegt der Docker-Daemon mithilfe eines C/S-Modells fast 100 % der CPU-Ressourcen auf mehreren Kernen.

Podman-Vorteil 1:

Podman erfordert keinen Daemon-Prozess oder eine Root-Berechtigungsgruppe und verwendet den Benutzernamensraum, um Root-Vorgänge im Container zu simulieren, wobei das Fork/Exec-Modell übernommen wird.

Das Fork/Exec-Modell bietet gegenüber dem C/S-Modell folgende Vorteile:

  • Systemadministratoren wissen, wer einen Container gestartet hat
  • Verwenden Sie cgroup, um Podman einzuschränken. Die entsprechenden erstellten Container werden ebenfalls eingeschränkt.
  • Durch die Generierung von Systemd-Unit-Dateien können das Starten und Herunterfahren von Aufgaben verwaltet werden
  • Socket-Aktivierung, senden Sie den Socket von systemd zur Verwendung an den Podman-Container

3. Kompatibilität

Die meisten Funktionen von Docker sind mit Podman kompatibel und Aliase können auch zum Schreiben von Docker-Befehlen verwendet werden.

4. Priorität der Hintergrundservice-Unit-Dateien

/usr/lib/systemd/user : Die niedrigste Priorität, wird von der gleichnamigen Einheit mit höherer Priorität überschrieben ~/.local/share/systemd/user

/etc/systemd/user : Global gemeinsam genutzte Einheit[en] auf Benutzerebene

~/.config/systemd/user : höchste Priorität

5. Grundlegende Operationen von Podman

Installieren

#Standard-CentOS-Quelle [root@slave02 ~]# yum -y module install container-tools #Auf Modul basierendes Containertool [root@slave02 ~]# yum -y install podman-docker #Docker-kompatibles Paket installieren (optional)

Version

[root@slave02 ~]# podman -v
Podman Version 3.3.0-dev

Lagerhaus

Offizielles Repository: registry.access.redhat.com

Repository von Drittanbietern: docker.io

Privates Repository: registry.lab.example.com

Befehlshilfe

[root@slave02 ~]# podman Hilfe|head -15
Verwalten von Pods, Containern und Images
Verwendung:
  podman [Optionen] [Befehl]
Verfügbare Befehle:
  Anhängen An einen laufenden Container anhängen
  Auto-Update Automatisches Update von Containern gemäß ihrer Auto-Update-Richtlinie
  build Erstellen Sie ein Image mit Anweisungen aus Containerdateien
  commit Neues Image basierend auf dem geänderten Container erstellen #Neuen Container basierend auf dem geänderten Container erstellen container Container verwalten
  cp Kopieren von Dateien/Ordnern zwischen einem Container und dem lokalen Dateisystem
  create Einen Container erstellen, aber nicht starten
  diff Zeigt die Änderungen am Dateisystem des Objekts an
  Veranstaltungen Podman-Veranstaltungen anzeigen
....

Bildbeschleuniger

Ändern Sie die Konfigurationsdatei: /etc/containers/registries.conf

Hinweis: Es darf nicht das Format httpds//:url enthalten.

[root@slave02 ~]# cp /etc/containers/registries.conf /backup/registries.conf.back #Sichern [root@slave02 ~]# vim /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"] # Unqualifiziertes Suchregister [[registry]]
Präfix = "docker.io"
location = "x" #x ist die Ali-Beschleunigungsspiegeladresse

Ziehen Sie das Bild

[root@slave02 ~]# podman zieht nginx

6. Führen Sie einen Webcontainer aus

Starten Sie einen Webcontainer im Hintergrund und greifen Sie auf den Containerinhalt zu

#HTML-Seiteninhalt vorbereiten[root@192 ~]# cat /opt/webhtml/index.html 
Gehen Sie Ihren eigenen Weg, sehen Sie sich Ihre eigene Landschaft an, übertreffen Sie andere, ohne selbstgefällig zu sein, und werden Sie übertroffen, ohne den Ehrgeiz zu verlieren.
#Führen Sie einen Daemon-Webcontainerprozess aus und ordnen Sie den Inhalt des Verzeichnisses /opt/webhtml dem Verzeichnis /usr/share/nginx/html des Containers zu, in dem die Webseiten gespeichert sind [root@192 ~]# podman run -d --name web -p 8888:80 -v /opt/webhtml:/usr/share/nginx/html nginx
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c
[root@podman ~]# curl 192.168.136.129:8888
Gehen Sie Ihren eigenen Weg, sehen Sie sich Ihre eigene Landschaft an, übertreffen Sie andere, ohne selbstgefällig zu sein, und werden Sie übertroffen, ohne den Ehrgeiz zu verlieren.
#Container-IP
[root@podman ~]# podman inspect web|grep IP-Adresse
"IP-Adresse": "10.88.0.6",
"IP-Adresse": "10.88.0.6",
#IP des Host-Rechners
[root@podman ~]# ip r
192.168.136.0/24 dev ens33 proto Kernel Bereich Link src 192.168.136.129 Metrik 100 
#Da eine Portbindung durchgeführt wird, können Sie direkt über curl 192.168.136.129:8888 darauf zugreifen

Rufen Sie den Backend-Webcontainer auf und überprüfen Sie den Dienststatus

[root@podman ~]# podman exec -it web bash
root@3528e6d5148b:/# Dienst-Nginx-Status
[ ok ] nginx läuft. #Läuft

Container-Service-Inhalt ändern

#Ändern Sie den Hostcomputer /opt/webhtml/index.html [root@podman ~]# cat /opt/webhtml/index.html 
Gehen Sie Ihren eigenen Weg, sehen Sie sich Ihre eigene Umgebung an, übertreffen Sie andere, ohne selbstgefällig zu sein, und werden Sie übertroffen, ohne den Ehrgeiz zu verlierenRHCAS
RHCE RHCA
#Zugriff [root@podman ~]# curl 192.168.136.129:8888
Gehen Sie Ihren eigenen Weg, sehen Sie sich Ihre eigene Umgebung an, übertreffen Sie andere, ohne selbstgefällig zu sein, und werden Sie übertroffen, ohne den Ehrgeiz zu verlierenRHCAS 
RHCE RHCA
#Geben Sie den Container ein, um zu prüfen, ob der Inhalt geändert wurde [root@podman ~]# podman exec -it web bash
root@3528e6d5148b:/# cat /usr/share/nginx/html/index.html 
Gehen Sie Ihren eigenen Weg, sehen Sie sich Ihre eigene Umgebung an, übertreffen Sie andere, ohne selbstgefällig zu sein, und werden Sie übertroffen, ohne den Ehrgeiz zu verlierenRHCAS 
RHCE RHCA

Anhalten und Löschen von Containern

#Pause [root@podman ~]# podman stop web
Web
[root@podman ~]# podman ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
3528e6d5148b docker.io/library/nginx:latest nginx -g daemon o... vor 25 Minuten Beendet (0) vor 16 Sekunden 0.0.0.0:8888->80/tcp web
#löschen [root@podman ~]# podman rm web
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c
#Oder löschen Sie den laufenden Container zwangsweise [root@podman ~]# podman rm -f web
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c

7. Webcontainer-Einstellungen starten automatisch

Ausführen eines Webcontainers im Hintergrund

[root@podman ~]# podman run --name web -d -p 8080:80 -v /opt/webhtml:/usr/shar/nginx/html nginx
910db3ab6bd1ef18e5fd0afe1844912f0b89334b7b8ab758353a948a1b55282a

Basierend auf dem Webcontainer, im /etc/systemd/system mit normaler Priorität

Erstellen einer Service-Unit-Datei

[root@192 ~]# cd /etc/systemd/system/
[root@podman-Benutzer]# podman generate systemd --
--container-prefix (Systemd-Unit-Namenspräfix für Container)
--files {.service-Dateien generieren, statt auf die Standardausgabe zu drucken}
--format (Druckt die erstellten Einheiten im angegebenen Format (json)) #Druckt Unit-Dateien im angegebenen Format --name (Verwendet Container-/Pod-Namen statt IDs) #Erstellt einen neuen Container, statt einen vorhandenen zu verwenden --new (Erstellt einen neuen Container, statt einen vorhandenen zu starten) # (Header-Generierung überspringen)
--no-header (Headergenerierung überspringen)
--pod-prefix (Systemd-Unit-Namenspräfix für Pods)
--restart-policy (Systemd-Neustartrichtlinie)
--separator (Trennzeichen für Systemd-Unit-Namen zwischen Name/ID und Präfix)
--time (Zeitüberschreitung stoppen)
[root@192 system]# podman generiert systemd --name web --files --new
/etc/systemd/system/container-web.service

Zeigen Sie die generierte Unit-Datei an

[root@192 system]# cat container-web.service 
# container-web.service
# automatisch generiert von Podman 3.3.0-dev # Di., 17. Aug. 2021, 13:03:13 CST # Dienstag, 17. August 2021, 13:03:13 CST                                                            
[Unit] #Unit Beschreibung=Podman container-web.service #Beschreibung Dokumentation=man:podman-generate-systemd(1) #Hilfe und generiertes System Wünsche=network-online.target #Netzwerk Nach=network-online.target
RequiresMountsFor=%t/containers # Überspringe das vorherige, wenn es nicht wichtig ist [Service]
Umgebung=PODMAN_SYSTEMD_UNIT=%n                   
Restart=on-failure #Neustart bei Fehler TimeoutStopSec=70 #Timeout ExecStart=/usr/bin/podman run --sdnotify=conmon --cgroups=no-conmon --rm --replace --name web -d -p 8080:80 -v /opt/webhtml:/usr/shar/nginx/html nginx #Die Ausführung beginnt mit /usr/bin/podman, wo der gerade erstellte Container ausgeführt wird Type=notify
NotifyAccess=alle
[Installieren]
WantedBy=Mehrbenutzer.Ziel Standard.Ziel

Löschen Sie den Container jetzt

[root@podman ~]# podman rm web
910db3ab6bd1ef18e5fd0afe1844912f0b89334b7b8ab758353a948a1b55282a
[root@podman ~]# podman ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN

Automatischen Start einrichten

[root@192 ~]# systemctl daemon-reload 
[root@192 ~]# systemctl aktivieren --jetzt container-web.service 
Symlink /etc/systemd/system/multi-user.target.wants/container-web.service → /etc/systemd/system/container-web.service erstellt.
Symlink /etc/systemd/system/default.target.wants/container-web.service → /etc/systemd/system/container-web.service erstellt.
[root@192 Benutzer]# podman ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
b0c7709cb00e docker.io/library/nginx:latest nginx -g daemon o... vor 15 Sekunden Vor 16 Sekunden aktiv 0.0.0.0:8080->80/tcp web

Das Einrichten eines Containers im Rootless-Modus ähnelt der obigen Methode.

Verwenden Sie den Befehl systemctl mit --user

#Sie müssen den Befehl loginctl enable-linger ausführen, damit der Benutzerdienst automatisch gestartet wird, wenn der Server startet [containers@serverb ~]$ loginctl enable-linger 

Oben finden Sie detaillierte Informationen zum Implementierungsprozess des Podman-Bootens und des selbststartenden Containers. Weitere Informationen zum Podman-Booten und zum selbststartenden Container finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Wird der veraltete Docker durch Podman ersetzt?
  • Spezifische Verwendung des Podman-Containertools

<<:  Die Erfahrungen aus dem Vergleich und der Analyse der Homepages inländischer Social-Networking-Websites werden mit allen geteilt (Bild)

>>:  Fallstudie zu MySQL-Berechtigungen und Datenbankdesign

Artikel empfehlen

Zusammenfassung der MySQL-Nutzungsspezifikationen

1. Es muss die InnoDB-Speicher-Engine verwendet w...

Ausführliche Erklärung des Sperrmechanismus in MySQL

Vorwort Um die Konsistenz und Integrität der Date...

So ändern Sie den Bildlaufleistenstil in Vue

Inhaltsverzeichnis Zunächst müssen Sie wissen, da...

Detaillierte Beispiele zur Verwendung der JavaScript-Ereignisdelegierung (Proxy)

Inhaltsverzeichnis Einführung Beispiel: Ereignisd...

Ausführliche Erklärung verschiedener binärer Objektbeziehungen in JavaScript

Inhaltsverzeichnis Vorwort Beziehungen zwischen v...

Das Submit-Ereignis des Formulars reagiert nicht

1. Problembeschreibung <br />Wenn JS verwen...

JS berechnet die Gewinnwahrscheinlichkeit basierend auf dem Preisgewicht

Inhaltsverzeichnis 1. Beispielszenario 1.1. Legen...

Beispiel-Tutorial zur JavaScript-Typerkennungsmethode

Vorwort JavaScript ist eine der am häufigsten ver...

Beispielcode zur Implementierung einer Auto-Increment-Sequenz in MySQL

1. Erstellen Sie eine Sequenztabelle CREATE TABLE...

Installieren Sie eine virtuelle Python-Umgebung in Ubuntu 18.04

Nur als Referenz für Python-Entwickler, die Ubunt...

Verwenden von js, um einen Wasserfalleffekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...