Detaillierte Erläuterung des Dockerfiles zum Erstellen eines benutzerdefinierten Docker-Images und Vergleich der CMD- und ENTRYPOINT-Anweisungen

Detaillierte Erläuterung des Dockerfiles zum Erstellen eines benutzerdefinierten Docker-Images und Vergleich der CMD- und ENTRYPOINT-Anweisungen

1. Übersicht

Es gibt drei Möglichkeiten, ein Docker-Image zu erstellen:

  • Docker-Commit-Befehl: Generieren Sie ein Image aus einem Container;
  • Dockerfile-Datei + Docker-Build-Befehl;
  • Importieren aus lokalem Dateisystem: OpenVZ-Vorlagen.

Eine allgemeine Beschreibung dieser drei Methoden finden Sie unter „Erstellen eines Images“ von yeasy/docker_practice.

Ich habe kürzlich etwas über die Konfiguration der Dockerfile-Datei gelernt. Hier ist eine kurze Zusammenfassung und ein Vergleich der CMD- und ENTRYPOINT-Anweisungen, die mich zuvor verwirrt haben.

2. Dockerfile-Zusammenfassung

Dockerfile besteht aus Befehlszeilen und unterstützt Kommentarzeilen, die mit # beginnen.

Im Allgemeinen ist eine Docker-Datei in vier Teile unterteilt: Basis-Image-Informationen, Betreuerinformationen, Anweisungen zum Image-Betrieb und Anweisungen, die beim Starten des Containers ausgeführt werden sollen.

Vier Teile

Anweisung

Basisbildinformationen

AUS

Informationen zum Betreuer

BEWAHRER

Bedienungsanleitung für den Spiegel

AUSFÜHREN, KOPIEREN, HINZUFÜGEN, AUSSTELLEN usw.

Anweisungen ausführen, wenn der Container startet

CMD, EINSTIEGSPUNKT

Die erste Anweisung der Dockerfile-Datei muss FROM sein, gefolgt von verschiedenen Anweisungen für Image-Operationen und schließlich CMD oder ENTRYPOINT, um den Befehl anzugeben, der beim Starten des Containers ausgeführt werden soll.

Nachfolgend finden Sie eine Einführung in die verschiedenen Anweisungen im Dockerfile von yeasy/docker_practice:

Anweisung

Das allgemeine Format von Anweisungen besteht aus INSTRUCTION-Argumenten und Anweisungen umfassen FROM, MAINTAINER, RUN usw.

AUS

Das Format ist FROM <Bild> oder FROM <Bild>:<Tag>.

Die erste Anweisung muss eine FROM-Anweisung sein. Wenn Sie mehrere Images in derselben Docker-Datei erstellen, können Sie außerdem mehrere FROM-Anweisungen verwenden (einmal für jedes Image).

BEWAHRER

Das Format ist MAINTAINER <Name>, das die Betreuerinformationen angibt.

LAUFEN

Das Format ist RUN <Befehl> oder RUN ["ausführbare Datei", "Param1", "Param2"].

Ersteres führt den Befehl im Shell-Terminal aus, nämlich /bin/sh -c; letzteres wird mit exec ausgeführt. Die Angabe der Verwendung anderer Terminals kann mit der zweiten Methode erfolgen, z. B. RUN ["/bin/bash", "-c", "echo hello"].

Jeder RUN-Befehl führt den angegebenen Befehl basierend auf dem aktuellen Image aus und übermittelt ihn als neues Image. Wenn der Befehl lang ist, können Sie ihn mit \ umschließen.

CMD

Unterstützt drei Formate

CMD ["ausführbare Datei", "Param1", "Param2"] Verwenden Sie zur Ausführung exec. Dies ist die empfohlene Methode.

Der CMD-Befehl param1 param2 wird in /bin/sh ausgeführt und Anwendungen bereitgestellt, die Interaktion benötigen;

CMD ["param1","param2"] stellt Standardparameter für ENTRYPOINT bereit;

Gibt den Befehl an, der beim Starten des Containers ausgeführt werden soll. Jedes Dockerfile kann nur einen CMD-Befehl haben. Wenn mehrere Befehle angegeben werden, wird nur der letzte ausgeführt.

Wenn der Benutzer beim Starten des Containers einen auszuführenden Befehl angibt, wird der von CMD angegebene Befehl überschrieben.

EXPONIEREN

