GNU/Linux >> LINUX-Kenntnisse >  >> Rocky Linux

Ausführen von Almalinux oder Rocky Linux 8 Docker-Container mit Systemd (systemctl)

Wie wir wissen, läuft der Docker-Container standardmäßig ohne systemd bedeutet, dass der Benutzer systemctl nicht verwenden kann Befehl. Das liegt daran, dass jeder Container, den wir auf Docker erstellen, nicht mit init gebootet wurde. Hier lernen wir, wie man Systemd in den Alamlinux/Rocky Linux/CentOS 8 Docker-Containern ausführt.

Nun, die Frage ist, warum wir einen Fehler bekommen immer wenn wir systemctl ausführen Befehl in einem beliebigen Docker-Container? Was steckt dahinter?

Eigentlich sollte man laut den Docker-Entwicklern, die sie auch empfehlen, einen einzelnen Dienst innerhalb eines Containers verwenden. Das bedeutet, wenn Sie planen, WordPress mithilfe eines Containers zu installieren, sollte es einen einzelnen Container pro Anwendung geben. Zum Beispiel Apache + PHP auf einem Container und MySQL auf einem anderen. Daher wurde Docker nach diesem Modell entwickelt, was bedeutet, dass Systemd, das wir in jedem Standard-Linux-System finden, nicht benötigt wird, um mehrere Dienste parallel zu verwalten und auszuführen. Da Docker vorschlägt, mehrere Container für verschiedene Apps auszuführen, haben die Entwickler diesen Systemprozessmanager deaktiviert, um die Isolation und Sicherheit des Containers zu verbessern. Aus diesem Grund erhalten wir eine Fehlermeldung, wenn wir systemctl verwenden möchten Befehl.

Tipp:Was ist Systemd?

Systemd ist ein System- und Sitzungsmanager (init system ), der für die Verwaltung aller auf dem System laufenden Dienste über die gesamte Betriebszeit des Rechners vom Startvorgang bis zum Herunterfahren zuständig ist. Prozesse werden (soweit möglich) immer parallel gestartet, um den Bootvorgang so kurz wie möglich zu halten.

Auch das systemd ist der erste Prozess, der in einem Linux-System ausgelöst wird, das ist der Grund, warum wir ps -aux ausführen Befehl auf jedem Linux-Terminal sehen wir, dass der erste Prozess (PID 1) dem systemd zugewiesen ist .

ps -aux

Wenn Sie andererseits denselben Befehl in einem Container ausführen, sehen Sie die PID (1) bedeutet, dass der erste Prozess des Systems bash zugewiesen wurde .

Aus diesem Grund erhalten Sie den Fehler jedes Mal, wenn Sie versuchen, einen Dienst im Docker-Container mit systemctl zu starten Befehl.

Systemd in Almalinux- oder Rocky Linux 8-Docker-Containern installieren oder aktivieren

Erstellen Sie eine Docker-Datei

Es gibt bestimmte Befehle, die wir ausführen müssen, bevor wir einen Container mit Almalinux oder Rocky erstellen. Anstatt sie also in einem einzigen Befehl auszuführen, fügen wir sie einer Docker-Datei hinzu, um ein Docker-Image zu erstellen, das mit systemd aktiviert wird .

Erstellen Sie ein Verzeichnis sagen wir „sysmd ‘ :

mkdir sysmd

Wechseln Sie dazu:

cd sysmd

Erstellen Sie eine Docker-Datei:

Nano-Dockerfile

Befehle zum Ausführen in Docker-Datei zum Abrufen von Systemd

Kopieren Sie nun die angegebenen Befehle in die Docker-Datei:

Hinweis :Ändere den almalinux zu rockylinux , wenn Sie ein Docker-Image zum Ausführen von Rocky Linux erstellen möchten.

Die angegebenen Befehle in der Datei ziehen das Docker-Image (Almalinux oder Rocky) und führen dann den folgenden Befehl aus, einschließlich des Mountens des Volumes und des Befehls, der zum Aktivieren von Systemd erforderlich ist. Außerdem werden wir einige mit systemd verknüpfte Dateien entfernen, um andere Dienste zu aktivieren, die wir nicht in unserem Befehlszeilen-Docker-Container benötigen.

