Im vorherigen Artikel [Detaillierte Erläuterung von Dockerfile für Docker-Container] haben wir ein umfassenderes Verständnis von Dockerfile erhalten. Wir haben auch erwähnt, dass sowohl `ENTRYPOINT` als auch `CMD` den Container-Startbefehl angeben können. Da diese beiden Befehle für die Beherrschung des Schreibens von Docker-Dateien von zentraler Bedeutung sind, werden sie hier separat erläutert. 1. Schreiben Sie vor Im vorherigen Artikel haben wir ein umfassendes Verständnis von Dockerfile. Wir haben auch erwähnt, dass 2. Der Hauptunterschied zwischen CMD und ENTRYPOINTKommen wir gleich zur Sache. Sowohl CMD als auch ENTRYPOINT werden verwendet, um den Befehl zum Starten der Containerausführung anzugeben. Der Unterschied ist:
Damit der erstellte Container normal gestartet wird, muss die von uns geschriebene Dockerfile-Datei eine CMD- oder ENTRYPOINT-Anweisung enthalten. 3. Kombination aus CMD und ENTRYPOINT1.CMD
Wenn die Docker-Datei mehrere CMDs enthält, wird nur die letzte geladen und verwendet. Wir suchen in Dockerhub nach dem offiziellen CentOS-Image und werfen einen Blick auf die offizielle Dockerfile-Datei. Grundsätzlich stellt uns jedes offizielle Image den Dockerfile-Link seiner eigenen Version wie folgt zur Verfügung: Schauen wir uns das Dockerfile des VON Grund auf HINZUFÜGEN centos-8-x86_64.tar.xz / LABEL org.label-schema.schema-version="1.0" org.label-schema.name="CentOS-Basisimage" org.label-schema.vendor="CentOS" org.label-schema.license="GPLv2" org.label-schema.build-date="20201204" CMD ["/bin/bash"] Es gibt nur vier Zeilen, die den gesamten Inhalt der Docker-Datei darstellen, um eine Nicht nur CentOS, sondern auch andere Debian-, Ubuntu-, Busybox- und andere Images müssen den Startbefehl nur über CMD angeben. Beispielsweise ist busybox prägnanter: VON Grund auf HINZUFÜGEN busybox.tar.xz / CMD ["sch"] Um diese Art von Basis- und Tool-Images zu erstellen, müssen wir nur ein erforderliches CMD angeben, um den Container zu starten. Aber wir schreiben kein Dockerfile, nur um einen Container zu starten. Meistens wollen wir unsere App und unseren Dienst im Container ausführen. Natürlich kann es auch über CMD gestartet werden, aber dabei gibt es einen Fehler. Der oben erwähnte CMD-Startbefehl wird durch den Docker-Run-Parameter ersetzt. Wir haben das folgende Dockerfile [root@localhost Dockerfiles]# cat Dockerfile VON centos CMD ["/bin/top","-b"] Nach dem Erstellen starten Sie den Container mit dem Parameter ps. [root@localhost Dockerfiles]# docker run -it centos_top:v1 ps PID TTY ZEIT CMD 1 Punkte/0 00:00:00 Punkte Sie können sehen, dass nach dem Starten des Containers 2. ENTRYPOINT kombiniert mit CMD Exec- und Shell-Formulare von
Wie oben erwähnt Wir nehmen das offizielle Nginx Dockerfile neueste Version 1.21 als Beispiel Schauen wir uns zunächst ... KOPIEREN Sie docker-entrypoint.sh / KOPIEREN 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d KOPIE 20-envsubst-on-templates.sh /docker-entrypoint.d KOPIEREN 30-tune-worker-processes.sh /docker-entrypoint.d EINSTIEGSPUNKT ["/docker-entrypoint.sh"] AUSSETZEN 80 STOPSIGNAL SIGQUIT CMD ["nginx", "-g", "Daemon aus;"] Aus dem Obigen können wir ersehen, dass beim Starten des Nginx-Containers zuerst das Skript #docker-entrypoint.sh nginx -g "Daemon aus;" Was passiert, wenn wir mit Docker Run Parameter übergeben? Ich habe nginx-debug bestanden #docker run -dt nginx nginx-debug -g "Daemon aus;" Zu diesem Zeitpunkt entspricht das Starten des Containers der Ausführung des folgenden Skripts und der folgenden Parameter #docker-entrypoint.sh nginx-debug -g "Daemon aus;" Schauen wir uns den Container an, den wir über ps gestartet haben [root@localhost Dockerfiles]# ps -ef|grep nginx root 6327 6306 0 Aug12 pts/0 00:00:00 nginx: Masterprozess nginx -g Daemon aus; 101 6384 6327 0 Aug12 pts/0 00:00:00 nginx: Arbeitsprozess 101 6385 6327 0 Aug12 pts/0 00:00:00 nginx: Arbeitsprozess root 16800 16780 3 12:51 pts/0 00:00:00 nginx: Masterprozess nginx-debug -g Daemon aus; 101 16857 16800 0 12:51 pts/0 00:00:00 nginx: Arbeitsprozess 101 16858 16800 0 12:51 pts/0 00:00:00 nginx: Arbeitsprozess Offensichtlich wurden unsere beiden Container mit den Parametern nginx und nginx-debug erfolgreich gestartet! Das heißt, der Befehl, den wir über Was ist docker-entrypoint.sh? docker-entrypoint.sh Dies ist ein Vorverarbeitungsskript, das normalerweise zum Filtern von Befehlszeilenparametern oder zum Ausführen von exec verwendet wird, um den Prozess von Container 1 zu starten. Das Implementieren von Standardbefehlsparametern oder das Empfangen von Docker-Run-Parametern über ENTRYPOINT+CMD ist eine sehr beliebte und nützliche Methode zum Schreiben von Docker-Dateien. Dies ist das Ende dieses Artikels über die Kombination von ENTRYPOINT und CMD in Dockerfile. Weitere Informationen zu ENTRYPOINT und CMD in Dockerfile finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Lösung zur Konvertierung in Inline-Styles in CSS (css-inline)
>>: Was ist ein MySQL-Index? Fragen Sie, wenn Sie es nicht verstehen
Dieser Artikel beschreibt anhand von Beispielen d...
In diesem Artikelbeispiel wird der spezifische Ja...
Als ich kürzlich das Linux-Betriebssystem zum Aus...
Manchmal erstellen wir einen Dateiserver über ngi...
Die meisten Leute kompilieren MySQL und legen es ...
Inhaltsverzeichnis Vorwort Was ist VueUse Einfach...
Inhaltsverzeichnis 1. Die übergeordnete Komponent...
Manchmal ist das Herunterladen großer Netzwerkdat...
Verwenden Sie natives JavaScript, um den Countdow...
veranschaulichen: Es gibt zwei Haupttypen von Ngi...
Inhaltsverzeichnis Vorwort 1. Bildoptimierung 2. ...
Inhaltsverzeichnis 1. Registrieren Sie ein Konto ...
1. Ziel: Ändern Sie den Wert des character_set_se...
Vor einigen Tagen teilte die Bibliothek mit, dass...
DOM-Konzepte DOM: Dokumentobjektmodell: Das Dokum...