Das Format ist EXPOSE <Port> [<Port>...].

Teilen Sie dem Docker-Server die Portnummer mit, die der Container zur Verwendung durch verbundene Systeme freigibt. Beim Starten des Containers müssen Sie -P übergeben, und der Docker-Host weist automatisch einen Port zur Weiterleitung an den angegebenen Port zu.

Umwelt

Das Format ist ENV <Schlüssel> <Wert>. Gibt eine Umgebungsvariable an, die von nachfolgenden RUN-Anweisungen verwendet und beibehalten wird, während der Container ausgeführt wird.

Zum Beispiel

ENV PG_MAJOR 9.3

ENV PG_VERSION 9.3.4

FÜHREN SIE curl -SL http://example.com/postgres-$PG_VERSION.tar.xz aus | tar -xJC /usr/src/postgress && …

ENV-PFAD /usr/local/postgres-$PG_MAJOR/bin:$PATH

HINZUFÜGEN

Das Format ist ADD <Quelle> <Ziel>.

Dieser Befehl kopiert die angegebene <Quelle> nach <Ziel> im Container. Dabei kann <src> ein relativer Pfad zum Verzeichnis sein, in dem sich die Docker-Datei befindet; es kann auch eine URL sein; oder es kann eine TAR-Datei sein (automatisch in ein Verzeichnis dekomprimiert).

KOPIE

Das Format ist KOPIE <Quelle> <Ziel>.

Kopieren Sie den <src> des lokalen Hosts (relativer Pfad zum Verzeichnis, in dem sich die Docker-Datei befindet) in den <dest> des Containers.

Wenn Sie als Quellverzeichnis ein lokales Verzeichnis verwenden, empfiehlt sich die Verwendung von COPY.

EINSTIEGSPUNKT

Zwei Formate:

EINSTIEGSPUNKT ["ausführbare Datei", "param1", "param2"]

ENTRYPOINT-Befehl param1 param2 (in der Shell ausgeführt).

Der nach dem Start des Konfigurationscontainers auszuführende Befehl kann nicht durch die von „docker run“ bereitgestellten Parameter überschrieben werden.

In jedem Dockerfile kann nur ein ENTRYPOINT vorhanden sein. Wenn mehrere ENTRYPOINTs angegeben werden, wird nur der letzte wirksam.

VOLUMEN

Das Format ist VOLUME ["/Daten"].

Erstellen Sie einen Einhängepunkt, der vom lokalen Host oder anderen Containern eingehängt werden kann. Dieser wird im Allgemeinen zum Speichern von Datenbanken und Daten verwendet, die verwaltet werden müssen.

BENUTZER

Das Format ist USER-Daemon.

Geben Sie beim Ausführen des Containers den Benutzernamen oder die UID an. Nachfolgende RUNs verwenden ebenfalls den angegebenen Benutzer.

Wenn der Dienst keine Administratorrechte erfordert, können Sie den ausgeführten Benutzer über diesen Befehl angeben. Und Sie können die erforderlichen Benutzer vorher erstellen, zum Beispiel: RUN groupadd -r postgres && useradd -r -g postgres postgres. Um vorübergehend Administratorrechte zu erhalten, können Sie gosu verwenden, sudo wird jedoch nicht empfohlen.

ARBEITSVERZEICHNIS

Das Format ist WORKDIR /Pfad/zum/Arbeitsverzeichnis.

Konfigurieren Sie das Arbeitsverzeichnis für nachfolgende RUN-, CMD- und ENTRYPOINT-Anweisungen.

Es können mehrere WORKDIR-Direktiven verwendet werden. Wenn die Parameter nachfolgender Befehle relative Pfade sind, basieren sie auf den Pfaden, die in den vorherigen Befehlen angegeben wurden. Zum Beispiel

ARBEITSVERZEICHNIS /a

WORKDIR b

WORKDIR c

RUN-Kennwort

Der endgültige Pfad ist /a/b/c.

EINBAUEN

Das Format ist ONBUILD [ANLEITUNG].

Konfigurieren Sie die Betriebsanweisungen, die ausgeführt werden sollen, wenn das erstellte Image als Basisimage für andere, neu erstellte Images verwendet wird.

Beispielsweise erstellt das Dockerfile ein Image-A mit folgendem Inhalt.

[...]

ONBUILD HINZUFÜGEN ./app/src

