Zusammenfassung gängiger Befehle in Dockerfile

Zusammenfassung gängiger Befehle in Dockerfile

Syntaxzusammensetzung:

1 Anmerkungsinformationen
2 Befehle --- Parameter [normalerweise großgeschrieben | nicht wirklich groß-/kleinschreibungsabhängig]
3 Sequentielle Ausführung
4 Die erste Zeile ohne Kommentar muss von [basierend auf diesem Basisbild] stammen.
5 Benötigen Sie ein dediziertes Verzeichnis [selbst erstellen]
6 Der erste Buchstabe muss groß geschrieben werden --- Dockerfile
7 Wenn Sie ein Image erstellen, das von Dateien oder Paketgruppen abhängt, müssen Sie diese im Voraus in einem dedizierten Verzeichnis vorbereiten

.dockerignore-Datei – Definieren Sie in jeder Zeile eine Ignorierdatei.
--Im Arbeitsverzeichnis erstellen
Beispiel: pam.d/su*

...........................................................

Allgemeine Anweisungen im Dockerfile:

1 VON ---Geben Sie das Basisbild an

Wenn das Basis-Image nicht vorhanden ist, wird es im folgenden Format vom Docker Hub abgerufen:
VON <Bild>:[Tag]
VON <image>@digest[Prüfsumme]
Wenn der aktuelle Host dieses Bild nicht hat, wird es automatisch zum offiziellen Website-HUB weitergeleitet, um es herunterzuladen
..............................................

2 MAINTANIER -- Dockerfile bereitstellen Der Ersteller stellt persönliche Informationen zur Verfügung

[allmählich aufgegeben]
ETIKETTE -- ersetzt MAINTANIER
Spezifische Verwendung:
LABLE-Betreuer="Autoreninformationen"

Format verwenden:

WARTUNG „guowei <[email protected]>“

......................................................

3 KOPIEREN – Kopieren Sie die Dateien vom Hostcomputer in das Image!

Die Datei sollte sich im Dockerfile-Arbeitsverzeichnis befinden
src Originaldatei
-- Unterstützt Platzhalter
--Normalerweise ein relativer Pfad
dest Zielpfad
--Normalerweise ein absoluter Pfad

Durch Leerzeichen getrennte Zeichenfolgen müssen durch "" getrennt werden, andernfalls werden sie als zwei Dateien behandelt!

Richtlinien zum Kopieren von Dateien:
1 src muss ein Pfad im Build-Kontext sein, nicht das übergeordnete Verzeichnis
2 Wenn src ein Verzeichnis ist, werden seine internen Dateien oder Unterverzeichnisse rekursiv kopiert
Das src-Verzeichnis selbst wird jedoch nicht kopiert
3 Wenn mehrere srcs angegeben werden oder Platzhalter in src verwendet werden, muss dest ein
Verzeichnis und muss mit / enden
4 Wenn das Zielverzeichnis nicht existiert, wird es automatisch erstellt, einschließlich seines übergeordneten Verzeichnisses.
..............................................................

4 ADD - ähnlich dem COPY-Befehl

Unterstützt den URL-Pfad – Wenn auf das Netzwerk zugegriffen werden kann, wird auf das Netzwerk zugegriffen, um es lokal herunterzuladen und dann in das Image zu packen!

Betriebsanleitung:
1 Wenn src eine URL ist und dest nicht mit / endet, wird die durch src angegebene Datei heruntergeladen und direkt als dest erstellt; wenn dest mit / endet, wird die durch die Dateinamen-URL angegebene Datei direkt heruntergeladen und als dest/Dateiname gespeichert

2 Wenn es sich um ein komprimiertes Paket handelt, wird es dekomprimiert, aber die über den URL-Pfad erhaltene TAR-Datei wird nicht erweitert

3 Wenn mehrere Quellen vorhanden sind oder Platzhalter direkt oder indirekt verwendet werden, muss „dest“ ein Verzeichnispfad sein, der mit / endet. Wenn „dest“ nicht mit / endet, wird es als normale Datei betrachtet.
Der Inhalt von src wird direkt nach dest geschrieben!

.................................................................

5 WORKDIR --Arbeitsverzeichnis angeben

Jedes Mal wird es nur die nachfolgenden Anweisungen dieser Anweisung beeinflussen

ADD nginx-1.14.2.tar.gz /usr/local/src/ – nicht betroffen

ARBEITSVERZEICHNIS /usr/local/src/

ADD nginx-1.14.2.tar.gz ./ --Betroffen