VON almalinux ENV-Container dockerRUN (cd /lib/systemd/system/sysinit.target.wants/; for i in; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done);RUN rm -rf /lib/systemd/system/multi-user.target.wants/ \&&rm -rf /etc/systemd/system/.wants/ \&&rm -rf /lib/systemd/system/local-fs.target. will/ \&&rm -f /lib/systemd/system/sockets.target.wants/udev \&&rm -f /lib/systemd/system/sockets.target.wants/initctl \&&rm -rf /lib/systemd/ system/basic.target.wants/ \&&rm -f /lib/systemd/system/anaconda.target.wants/*VOLUME [ „/sys/fs/cgroup“ ]CMD ["/usr/sbin/init"]

Speichern Sie die Datei, indem Sie Strg+O, drücken drücken Sie die Enter -Taste und drücken Sie dann Strg+X um die Datei zu verlassen.

Docker-Containerdatei mit systemd erstellen

Jetzt rufen und erstellen wir ein Container-Image, während wir die in der Docker-Datei angegebenen Befehle übergeben. Dafür gibt es einen Befehl namens docker build und wir verwenden dasselbe.

docker build -t almalinux-md .

Hinweis :Sie können almalinux-md ändern mit dem Namen, den Sie Ihrem Bild geben möchten. Und vergessen Sie auch nicht, einen Punkt hinzuzufügen (. ) wie im obigen Befehl angegeben, leitet es den build Befehl, um im Verzeichnis nach Docker-Dateien zu suchen.

Sie können sehen, dass alle in der Datei angegebenen Befehle vom docker build ausgeführt wurden um ein neues Bild mit dem Namen zu erstellen, den Sie ihm gegeben haben.

Ausgabe:

Build-Kontext an Docker-Daemon senden 2,56 kB Schritt 1/6:FROM almalinux ---> 4ca63ce1d8a9 Schritt 2/6:ENV-Container-Docker ---> Läuft in 57d447426e1a Zwischencontainer 57d447426e1a entfernen ---> fa30ff65bd36 Schritt 3/ 6 :RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); ---> Ausführen in bc3b161040e6 Zwischencontainer entfernen bc3b161040e6 ---> 6f51cf56580e Schritt 4/6:RUN rm -rf /lib/systemd/system/multi-user.target.wants/ &&rm -rf /etc/systemd/system /.wants/ &&rm -rf /lib/systemd/system/local-fs.target.wants/ &&rm -f /lib/systemd/system/sockets.target.wants/udev &&rm -f /lib/systemd/ system/sockets.target.wants/initctl &&rm -rf /lib/systemd/system/basic.target.wants/ &&rm -f /lib/systemd/system/anaconda.target.wants/* ---> Einlaufen 082cfe33fc89 Zwischenbehälter entfernen 082cfe33fc89 ---> 9f8224491315 Schritt 5/6 :VOLUME [ „/sys/fs/cgroup“ ] ---> Running in fe0177b04643 Zwischenbehälter entfernen fe0177b04643 ---> 212b1b01046b Schritt 6/6 :CMD [" /usr/sbin/init"] ---> Wird in bff7b36d4964 ausgeführt. Zwischencontainer wird entfernt. bff7b36d4964 ---> 9b8dfd7c1d81 Erfolgreich erstellt 

Nach erstelltem Almalinux- oder Rocky-Linux-Image suchen

Lassen Sie uns nun überprüfen, ob das Image, das wir dort erstellt haben, Container startet oder nicht:

Docker-Images

Erstellen oder starten Sie Docker-Container mit systemd

Wir haben das Image, das wir gerade erstellt haben, verwenden wir es, um einen Container zu erstellen.

docker run -itd --privileged--name h2smedia almalinux-md 

h2smedia ist der schöne Name, den wir unserem Container geben wollen, während almalinux-md der Name des von uns erstellten Bildes ist, ersetzen Sie ihn durch Ihren.

Warnung :Hier führen wir den Container mit einem privilegierten aus Flag, dies gibt Containern zusätzliche Leistung, in einfachen Worten - der Container hat Rechte oder Roots-Privilegien für den Host-Computer. Solche Container verwenden wir normalerweise, wenn wir direkten Hardwarezugriff (des Hosts) gewähren oder einen Container in einem Container ausführen möchten. Es wird daher empfohlen, solche Container nicht für kommerzielle oder Unternehmenszwecke zu verwenden, bei denen externe Benutzer auf einige Dienste zugreifen. Machen Sie es nur für Entwicklungs- oder lokale Zwecke. Aus diesem Grund haben wir den obigen Befehl mit diesem Flag ausgeführt, damit wir die Systemd-Einrichtung oder Init in unserem Container haben können.

Wechseln Sie zu Container Bash

Lassen Sie uns nun auf die Container-Befehlszeile zugreifen, um zu prüfen, ob wir systemctl ausführen können Befehl oder nicht.

Jetzt haben Sie das Docker-Image mit Systemd und können so viele Container erstellen, wie Sie möchten, um lokale Anwendungen zu entwickeln oder zu testen.

Andere Tutorials:

• Wie man Docker Container auf AlmaLinux 8 installiert und einrichtet
• Wie man eine Systemd-Service-Unit-Datei unter Linux erstellt
• Analysiert die Startzeit des Linux-Systems mit Systemd


Rocky Linux
  1. AlmaLinux gegen Rocky Linux

  2. So verwalten Sie Systemd-Dienste mit Systemctl unter Linux

  3. So installieren Sie Docker unter AlmaLinux / Rocky Linux

  4. So installieren und konfigurieren Sie Docker Container unter Rocky Linux 8

  5. Kann Docker in einem Linux-Container ausgeführt werden?

So installieren und verwenden Sie den Rocky Linux Docker-Container

Installieren Sie Discord auf AlmaLinux oder Rocky Linux 8

So installieren Sie Podman auf Rocky Linux 8 / AlmaLinux, um Container auszuführen

Ausführen von Almalinux oder Rocky Linux 8 Docker-Container mit Systemd (systemctl)

So installieren Sie Docker unter Rocky Linux und AlmaLinux

So installieren Sie Docker unter Rocky Linux und AlmaLinux