ONBUILD RUN /usr/local/bin/python-build --dir /app/src

[...]

Wenn Sie basierend auf Image A ein neues Image erstellen und FROM Image A verwenden, um das Basisimage in der neuen Docker-Datei anzugeben, wird der Inhalt der ONBUILD-Anweisung automatisch ausgeführt, was dem Hinzufügen von zwei Anweisungen am Ende entspricht.

FROM image-A #Führen Sie automatisch Folgendes aus ADD . /app/src RUN /usr/local/bin/python-build --dir /app/src

Bei Images, die die ONBUILD-Anweisung verwenden, wird empfohlen, dies im Tag anzugeben, zum Beispiel ruby:1.9-onbuild.

3. Erstellen Sie ein Bild

Erstellen Sie nach dem Schreiben der Dockerfile-Datei ein benutzerdefiniertes Image, indem Sie den Befehl „Docker Build“ ausführen. Das Docker-Build-Befehlsformat ist wie folgt:

docker build [Optionen] <Pfad>

Dieser Befehl liest die Docker-Datei im angegebenen Pfad (einschließlich Unterverzeichnisse) und sendet den gesamten Inhalt des Pfads an den Docker-Server, der das Image erstellt. Daher wird generell empfohlen, dass das Verzeichnis, in dem die Docker-Datei abgelegt wird, ein leeres Verzeichnis ist. Sie können auch die Datei .dockerignore verwenden (fügen Sie pro Zeile ein passendes Muster hinzu), damit Docker die Verzeichnisse und Dateien unter dem Pfad ignoriert.

Beispielsweise wird das folgende Dockerfile-Beispiel zum Erstellen des Images „test:0.0.1“ verwendet, wobei die Option „-t“ zum Angeben des Tags des Images verwendet wird. Der Inhalt der Docker-Datei ist wie folgt:

VON Ubuntu:14.04
WARTUNGSPERSÖNLICHKEIT [email protected]

FÜHREN SIE Mkdir /opt/leh aus
FÜHREN Sie touch /opt/leh/test aus

CMD echo „Hallo lienhua34“

Führen Sie als Nächstes den Befehl „Docker Build“ aus, um das Image „test:0.0.1“ zu generieren.

lienhua34@test$ sudo docker build -t test:0.0.1 .
Senden des Build-Kontexts an den Docker-Daemon 3.072 kB
Schritt 1: VON ubuntu:14.04
 ---> a5a467fddcb8
Schritt 2: MAINTAINER [email protected]
 ---> Wird ausgeführt in ce9e7b02f075
 ---> 332259a92e74
Zwischenbehälter entfernen ce9e7b02f075
Schritt 3: RUN mkdir /opt/leh
 ---> Wird ausgeführt in e93f0a98040f
 ---> 097e177cf37f
Zwischenbehälter ausbauen e93f0a98040f
Schritt 4: FÜHREN Sie touch /opt/leh/test aus
 ---> Wird ausgeführt in f1531d3dea1a
 ---> 0f68852f8356
Zwischenbehälter entfernen f1531d3dea1a
Schritt 5: CMD echo „Hallo lienhua34“
 ---> Wird ausgeführt in cf3c5ce2af46
 ---> 811ce27ce692
Zwischenbehälter entfernen cf3c5ce2af46
Erfolgreich erstellt 811ce27ce692

Starten Sie dann den Container des Images, um die Ergebnisse anzuzeigen.

lienhua34@test$ sudo Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT VIRTUELLE GRÖSSE
test 0.0.1 811ce27ce692 vor 32 Sekunden 187,9 MB
lienhua34@test$ sudo docker run -ti test:0.0.1
Hallo lienhua34

Jede Anweisung in der Dockerfile-Datei generiert eine Ebene des Images (Hinweis: Ein Image kann nicht mehr als 127 Ebenen haben). Die Anweisungen im Dockerfile werden nacheinander ausgeführt. Jeder Schritt erstellt einen neuen Container, führt Anweisungen im Container aus und überträgt die Änderungen. Wenn alle Anweisungen ausgeführt wurden, wird die endgültige Bild-ID zurückgegeben.

4. Vergleich der CMD- und ENTRYPOINT-Anweisungen in der Dockerfile-Datei

Die Funktionen des CMD-Befehls und des ENTRYPOINT-Befehls bestehen darin, den Befehl für das Image anzugeben, nachdem der Container gestartet wurde. Was sind also die jeweiligen Vorteile zwischen ihnen?