............................................................

6 VOLUMEN

Es können nur von Docker verwaltete Volumes definiert werden:
VOLUME /Daten/mysql

Beim Ausführen wird unter dem Host-Verzeichnis zufällig ein Volume-Verzeichnis generiert!
................................................................

7 EXPOSE Öffnen Sie den angegebenen Abhörport für den Container, um mit der Außenwelt zu kommunizieren

Format verwenden:
EXPOSE 80/TCP 23/UDP

Wenn kein Protokoll angegeben ist, ist der Standardwert TCP.

Verwenden Sie die Option -P, um den hier angegebenen Port freizugeben!
Der mit diesem Port verknüpfte Port des Hosts ist jedoch zufällig!
..............................................................

8 UMWELT

Wird verwendet, um die erforderlichen Umgebungsvariablen für das Image zu definieren und kann von anderen Befehlen aufgerufen werden, die ihm in der Dockerfile-Datei folgen.

Anrufformat:
$A oder ${A}

ENV <Schlüssel> <Wert>
ENV <Schlüssel>=<Wert>

Im ersten Format wird alles nach dem Schlüssel als Teil von <value> betrachtet. Daher kann immer nur eine Variable gleichzeitig festgelegt werden!

Das zweite Format kann verwendet werden, um mehrere Variablen gleichzeitig festzulegen. Jede Variable ist ein <Schlüssel>=<Wert>
Wenn <Wert> Leerzeichen enthält, können Sie diese mit einem Backslash (\) maskieren oder <Wert> in Anführungszeichen einschließen. Darüber hinaus kann der Backslash auch zur Fortsetzung verwendet werden

Beim Definieren mehrerer Variablen. Die zweite Methode wird empfohlen, um alle Funktionen in derselben Schicht auszuführen. Spezifische Verwendung:
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV-KLASSENSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin/

ENV A /web/html

KOPIEREN SIE index.html ${A:-/web/html}

Übergeben von Variablen im Docker-Run:
docker run -e [list] übergibt Variablenwerte. Wenn Sie Variablen in Dockerfile zuweisen, können Sie in Docker Run weiterhin Werte zuweisen.
docker run --name b1 --rm -e A=xx [Bild-ID]
Der Docker-Build-Prozess wird dadurch nicht beeinträchtigt!

printenv – Informationen zu Umgebungsvariablen ausgeben

..............................................................

9 RUN-Befehl:

Format verwenden:
RUN <Befehl>
RUN ["<ausführbare Datei>","<param1>","<param2>"]

Im ersten Format ist <command command normalerweise ein Shell-Befehl und wird als "/bin/sh -c"> ausgeführt. Dies bedeutet, dass die PID dieses Prozesses im Container nicht 1 sein kann und keine Unix-Signale empfangen kann. Wenn der Container daher mit dem Befehl docker stop gestoppt wird, empfängt dieser Prozess das Signal nicht.

Der Parameter im zweiten Syntaxformat ist ein Array im JSON-Format, wobei <executable> der auszuführende Befehl ist und das folgende
<paramN> ist eine Option oder ein Parameter, der an den Befehl übergeben wird. Der in diesem Format angegebene Befehl wird jedoch nicht als "/bin/sh -c"> ausgeführt, sodass allgemeine Shell-Operationen wie Variablensubstitution und Platzhaltersubstitution nicht ausgeführt werden. Wenn der auszuführende Befehl jedoch von dieser Shell-Funktion abhängt, kann er durch das folgende Format ersetzt werden:
RUN ["/bin/bash","-c","<ausführbare Datei>","<param1>"]

..............................................................................

10 CMD-Befehl: in Docker Run ausführen

Es gibt drei Möglichkeiten, Grammatik zu schreiben
1. CMD ["executable","param1","param2"] -- Starten Sie die spezifische Instanz des Prozesses mit der ID 1:

