Starten Sie alle gestoppten Docker-Container mit einem Befehl neu
Alle gestoppten Container anzeigen
Abrufen der ID eines angehaltenen Containers
Übergeben Sie die ID des gestoppten Containers an den Container-Startbefehl Stoppen Sie alle laufenden Docker-Container mit einem Befehl
Zusatzwissen: Docker-Lernhinweise: Image abrufen & Container starten & Container stoppen Holen Sie sich das Bild Standardmäßig zieht der Befehl „Docker Pull“ das Image aus dem offiziellen Docker Hub-Repository auf den lokalen Computer. Lassen Sie mich zunächst das Format dieses Befehls vorstellen:
In: Docker Pull: Befehlsschlüsselwort für Docker zum Abrufen von Bildern; [OPTIONEN]: Befehlsoptionen; Lagername: Das Format des Lagernamens ist grundsätzlich <Benutzername>/<Softwarename>. Wenn Sie für Docker Hub keinen Benutzernamen angeben, wird standardmäßig die Bibliothek verwendet, bei der es sich um das offizielle Image handelt. Tag: Der Tag ist ein wichtiger Parameter, um verschiedene Versionen von Bildern zu unterscheiden. <Warehouse-Name>:<Tag> identifiziert ein Bild eindeutig. Die Standardeinstellung ist „Neueste“. Wir möchten beispielsweise ein offizielles Image von Ubuntu 14.04 aus dem offiziellen Docker Hub-Repository abrufen und die Anweisung lautet wie folgt:
Was passiert hinter den Kulissen des Docker-Pull-Befehls? Erstens: Wenn der Tag-Wert leer ist, d. h. kein Tag angegeben ist, wird der Standardtag verwendet, also der neueste. Wenn der Tag-Wert nicht leer ist, wird der angegebene Tag verwendet. Dann wird standardmäßig nach einem Repository mit dem Namen „repoName“ im Docker Hub gesucht und eine Fehlermeldung zurückgegeben, wenn das Repository nicht vorhanden ist. Wenn das Repository vorhanden ist, ziehen Sie das Bild des entsprechenden Tags aus dem Repository. Wenn Sie beispielsweise „docker pull ubuntu:14.04“ ausführen, wird das Image mit dem Tag 14.04 aus dem „ubuntu“-Repository abgerufen, und wenn Sie „docker pull ubuntu“ ausführen, wird das Image mit dem Tag „latest“ aus dem „ubuntu“-Repository abgerufen. (Es gibt viele Image-Repositorys im Docker Hub. Im Allgemeinen werden Images desselben Typs im selben Repository abgelegt. Beispielsweise besteht ein Ubuntu-Repository aus vielen Ubuntu-Images, darunter ubuntu:14.04, ubuntu:16.04, ubuntu:latest usw.). Speichern Sie das abgerufene Image abschließend lokal am angegebenen Speicherort. Einrichten des Mirror Accelerator Aufgrund der „Großen Mauer“ kann das Abrufen von Bildern vom Docker Hub in China langsam sein. Viele inländische Cloud-Dienstanbieter bieten Bildbeschleunigungsdienste an, beispielsweise Alibaba, NetEase usw. Am Beispiel der Konfiguration von Alibaba Cloud Accelerator auf einem Linux-System müssen Sie nur den folgenden Befehl in das Linux-Terminal kopieren und als Root-Benutzer ausführen, um Alibaba Cloud Accelerator erfolgreich zu konfigurieren! # Führen Sie die folgenden Vorgänge als Root-Benutzer aus mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' {#Die folgende URL kann durch Ihre eigene Alibaba Cloud-Beschleunigungsadresse "registry-mirrors" ersetzt werden: ["https://jxus37ad.mirror.aliyuncs.com"] } Ende der Laufzeit systemctl daemon-reload systemctl Neustart Docker Starten des Containers Nach dem Herunterladen eines Images wird die Betriebsumgebung für den Container vorbereitet. Es gibt zwei Möglichkeiten, einen Container zu starten. Eine besteht darin, basierend auf dem Image einen neuen Container zu erstellen und diesen zu starten, oder die andere darin, einen gestoppten Container neu zu starten. Die erste Methode: Erstellen und starten Der Befehl „Docker Run“ erstellt einen Container basierend auf dem angegebenen Image und startet ihn. Die grundlegende Syntax von Docker Run lautet wie folgt:
In: docker run: Docker-Befehlsschlüsselwort zum Erstellen und Starten des Containers; OPTIONEN: Befehlsoptionen, die am häufigsten verwendeten sind -d, um den Container im Hintergrund auszuführen und die Container-ID zurückzugeben, -i, um den Container im interaktiven Modus auszuführen, -t, um dem Container ein Pseudo-Eingabeterminal zuzuweisen und –name, um den Namen des gestarteten Containers anzugeben. Weitere Optionen finden Sie in der Docker-Hilfedokumentation. Bildname: angegeben in der Form <Warehouse-Name>:<Tag>; COMMAND: Legen Sie den Startbefehl fest, der nach dem Starten des Containers ausgeführt wird. ARG: Einige andere Parameter. Was passiert hinter den Kulissen von Docker Run? Zu den Standardvorgängen, die Docker im Hintergrund ausführt, gehören: Überprüfen Sie, ob das angegebene Image lokal vorhanden ist. Wenn nicht, laden Sie es aus dem öffentlichen Repository herunter und starten Sie es. Erstellen und starten Sie einen Container mit dem Image. Ordnen Sie ein Dateisystem zu und mounten Sie eine lesbare und beschreibbare Ebene außerhalb der schreibgeschützten Image-Ebene. Überbrücken Sie eine virtuelle Schnittstelle von der konfigurierten Brückenschnittstelle des Host-Hosts zum Container. Konfigurieren Sie eine IP-Adresse für den Container aus dem Adresspool; Führen Sie den vom Benutzer angegebenen Startbefehl aus. Nach Abschluss der Ausführung wird der Container beendet. Docker-Ausführung, Beispiel 1 Erstellen und starten Sie einen Container mit der Ubuntu-Betriebssystemumgebung und geben Sie „Hallo Docker“ aus. Nur ein Befehl: docker run ubuntu:14.04 echo 'hello docker', und das Problem ist gelöst. Da das Image ubuntu:14.04 lokal nicht vorhanden ist, laden Sie zunächst das Image vom Docker Hub herunter (tatsächlich bedeutet dies, dass Sie zuerst „docker pull ubuntu:14.04“ ausführen müssen). Verwenden Sie das Bild anschließend nach dem Herunterladen zum Erstellen. Da ein Ubuntu-Image den gesamten Inhalt eines Ubuntu-Systems enthält, ist nach dem Starten des Containers mit dem Image die Ubuntu-Betriebsumgebung im Container verfügbar. Führen Sie nach dem Starten des Containers den Startbefehl echo 'hello docker' aus und beenden Sie den Container, nachdem der Startbefehl ausgeführt wurde. Docker-Ausführung, Beispiel 2 Erstellen und starten Sie einen Container mit der Ubuntu-Betriebssystemumgebung. Der Container erhält den Namen firstContainer und ihm wird ein Terminal zur Interaktion mit dem Benutzer zugewiesen. Die Option -i weist Docker an, die Standardeingabe- und -ausgabeströme für den Container offen zu halten, und die Option -t ermöglicht Docker, ein Pseudoterminal (Pseudo-TTY) zuzuweisen und es an die Standardeingabe des Containers zu binden. –name legt den Containernamen für den Container fest. Beachten Sie, dass „Docker Run“ einen neuen Container erstellt und startet. Der mit diesem Befehl erstellte Container ist also nicht derselbe Container wie der in der vorherigen Instanz erstellte Container. Und da das ubuntu:latest-Image bereits lokal vorhanden ist, muss es nicht erneut von Docker Hub heruntergeladen werden. Stattdessen wird das lokale ubuntu:latest-Image direkt zum Erstellen des Containers verwendet. Nachdem wir den Container gestartet haben, betreten wir den Container und interagieren mit dem Container im Terminal. Ob wir uns im Container befinden, können wir anhand der Eingabeaufforderung auf der linken Seite feststellen. Wenn im obigen Beispiel beispielsweise die Eingabeaufforderung links „root@localhost“ lautet, bedeutet dies, dass wir uns außerhalb des Containers befinden. Wenn die Eingabeaufforderung „root@fe263c9359dd/“ lautet, bedeutet dies, dass wir uns innerhalb des Containers befinden und die Container-ID fe263c9359dd ist. Wir können den aktuellen Container über „exit“ verlassen. Die zweite Methode: Starten Sie einen beendeten Container Obwohl Docker-Container sehr leichtgewichtig sind, bedeutet dies, dass wir den Container im Allgemeinen löschen, nachdem wir ihn gestartet und den Vorgang abgeschlossen haben. Aber manchmal geben wir den zuvor erstellten Container ein und Docker Run erstellt jedes Mal einen neuen Container, was offensichtlich nicht unseren Anforderungen entspricht. In diesem Fall können Sie den Befehl „Docker Start“ verwenden, um einen beendeten Container unter Verwendung des Containernamens oder der Container-ID zu starten.
In: docker start: Das Befehlsschlüsselwort für Docker zum Starten des Containers; OPTIONEN: Befehlsoptionen; Container: Der zu startende Container. Der Container wird durch „Container-ID“ oder „Containername“ dargestellt. Wenn mehrere Container angegeben sind, werden alle Container gestartet. Angenommen, ein Container mit dem Namen „firstContainer“ befindet sich in einem beendeten Zustand und Sie müssen ihn starten. Sie können dies tun, indem Sie „docker start firstContainer“ ausführen. Versuchen Sie nach der Ausführung des Befehls, den Container „firstContainer“ zu starten und führen Sie den Startbefehl des Containers aus. Wenn Sie jedoch den von der ersten Instanz erstellten Container starten möchten, kennen Sie weder den Namen des Containers (weil ich ihn nicht angegeben habe) noch seine ID. Was zu tun? Containerinformationen anzeigen In Docker gibt es einen Befehl namens „docker ps“, mit dem Containerinformationen angezeigt werden können, darunter Container-ID, Basis-Image, Startbefehl, Erstellungszeit, aktueller Status, Portnummer und Containername. Wenn Sie docker ps ohne Parameter ausführen, werden alle laufenden Container angezeigt. Führen Sie beispielsweise Docker PS aus. Wie in der folgenden Abbildung gezeigt, gibt es in der aktuellen Docker-Umgebung nur einen laufenden Container. Seine Container-ID lautet fe263c9359dd, basierend auf dem Ubuntu:latest-Image, der Startbefehl lautet „/bin/bash“, die Erstellungszeit ist vor 2 Minuten und der aktuelle Status ist „2 Minuten aktiv“, was bedeutet, dass er seit 2 Minuten läuft. Der Containername lautet: firstContainer. Wenn Sie den Befehl docker ps –a verwenden, können Sie alle Container in der Docker-Umgebung anzeigen, einschließlich angehaltener Container. Nach der Ausführung von docker ps –a wird wie in der folgenden Abbildung gezeigt: Neben dem Container mit dem Namen firstContainer wird auch ein Container mit dem Namen ee826f1d58ff angezeigt (die Container-ID wird zufällig generiert). Der aktuelle Status dieses Containers ist jedoch „Beendet (0) vor 3 Minuten“, was bedeutet, dass er sich im beendeten Zustand befindet und vor 3 Minuten beendet wurde. Für diesen beendeten Container können Sie ihn mit „docker start ee826f1d58ff“ oder „docker start g\fracious_lewin“ starten. Verwenden Sie in tatsächlichen Situationen „docker start ee826f1d58ff“, um den Container der ersten Instanz zu starten, und verwenden Sie dann „docker ps“, um ihn anzuzeigen. Sie werden den Container jedoch nicht sehen. Dies bedeutet, dass sich beim Ausführen von Docker PS der Container mit der Container-ID ee826f1d58ff nicht im laufenden Zustand, sondern im beendeten Zustand befindet. Das Ausführungsergebnis von Docker PS lautet wie folgt: Der aktuelle Status des Containers mit der Container-ID ee826f1d58ff lautet „Beendet (0) vor 2 Sekunden“! ! ! Dies bedeutet, dass sich der Container ee826f1d58ff tatsächlich in einem beendeten Zustand befindet, aber vor 2 Sekunden beendet wurde. Beachten Sie, dass dies vor 2 Sekunden war! Dies zeigt an, dass der Container vor 2 Sekunden gestartet wurde, aber aus irgendeinem Grund beendet wurde! ! Führen Sie in einer tatsächlichen Situation „docker start ee826f1d58ff“ aus, um den Container mit der Container-ID ee826f1d58ff zu starten! ! Nach der Ausführung des Startbefehls wird der Container jedoch sofort beendet. Stoppen des Containers Stoppen Sie einen Container mit Docker Stop Mit Docker Stop kann ein laufender Container beendet werden. Das Befehlsformat ist wie folgt:
In: docker stop: Das Befehlsschlüsselwort für Docker, um den Container zu stoppen; OPTIONEN: Befehlsoptionen, wobei -t angibt, wie viele Sekunden gewartet werden soll, bevor der Container zum Stoppen gezwungen wird, wenn er nicht beendet wurde. Die Standardwartezeit beträgt 10 Sekunden; Container: Der zu startende Container. Der Container wird durch „Container-ID“ oder „Containername“ dargestellt. Wenn mehrere Container angegeben sind, werden alle Container gestartet. Wenn Sie beispielsweise einen Container mit dem Namen „firstContainer“ stoppen möchten, können Sie „docker stop firstContainer“ ausführen. Nachdem der Befehl ausgeführt wurde, befindet sich firstContainer im beendeten Zustand. Der beendete Container kann mit Docker ps –a angezeigt werden. Bei der tatsächlichen Arbeit wird der Container durch die Ausführung von Docker Stop möglicherweise nicht sofort beendet, sondern es ist möglicherweise eine Weile Wartezeit erforderlich. Ein Container ist eigentlich ein Prozess. Nach der Ausführung von Docker Stop wird zunächst ein SIGTERM-Signal an den Hauptprozess des Containers gesendet, wodurch der Hauptprozess Ressourcen freigeben, den Status speichern und versuchen kann, sich selbst zu beenden. Wenn die Wartezeit jedoch die durch -t festgelegte Zeit überschreitet, wird ein SIGKILL-Signal an den Hauptprozess des Containers gesendet, wodurch der Container sofort beendet wird. Unter welchen Umständen wird der Container unmittelbar nach dem Start beendet? In tatsächlichen Situationen wird ein Container nicht nur mit dem Docker-Stopp-Befehl zwangsweise beendet, sondern auch automatisch beendet, wenn der Startbefehl des Containers endet. Am Beispiel von docker run --name testcontainer ubuntu echo 'hello docker' ist echo 'hello docker' der Startbefehl des Containers. Tatsächlich können Sie nach der Ausführung dieses Befehls, also dem Ausführen von Docker ps -a, feststellen, dass sich der Testcontainer-Container in einem beendeten Zustand befindet, wie unten gezeigt: [root@localhost Desktop]# docker run --name testcontainer ubuntu echo 'hallo docker' hallo Docker [root@localhost Desktop]# docker ps -a CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN da14116bf641 ubuntu „echo ‚hello docker‘“ vor 6 Sekunden Beendet (0) vor 4 Sekunden testcontainer Wenn der Container gestartet wird, wird der Container-Startbefehl ausgeführt. Nach der Ausführung des obigen Befehls zum Erstellen und Starten des Containers wird der Container beendet, da der Container-Startbefehl echo 'hello docker' sofort ausgeführt wird. Verwenden Sie daher docker ps -a, um den Status des Containers zu überprüfen, der der beendete Zustand ist. Der Docker-Container ist ein Prozess, der sh tatsächlich als Hauptprozess verwendet. Wenn der Hauptprozess stoppt, stoppt auch der Container. Wenn jedoch der „Startbefehl“ des Containers ausgeführt wird, wird der Hauptprozess gestoppt, da kein Befehl zur weiteren Ausführung vorhanden ist, und der Container wird ebenfalls gestoppt. Wie kann ich verhindern, dass der Container unmittelbar nach dem Start beendet wird? Wenn der sh-Hauptprozess des Containers nicht stoppt, bedeutet das, dass der Container nicht stoppt? Die Antwort ist ja. Wenn der Startbefehl daher nicht vollständig ausgeführt werden kann oder der sh-Hauptprozess des Containers nach Ausführung des Startbefehls nicht stoppt, wird der Container nicht unmittelbar nach dem Start beendet! Hier zwei Beispiele, die verhindern können, dass der Container direkt nach dem Start stehen bleibt: Stellen Sie den Startbefehl auf eine Endlosschleife ein
Nach dem Erstellen und Starten des Containers führt dieser Befehl /bin/sh -c "while true; do echo hello world; sleep 1; done" aus. Da dieser Befehl nie abgeschlossen wird, sofern er nicht zwangsweise beendet wird, wird der Hauptprozess sh des Containers nicht gestoppt und daher wird auch der Container nicht gestoppt. Wenn Sie dies jedoch tun, können Sie den Container nicht normal betreiben und er belegt Ressourcen. Daher ist dieser Ansatz in der tatsächlichen Arbeit nicht sehr sinnvoll. Legen Sie den Startbefehl auf „Starten Sie einen Unterprozess, der für immer ausgeführt wird“ fest.
Nach der Ausführung dieses Befehls wird der Container erstellt und gestartet und /bin/bash ausgeführt. Ein untergeordneter Prozess wird gestartet. Zu diesem Zeitpunkt wechselt der übergeordnete Prozess (d. h. der Hauptprozess sh des Containers) in den Ruhezustand. Da der Ruhezustand nicht der Beendigungszustand ist, wird der Container weiterhin ausgeführt. Warum wird der Container beendet, nachdem „exit“ eingegeben oder Strg D im Container ausgeführt wurde? Dies liegt daran, dass „exit“ den aktuellen Prozess beendet, also /bin/bash. Da der untergeordnete Prozess beendet wird, kehrt der sh-Hauptprozess in den laufenden Zustand zurück. Da jedoch kein Befehl zur weiteren Ausführung vorhanden ist, wird der sh-Hauptprozess beendet und der Container wird beendet. Der obige Befehl zum Neustarten aller gestoppten Docker-Container ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. Das könnte Sie auch interessieren:
|
<<: Super ausführliches Tutorial zur Installation und Konfiguration von MySQL8.0.22
>>: So rufen Sie einen Hyperlink auf und öffnen ihn
Einführung in JWT Was ist JWT Der vollständige Na...
1. Was ist Docker? (1) Docker ist ein Open-Source...
Inhaltsverzeichnis Grundlegende Selektoren: Ebene...
In diesem Artikelbeispiel wird der spezifische Ja...
<br />Der häufigste Fehler vieler Website-De...
Einige Tipps zur umfassenden Optimierung, um die ...
<br />Verwandte Artikel: Web-Kenntnisse: Lös...
Nichtorthogonale Ränder Wenn ein Rand verwendet w...
Vorne geschrieben Kürzlich berichtete mir ein Les...
#!/bin/bash #SVN herunterladen yum -y installiere...
Im Allgemeinen wird während des Entwicklungsproze...
Inhaltsverzeichnis Filter 01.Was ist 02. Wie es g...
1. Gehen Sie zur offiziellen Website, um das JDK-...
INSERT INTO hk_test(Benutzername, Passwort) VALUE...
1. Legen Sie den übergeordneten Container auf ein...