Um die Unterschiede zwischen dem CMD-Befehl und dem ENTRYPOINT-Befehl besser vergleichen zu können, listen wir hier die Beschreibungen dieser beiden Befehle auf.

CMD

Unterstützt drei Formate

CMD ["ausführbare Datei", "Param1", "Param2"] Verwenden Sie zur Ausführung exec. Dies ist die empfohlene Methode.

Der CMD-Befehl param1 param2 wird in /bin/sh ausgeführt und Anwendungen bereitgestellt, die Interaktion benötigen;

CMD ["param1","param2"] stellt Standardparameter für ENTRYPOINT bereit;

Gibt den Befehl an, der beim Starten des Containers ausgeführt werden soll. Jedes Dockerfile kann nur einen CMD-Befehl haben. Wenn mehrere Befehle angegeben werden, wird nur der letzte ausgeführt.

Wenn der Benutzer beim Starten des Containers einen auszuführenden Befehl angibt, wird der von CMD angegebene Befehl überschrieben.

EINSTIEGSPUNKT

Zwei Formate:

EINSTIEGSPUNKT ["ausführbare Datei", "param1", "param2"]

ENTRYPOINT-Befehl param1 param2 (in der Shell ausgeführt).

Der nach dem Start des Konfigurationscontainers auszuführende Befehl kann nicht durch die von „docker run“ bereitgestellten Parameter überschrieben werden.

In jedem Dockerfile kann nur ein ENTRYPOINT vorhanden sein. Wenn mehrere ENTRYPOINTs angegeben werden, wird nur der letzte wirksam.

Aus der obigen Beschreibung können wir erkennen, dass es zwei Gemeinsamkeiten gibt:

  1. Sie können den Shell- oder Exec-Funktionsaufruf zum Ausführen des Befehls angeben.
  2. Wenn mehrere CMD-Anweisungen oder ENTRYPOINT-Anweisungen vorhanden sind, wird nur die letzte wirksam.

Die Unterschiede zwischen ihnen sind wie folgt:

Unterschied 1: Der beim Starten des Containers durch die CMD-Anweisung angegebene Befehl kann durch den durch Docker Run angegebenen Befehl überschrieben werden, während der durch die ENTRYPOINT-Anweisung angegebene Befehl nicht überschrieben werden kann. Stattdessen werden die durch Docker Run angegebenen Parameter als Parameter des durch ENTRYPOINT angegebenen Befehls verwendet.

Unterschied 2: Der CMD-Befehl kann Standardparameter für den ENTRYPOINT-Befehl festlegen und diese durch von Docker Run angegebene Parameter überschrieben werden.

Nachfolgend finden Sie eine detaillierte Erläuterung der beiden oben genannten Unterschiede.

4.1 Unterschied 1

Der beim Starten des Containers durch die CMD-Anweisung angegebene Befehl kann durch den durch Docker Run angegebenen Befehl überschrieben werden. Der durch die ENTRYPOINT-Anweisung angegebene Befehl kann jedoch nicht überschrieben werden. Stattdessen werden die durch Docker Run angegebenen Parameter als Parameter des durch ENTRYPOINT angegebenen Befehls verwendet.

Unten finden Sie ein ausführbares Shell-Skript mit dem Namen „Startup“, dessen Funktion darin besteht, nur Befehlszeilenparameter auszugeben. Der Inhalt ist wie folgt:

#!/bin/bash

echo "beim Start, Argumente: $@"

Geben Sie den Befehl an, wenn Sie den Container über CMD starten:

Nun erstellen wir eine neue Dockerfile-Datei, die das Startskript in das Verzeichnis /opt des Containers kopiert und angibt, dass das Startskript beim Start des Containers über die CMD-Anweisung ausgeführt werden soll. Der Inhalt ist wie folgt:

VON Ubuntu:14.04
WARTUNGSPERSÖNLICHKEIT [email protected]

ADD-Start /opt
Ausführen von chmod a+x /opt/startup

CMD ["/opt/startup"]

Anschließend generieren wir das Image „test:latest“, indem wir den Befehl „Docker Build“ ausführen.

lienhua34@test$ sudo docker build -t test .
Senden des Build-Kontexts an den Docker-Daemon 4.096 kB
Schritt 1: VON ubuntu:14.04
 ---> a5a467fddcb8