CMD ["/bin/sh","-c","/bin/httpd","-f","-h /web/html]

2. CMD ["param1","param2"]
3. CMD-Befehl param1 param2 - direkt als Unterprozess der Shell arbeiten
param*=Ausführungsparameter, wie der zweite:
CMD ["nginx"]

docker run -it -p 8888:80 172.20.23.31/server1/nginx-base:v1 nginx

Nur doppelte Anführungszeichen!

CMD ["Param1","Param2"]
--Diese Verwendung wird verwendet, um Standardparameter für die ENTRYPOINT-Anweisung bereitzustellen

Kann zum Ausführen von Skripten verwendet werden:
Skript hinzufügen:

Füge run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh hinzu

AUSFÜHREN chmod +x /apps/tomcat/bin/run_tomcat.sh

Führen Sie den Befehl chown -R tomcat aus:tomcat /apps /data/tomcat

CMD ["/apps/tomcat/bin/run_tomcat.sh"] – referenzieren Sie das Skript!

..............................................................

11 EINSTIEGSPUNKT

Eine Funktion ähnlich der CMD-Anweisung wird verwendet, um ein standardmäßig ausgeführtes Programm für den Container anzugeben, wodurch der Container wie ein separates ausführbares Programm wird

Im Gegensatz zu CND wird das durch diesen Befehl gestartete Programm nicht durch die in der Docker-Run-Befehlszeile angegebenen Parameter überschrieben. Darüber hinaus werden diese Befehlszeilenparameter als Parameter an das durch ENTRYPOINT angegebene Programm übergeben.

Format verwenden:

ENTRYPOINT <Befehl>
EINSTIEGSPUNKT ["<ausführbare Datei>","<param1>","<param2>"]

Die an den Befehl „docker run“ übergebenen Befehlsparameter überschreiben den von CMD angegebenen und an ENTRYPOINT angehängten Inhalt.
Der Befehl wird schließlich als Parameter verwendet

Es können mehrere solcher Anweisungen in der Dockerfile-Datei vorhanden sein, aber nur die letzte wird wirksam!

Beim Ausführen von „Docker Run“ kann der mit der Zeichenfolgenoption „--entrypoint“ übergebene Befehl die im Docker-File definierte ENTRYPOINT-Anweisung überschreiben.

So erlauben Sie Nginx-Konfigurationsdateien, Parameter zu empfangen

Erstellen Sie ein Skript:

#!/bin/bash
#
Katze > /etc/nginx/conf.d/www.conf <<EOF
Server {
Servername ${HOSTNAME};
hören Sie ${IP:-0.0.0.0}:${PORT:-80};
Wurzel ${ROOT:-/web/html};
}
Ende der Laufzeit
Ausführung "$@"
chmod +x nginx-conf.sh

Docker-Datei:

VON xxx
ENV ROOT='/web/html/'
ADD index.html ${ROOT}
ADD nginx-conf.sh /bin/nginx-conf.sh
CMD ["/usr/sbin/nginx","-g","Daemon aus;"]
EINSTIEGSPUNKT ["/bin/nginx-conf.sh"]
docker run --name b1 --rm -P -e "PORT=8080" [Bild-ID]

Hinweis: Doppelte Anführungszeichen sind erforderlich! ! !
................................................................................

12 USER-Befehl:

Wird verwendet, um RUN, CMD oder ENTRYPOINT anzugeben, wenn ein Image oder eine Docker-Datei ausgeführt wird.
Der Benutzername oder die UID des durch den Befehl angegebenen Programms

Standardmäßig wird der Container als Root ausgeführt.

Format:
USER <UID>|<Benutzername>

Beachten Sie, dass <UID> eine beliebige Zahl sein kann, in der Praxis muss es sich jedoch um eine gültige Zahl für einen Benutzer in /etc/passwd handeln.
UID, sonst schlägt der Docker-Run-Befehl fehl!

Muss in der Datei /etc/passwd im Container vorhanden sein

....................................................................................................

13 GESUNDHEITSCHECK

Überwachung des Gesundheitszustands
HEALTHCHECK NONE -- Nicht überwachen

Allgemeine Optionen:
--interval=DAUER Der Standardwert ist 30 Sekunden - wie oft überwacht werden soll
--timeout=DAUER, standardmäßig 30 Sekunden – Überwachungs-Timeout
--start-period=DAUER --Wie lange dauert es, bis der Docker-Container gestartet wird? Der Standardwert ist 0 Sekunden.
--retries=N Der Standardwert ist 3 Mal. Die Standardanzahl von Prüfungen wird als Fehlschlag gewertet.

Antwortwert:
0 - Erfolg
1 - Fehler
2. Anpassung

Anwendungsbeispiele:

HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit1

Anwendung im Dockerfile:

HEALTHCHECK --start-period=3s CMD wget -O - -q http://{IP:-0.0.0.0}:${PORT:-80}/

Es kann auch im Docker-Run definiert werden:

--health-cmd Zeichenfolge
--health-interval Dauer
--health-retries int
--health-start-periodendauer
--health-timeout Dauer

.................................................................

14 SHELL-Befehl:

["cmd","/S","/C"] --windons

............................................................

15 STOPSIGNAL-Befehl:

STOPSIGNAL Signalname

Definiert das Signal für den Stoppbefehl!

SIGKILL --9 Signal

............................................................

16 ARG-Parameter:

Wird im Docker-Build-Prozess verwendet

Kann als Parameter durch --build-arg übergeben werden!
Spezifische Anwendungen:

ARG auther=tim
LABLE-Betreuer=${author}
docker build --build-arg auther=tom -t xxx ./

Wenn die Arg-Variable im Dockerfile während des Docker-Builds mit der Variable --build-arg festgelegt wird, ist der Variablenwert in der Befehlszeilenschnittstelle der endgültige Wert!
.................................................................

17 EINBAU

Wird verwendet, um einen Trigger in einer Docker-Datei zu definieren.
Dockerfile wird verwendet, um eine Image-Datei zu erstellen, die auch als Basis-Image von einem anderen verwendet werden kann
Als Parameter wird Dockerfile verwendet, das von from angegeben wird, und damit eine neue Impact-Datei erstellt.

Wenn die From-Spezifikation im folgenden Dockerfile während des Build-Prozesses ausgeführt wird, wird der von ONBUILD angegebene Trigger ausgelöst, der die Dockerfile-Datei seines Basis-Images erstellt.

Format:
ONBUILD Dockerfile Anweisungen zum Ausführen

Obwohl jeder Befehl als Triggerbefehl registriert werden kann, kann ONBUILD nicht in sich selbst verschachtelt werden und wird nicht von Maintainer-Befehlen ausgelöst.

Mit einem Dockerfile erstellte Images, das die Direktive „onbuild“ enthält, sollten ein spezielles Tag wie „ruby:2.0-onbuild“ verwenden.

Seien Sie äußerst vorsichtig, wenn Sie die Anweisungen „add“ oder „copy“ in einer Onbuild-Anweisung verwenden, da der Build-Prozesskontext fehlschlägt, wenn die angegebenen Quelldateien fehlen!

Es wird ausgeführt, wenn andere auf dieses Bild verweisen! Es wird nicht während des ersten Build-Prozesses ausgeführt

Das könnte Sie auch interessieren:
  • So verwenden Sie Dockerfile zum Erstellen von Images in Docker
  • So verwenden Sie Dockerfile zum Erstellen von Images
  • Detaillierte Erklärung der COPY- und ADD-Befehle in Dockerfile
  • Detaillierte Erklärung der CMD- und ENTRYPOINT-Befehle im Dockerfile
  • Eine detaillierte Einführung in die Dockerfile-Image-Erstellungsdatei und verwandte Befehle in Docker
  • Docker-Grundlagen: Detaillierte Erklärung der Dockerfile-Befehle
  • Befehlsanalyse zum Schreiben von Dockerfile-Dateien und Erstellen von Images

<<:  Kostenlose Installationskonfigurationsmethode für MySQL 5.7.18 WinX64

>>:  Zwei Implementierungscodes der programmgesteuerten Navigation mit Vue-Router

Artikel empfehlen

js, um den Effekt des Ziehens des Schiebereglers zu erzielen

In diesem Artikel finden Sie den spezifischen Cod...

JavaScript zum Erreichen eines einfachen Message Board-Falls

Verwenden Sie Javascript, um ein Message Board-Be...

So erhalten Sie den tatsächlichen Pfad des aktuellen Skripts in Linux

1. Holen Sie sich den tatsächlichen Pfad des aktu...

Installieren Sie MySQL 5.7.17 im Win10-System

Das Betriebssystem Win10 MySQL ist die 64-Bit-ZIP...

Mit CSS3 implementierte Text-Popup-Effekte

Ergebnisse erzielenImplementierungscode html <...

Vue implementiert den Anwesenheitskalender von DingTalk

In diesem Artikel wird der spezifische Code von V...

HTML-Tabellen-Tag-Tutorial (7): Hintergrundfarbattribut BGCOLOR

Die Hintergrundfarbe der Tabelle kann über das At...

Erkennung und Lösung von Vue.$set-Fehlerfallen

Ich habe zufällig festgestellt, dass Vue.$set im ...

So implementieren Sie den Vue-Timer

In diesem Artikelbeispiel wird der spezifische Co...

So fügen Sie einem Hintergrundbild in CSS3 eine Farbmaske hinzu

Vor einiger Zeit stieß ich während der Entwicklun...