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

Vue + node realisiert Audioaufzeichnungs- und -wiedergabefunktion

Ergebnis: Der Hauptteil besteht darin, die Codelo...

So fügen Sie Vite-Unterstützung zu alten Vue-Projekten hinzu

1. Einleitung Ich habe vor zwei Jahren ein Projek...

Implementierung der Docker-Bereitstellung von ElasticSearch und ElasticSearch-Head

In diesem Artikel wird hauptsächlich erläutert, w...

Sequentielles und zufälliges Schreiben auf Linux-Festplatten

1. Einleitung ● Zufälliges Schreiben führt dazu, ...

Zusammenfassung zum Erlernen von HTML-Tags und Grundelementen

1. Elemente und Tags in HTML <br />Ein Elem...

Tutorial zur Installation und Konfiguration von MySQL 5.7 unter CentOS7 (YUM)

Installationsumgebung: CentOS7 64-Bit, MySQL5.7 1...

HTML-Tabellen-Tag-Tutorial (19): Zeilen-Tag

Die Attribute des <TR>-Tags werden verwende...

So richten Sie eine automatische tägliche Datenbanksicherung in Linux ein

Dieser Artikel verwendet das Centos7.6-System und...

Erkennen Sie den CSS-Ladeeffekt nach dem Klicken auf die Schaltfläche

Da es in dem Produkt meiner Firma eine Schaltfläc...

jQuery implementiert die Funktion zum Ziehen von Bildern mit der Maus

In diesem Beispiel wird jQuery verwendet, um eine...