Schritt 2: MAINTAINER [email protected]
 ---> Cache verwenden
 ---> 332259a92e74
Schritt 3: ADD startup /opt
 ---> 3c26b6a8ef1b
Zwischenbehälter entfernen 87022b0f30c5
Schritt 4: RUN chmod a+x /opt/startup
 ---> Wird ausgeführt in 4518ba223345
 ---> 04d9b53d6148
Zwischenbehälter ausbauen 4518ba223345
Schritt 5: CMD /opt/startup
 ---> Wird ausgeführt in 64a07c2f5e64
 ---> 18a2d5066346
Zwischenbehälter entfernen 64a07c2f5e64
Erfolgreich erstellt 18a2d5066346

Verwenden Sie dann Docker Run, um zwei Test:latest-Image-Container zu starten. Der erste Docker Run-Befehl gibt keinen Befehl zum Starten des Containers an. Der zweite Docker Run-Befehl gibt den Befehl zum Starten des Containers als „/bin/bash -c ‚echo Hello‘“ an.

lienhua34@test$ sudo docker run -ti --rm=true test
beim Start, Argumente: 
lienhua34@test$ sudo docker run -ti --rm=true test /bin/bash -c 'echo Hallo'
Hallo

Aus den obigen Laufergebnissen können Sie ersehen, dass der Ausführungsbefehl, der angegeben wird, wenn der Docker-Ausführungsbefehl den Container startet, den durch die CMD-Anweisung in der Dockerfile-Datei angegebenen Befehl überschreibt.

Geben Sie den Befehl an, wenn der Container per ENTRYPOINT gestartet wird:

Ersetzen Sie CMD im obigen Dockerfile durch ENTRYPOINT. Der Inhalt lautet wie folgt:

VON Ubuntu:14.04
WARTUNGSPERSÖNLICHKEIT [email protected]

Füge den Start von /opt hinzu
AUSFÜHREN chmod a+x /opt/startup

EINSTIEGSPUNKT ["/opt/startup"]

Führen Sie auf ähnliche Weise Docker Build aus, um das Image „test:latest“ zu generieren.

lienhua34@test$ sudo docker build -t test .
Senden des Build-Kontexts an den Docker-Daemon 4.096 kB
Schritt 1: VON ubuntu:14.04
 ---> a5a467fddcb8
Schritt 2: MAINTAINER [email protected]
 ---> Cache verwenden
 ---> 332259a92e74
Schritt 3: ADD startup /opt
 ---> Cache verwenden
 ---> 3c26b6a8ef1b
Schritt 4: RUN chmod a+x /opt/startup
 ---> Cache verwenden
 ---> 04d9b53d6148
Schritt 5: ENTRYPOINT /opt/startup
 ---> Wird ausgeführt in cdec60940ad7
 ---> 78f8aca2edc2
Zwischenbehälter entfernen cdec60940ad7
78f8aca2edc2 erfolgreich erstellt

Verwenden Sie dann Docker Run, um zwei Test:latest-Image-Container zu starten. Der erste Docker Run-Befehl gibt keinen Befehl zum Starten des Containers an. Der zweite Docker Run-Befehl gibt den Befehl zum Starten des Containers als „/bin/bash -c ‚echo Hello‘“ an.

lienhua34@test$ sudo docker run -ti --rm=true test
beim Start, Argumente: 
lienhua34@test$ sudo docker run -ti --rm=true test /bin/bash -c 'echo Hallo'
beim Start, Argumente: /bin/bash -c echo Hallo

Aus den obigen Laufergebnissen ist ersichtlich, dass der durch den Docker-Run-Befehl angegebene Container-Ausführungsbefehl den durch die ENTRYPOINT-Anweisung angegebenen Befehl in der Dockerfile-Datei nicht überschreiben kann, sondern als Parameter an den durch die ENTRYPOINT-Anweisung angegebenen Befehl übergeben wird.

4.2 Unterschied 2

Der CMD-Befehl kann Standardparameter für den ENTRYPOINT-Befehl festlegen und durch von Docker Run angegebene Parameter überschrieben werden.

Verwenden Sie dasselbe Startskript wie oben. Schreiben Sie eine Docker-Datei mit folgendem Inhalt:

VON Ubuntu:14.04
WARTUNGSPERSÖNLICHKEIT [email protected]
 
ADD-Start /opt
Ausführen von chmod a+x /opt/startup

