Detaillierte Erklärung, wie Sie das automatische Beenden des Docker-Containers verhindern können

Detaillierte Erklärung, wie Sie das automatische Beenden des Docker-Containers verhindern können

Dieser Artikel stellt kurz die Beziehung zwischen Docker-Containern und Front-End-Prozessen vor und zeigt, wie Sie Dockerfile/docker-compose.yml schreiben, um Container auf elegante Weise dauerhaft ausführen zu können.

Der Lebenszyklus eines Docker-Containers hängt mit dem vorherigen Prozess im Container zusammen. Aus diesem Grund können wir auf einige Container stoßen, die nach nur wenigen Sekunden Laufzeit automatisch beendet werden: Da im Container kein vorheriger Prozess vorhanden ist, wird der Container automatisch beendet, nachdem der vorherige Prozess beendet ist.

Beispiel: Docker Hello-World

# Eine Reihe von Dingen in einem Flash ausgeben docker run --name hello-world hello-world
# Sie können sehen, dass der Hallo-Welt-Container Docker ps -a verlassen hat

Wie können wir also verhindern, dass der Container automatisch beendet wird? Wenn wir uns bei einem reinen Container wie Alpine/CentOS/Ubuntu anmelden möchten, installieren wir auf seiner Basis einige Servicekomponenten und übertragen sie dann in unser eigenes Image.

Es gibt im Internet viele Methoden, die beim Erstellen eines Containers eine while(true)-Endlosschleife (natürlich sleep) ausführen oder tail -f /dev/null usw. verwenden. Der Zweck besteht jedenfalls darin, einen permanenten Front-End-Prozess zu starten. Tatsächlich können wir die interaktiven und TTY-Parameter des Docker-Containers eleganter verwenden, um den Befehl sh/bash (*nix-System muss ihn haben) als Vorbefehl zu starten, sodass der Container nicht automatisch beendet wird.

Verwenden Sie beispielsweise das Alpine-Image als Basis-Image und erstellen Sie einen kleinen Alpine-Systemcontainer, damit dieser dauerhaft ausgeführt werden kann, damit wir uns anmelden und bestimmte Befehle interaktiv ausführen können.

# Erstellen Sie einen Container mit dem Alpine-Systemabbild. # -i interactive=true, um stdin zu öffnen
# -t tty=true weist das Sitzungsterminal zu# -d Daemon-Modus kann weggelassen werden und Sie können direkt in den Container eintreten. Sie müssen zum Beenden Strg+P+Q drücken# Sie können nicht beenden. exit ist gleichbedeutend mit dem Beenden der sh-Sitzung und der Container wird exitdocker run -it -d --name alpine alpine sh
# alpine muss Docker PS ausführen
# Beim Container anmelden docker exec -it alpine sh
# apline verwendet apk als Paketverwaltung# Installieren Sie einen kleinen Zug# Sie können docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl verwenden, um ein neues Image apk add sl zu generieren
# Container beenden Hinweis: Es kann nur -d verwendet werden. Wenn Sie -d nicht verwenden, um das sh-Terminal direkt zu starten, können Sie nicht beenden. Andernfalls wird auch der Container beendet.

Übermitteln Sie Containeränderungen, um ein neues Image zu generieren

docker commit -m "alpine mit sl cmd" -a "big_cat" alpine big_cat/alpine_sl
Docker-Bilder
# Wenn Sie ein Konto haben, veröffentlichen Sie es im Docker-Hub: docker push big_cat/alpine_sl

# Sie müssen den Parameter -it nicht angeben, wenn Sie den Container später stoppen/starten docker stop alpine
Docker starten alpin

Übermitteln Sie Containeränderungen, um ein neues Image zu generieren

docker commit -m "alpine mit sl cmd" -a "big_cat" alpine big_cat/alpine_sl
Docker-Bilder
# Wenn Sie ein Konto haben, veröffentlichen Sie es im Docker-Hub: docker push big_cat/alpine_sl

Der obige Befehl verwendet tatsächlich das Sh/Bash-Sitzungsterminal als Frontprozess, sodass der Container nicht automatisch beendet wird.

Wenn Sie denken, dass es grob ist, beim Erstellen eines Containers so zu schreiben, macht das nichts, wir können das alles auf docker-compose übertragen
docker-compose.yml

Version: '3'

Leistungen:
  große_katze_alpine:
    Containername: Big_Cat_Alpine
    Bild: alpin
    stdin_open: true # -i interaktiv
    tty: true # -t tty
    privilegiert: wahr
    Einstiegspunkt: ["sh"] # sh ausführen

Container erstellen und beim Container anmelden

docker-compose up -d big_cat_alpine ./
Docker PS
docker exec -it big_cat_alpine sh

Übergeben Sie die beiden Parameter an Docker-Compose und starten Sie den Servicecontainer nach der Orchestrierung.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Implementierung der Änderung von Konfigurationsdateien im Docker-Container
  • Implementieren Sie dynamisches Management und Monitoring von Docker-Containern basierend auf Spring-Boot und Docker-Java [mit vollständigem Quellcode-Download]
  • Zusammenfassung der Methoden zum Erstellen, Auflisten und Löschen von Docker-Containern unter Linux
  • So zeigen Sie Anwendungsprotokolle von Docker-Containern an
  • Detaillierte Erläuterung der Protokollverarbeitung von Docker-Containern
  • Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann
  • So verwenden Sie einen Docker-Container für den Zugriff auf das Host-Netzwerk
  • Zusammenfassung und ausführliche Erläuterung der Docker-Container-Bedienungsanleitung

<<:  Detaillierte Erläuterung der MySQL-Protokoll- und Sicherungs- und Wiederherstellungsprobleme

>>:  React verwendet Emotionen zum Schreiben von CSS-Code

Artikel empfehlen

Detaillierte Erklärung der MySQL-Halbsynchronisierung

Inhaltsverzeichnis Vorwort MySQL Master-Slave-Rep...

Eine kurze Diskussion über MySql-Ansichten, Trigger und gespeicherte Prozeduren

Sicht Was ist eine Ansicht? Welche Rolle spielt e...

Beispielcode zur Installation von Jenkins mit Docker

Zwei Probleme, die bei der Installation von Docke...

Vor- und Nachteile von Vite und Vue CLI

Es gibt im Vue-Ökosystem ein neues Build-Tool nam...

So erstellen Sie Ihren eigenen privaten Nexus-Server unter Linux

Dieser Artikel beschreibt, wie man über Docker ei...

Das WeChat-Applet realisiert den Neun-Quadrat-Rastereffekt

In diesem Artikel wird der spezifische Code für d...

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

Analyse und Lösung des beim Start von MySQL gemeldeten Fehlers „ERROR:2002“

Vorwort Dieser Artikel stellt hauptsächlich die A...

Was tun, wenn Sie das ursprüngliche Passwort für MySQL auf dem MAC vergessen?

Die Methode zur Lösung des Problems, das anfängli...

MySQL-Datenbank Shell import_table Datenimport

Inhaltsverzeichnis MySQL Shell import_table Daten...