EINSTIEGSPUNKT ["/opt/startup", "arg1"]
CMD ["arg2"]

Führen Sie den Befehl „Docker Build“ aus, um das Image „test:latest“ zu generieren.

lienhua34@test$ sudo docker build -t test .
Senden des Build-Kontexts an den Docker-Daemon 4.096 kB
Schritt 1: VON ubuntu:14.04
 ---> a5a467fddcb8
Schritt 2: MAINTAINER [email protected]
 ---> Cache verwenden
 ---> 332259a92e74
Schritt 3: ADD startup /opt
 ---> Cache verwenden
 ---> 3c26b6a8ef1b
Schritt 4: RUN chmod a+x /opt/startup
 ---> Cache verwenden
 ---> 04d9b53d6148
Schritt 5: ENTRYPOINT /opt/startup arg1
 ---> Wird ausgeführt in 54947233dc3d
 ---> 15a485253b4e
Zwischenbehälter entfernen 54947233dc3d
Schritt 6: CMD arg2
 ---> Wird ausgeführt in 18c43d2d90fd
 ---> 4684ba457cc2
Zwischenbehälter ausbauen 18c43d2d90fd
Erfolgreich erstellt 4684ba457cc2

Führen Sie als Nächstes „docker run“ aus, um zwei test:latest-Imagecontainer zu starten. Der erste „docker run“-Befehl gibt keine Parameter an, und der zweite „docker run“-Befehl gibt den Parameter arg3 an. Die Ergebnisse sind wie folgt:

lienhua34@test$ sudo docker run -ti --rm=true test
beim Start, Argumente: arg1 arg2
lienhua34@test$ sudo docker run -ti --rm=true test arg3
beim Start, Argumente: arg1 arg3

Anhand der Laufergebnisse des ersten Containers oben können wir erkennen, dass der CMD-Befehl die Standardparameter für den ENTRYPOINT-Befehl festlegt; an den Laufergebnissen des zweiten Containers können wir erkennen, dass die durch den Befehl „docker run“ angegebenen Parameter die durch den CMD-Befehl angegebenen Parameter überschreiben.

4.3 Hinweise

Die CMD-Anweisung stellt Standardparameter für die ENTRYPOINT-Anweisung basierend auf der Image-Hierarchie bereit, nicht basierend darauf, ob sie sich in derselben Dockerfile-Datei befindet. Dies bedeutet, dass, wenn das Docker-File den durch ENTRYPOINT im Basis-Image angegebenen Startbefehl angibt, die CMD im Docker-File weiterhin die Standardparameter für den ENTRYPOINT im Basis-Image festlegt.

Beispielsweise haben wir das folgende Dockerfile:

VON Ubuntu:14.04
WARTUNGSPERSÖNLICHKEIT [email protected]
 
ADD-Start /opt
Ausführen von chmod a+x /opt/startup

EINSTIEGSPUNKT ["/opt/startup", "arg1"]

Generieren Sie das Image „test:0.0.1“, indem Sie den Befehl „Docker Build“ ausführen, erstellen Sie dann einen Container für das Image und zeigen Sie die Laufergebnisse an.

lienhua34@test$ sudo docker build -t test:0.0.1 .
Senden des Build-Kontexts an den Docker-Daemon 6.144 kB
Schritt 1: VON ubuntu:14.04
 ---> a5a467fddcb8
Schritt 2: MAINTAINER [email protected]
 ---> Wird ausgeführt in 57a96522061a
 ---> c3bbf1bd8068
Zwischenbehälter ausbauen 57a96522061a
Schritt 3: ADD startup /opt
 ---> f9884fbc7607
Zwischenbehälter entfernen 591a82b2f382
Schritt 4: RUN chmod a+x /opt/startup
 ---> Wird ausgeführt in 7a19f10b5513
 ---> 16c03869a764
Zwischenbehälter ausbauen 7a19f10b5513
Schritt 5: ENTRYPOINT /opt/startup arg1
 ---> Wird ausgeführt in b581c32b25c3
 ---> c6b1365afe03
Zwischenbehälter entfernen b581c32b25c3
Erfolgreich erstellt c6b1365afe03
lienhua34@test$ sudo docker run -ti --rm=true test:0.0.1
beim Start, Argumente: arg1

Erstellen Sie als Nächstes eine neue Dockerfile-Datei. Das Basisimage ist das neu generierte test:0.0.1. Geben Sie mit CMD an, dass Sie die Zeichenfolge „in test:0.0.2“ über echo drucken möchten. Der Dateiinhalt ist wie folgt:

VON Test:0.0.1
WARTUNGSPERSÖNLICHKEIT [email protected]

CMD ["/bin/bash", "-c", "echo in test:0.0.2"]

Führen Sie den Befehl „Docker Build“ aus, um das Image „test:0.0.2“ zu generieren, und führen Sie dann „Docker Run“ aus, um einen Container des Images „test:0.0.2“ zu starten und die Ergebnisse anzuzeigen.

lienhua34@test$ sudo docker build -t test:0.0.2 .
Senden des Build-Kontexts an den Docker-Daemon 6.144 kB
Schritt 1: FROM test:0.0.1
 ---> c6b1365afe03
Schritt 2: MAINTAINER [email protected]
 ---> Läuft in deca95cf4c15
 ---> 971b5a819b48
Zwischenbehälter deca95cf4c15 entfernen
Schritt 3: CMD /bin/bash -c echo in test:0.0.2
 ---> Wird ausgeführt in 4a31c4652e1e
 ---> 0ca06ba31405
Zwischenbehälter ausbauen 4a31c4652e1e
Erfolgreich erstellt 0ca06ba31405
lienhua34@test$ sudo docker run -ti --rm=true test:0.0.2
beim Start, Argumente: arg1 /bin/bash -c echo in test:0.0.2

Aus den obigen Ergebnissen können wir ersehen, dass beim Ausführen des durch das Image test:0.0.2 gestarteten Containers die Zeichenfolge „in test:0.0.2“ nicht gedruckt wird, sondern der durch die CMD-Anweisung angegebene Befehl als Parameter des durch ENTRYPOINT im Basisimage test:0.0.1 angegebenen laufenden Skriptstarts verwendet wird.

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:
  • Schritte zum Erstellen eines Docker-Images mit Dockerfile
  • So erstellen Sie ein Apache-Image mit Dockerfile
  • Multiservice-Image-Packaging-Vorgang von Dockerfile unter Aufsicht
  • Docker-Image erstellen Dockerfile und Commit-Operationen
  • So erstellen Sie ein Tomcat-Image basierend auf Dockerfile
  • So passen Sie Docker-Images mit Dockerfile an
  • Implementierung eines Tomcat-Images, das mit Dockerfile basierend auf Alpine erstellt wurde
  • Implementierung eines Crawler-Scrapy-Image, das von Dockerfile basierend auf Alpine erstellt wurde
  • So erstellen Sie Ihr eigenes Image mit Dockerfile
  • Erstellen Sie ein Docker-Image mit Dockerfile

<<:  Erläuterung der MySQL-Leistungsprüfung durch den Befehl „show processlist“

>>:  React implementiert dynamische Popup-Fensterkomponente

Artikel empfehlen

Linux-Systemreparaturmodus (Einzelbenutzermodus)

Inhaltsverzeichnis Vorwort 1. Allgemeine Fehlerbe...

Datenbankabfrageoptimierung: Unterabfrageoptimierung

1. Fall Nehmen Sie alle Mitarbeiter, die nicht Fi...

Weitere Features der JavaScript-Konsole

Inhaltsverzeichnis Überblick console.log konsole....

Fallerklärung für den Nginx-Reverse-Proxy zu Go-FastDFS

Hintergrund go-fastdfs ist ein verteiltes Dateisy...

Remotedesktopverbindung zwischen Windows und Linux

Wenn es um eine Remotedesktopverbindung zu Linux ...

Gemessenes Bild - HTTP-Anforderung

Bitte öffnen Sie die Testseite in einem gängigen ...

Beispielcode zum Ausblenden von Element-Bildlaufleisten mithilfe von CSS

Wie kann ich die Bildlaufleisten ausblenden und t...

So verwenden Sie Docker-Compose zum Erstellen eines ELK-Clusters

Auf alle Orchestrierungsdateien und Konfiguration...

Detaillierte Erklärung der Rolle des Schlüssels in React

Inhaltsverzeichnis Frage: Wird die Farbe des Bere...

Vue Router vue-router ausführliche Erklärung Anleitung

Chinesische Dokumentation: https://router.vuejs.o...

Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

1. Langsame Abfrage aufgrund fehlenden oder ungül...