Docker-Grundlagen-Tutorial: Detaillierte Erklärung der Dockerfile-Syntax

Docker-Grundlagen-Tutorial: Detaillierte Erklärung der Dockerfile-Syntax

Vorwort

Dockerfile ist ein vom Docker-Programm interpretiertes Skript. Dockerfile besteht aus einer Reihe von Anweisungen, und jede Anweisung entspricht einem Befehl unter Linux. Das Docker-Programm übersetzt diese Dockerfile-Anweisungen in echte Linux-Befehle. Dockerfile hat ein eigenes Schreibformat und unterstützte Befehle. Das Docker-Programm löst die Abhängigkeiten zwischen diesen Befehlen auf, ähnlich wie Makefile. Das Docker-Programm liest die Docker-Datei und generiert gemäß den Anweisungen ein benutzerdefiniertes Image. Im Vergleich zu Blackboxes wie Images werden offensichtliche Skripte wie Dockerfile von Benutzern leichter akzeptiert, da sie klar zeigen, wie das Image generiert wird. Wenn wir mit Dockerfile unsere eigenen zusätzlichen Anforderungen anpassen müssen, müssen wir nur Anweisungen zum Dockerfile hinzufügen oder ändern und das Image neu generieren, wodurch wir uns das Eingeben von Befehlen ersparen.

Die im Dockerfile verwendeten Befehle sind

AUS

FROM gibt ein Basisimage an. Im Allgemeinen muss eine verwendbare Docker-Datei FROM als erste Anweisung haben. Bei dem Bild kann es sich um jeden sinnvoll vorhandenen Bildspiegel handeln.

FROM muss die erste nichtkommentierte Anweisung in einer Docker-Datei sein.

FROM kann in einer Docker-Datei mehrfach vorkommen, um die Erstellung gemischter Images zu erleichtern.

Wenn kein Tag angegeben ist, wird die neueste Version als zu verwendende Basis-Image-Version verwendet.

BEWAHRER

Hier finden Sie Informationen zur Angabe des Bildherstellers

LAUFEN

Der RUN-Befehl führt jeden gültigen Befehl im aktuellen Image aus und übermittelt das Ausführungsergebnis. Nachdem der Befehl ausgeführt und übermittelt wurde, wird die nächste Anweisung in der Docker-Datei automatisch ausgeführt.

Hierarchische RUN-Anweisungen und generierte Commits entsprechen dem Kernkonzept von Docker. Es ermöglicht jederzeit den benutzerdefinierten Aufbau von Image-Bildern, genau wie die Versionskontrolle.

Der RUN-Befehlscache wird nicht automatisch ungültig gemacht, wenn der nächste Befehl ausgeführt wird. Beispielsweise kann der Cache von RUN apt-get dist-upgrade -y für den nächsten Befehl verwendet werden. Mit dem Flag --no-cache kann die Deaktivierung des Caches erzwungen werden.

Umwelt

Mit der ENV-Anweisung können Umgebungsvariablen für den Docker-Container festgelegt werden.

Die von ENV festgelegten Umgebungsvariablen können mit dem Befehl „Docker Inspect“ angezeigt werden. Sie können auch docker run --env <key>=<value> verwenden, um Umgebungsvariablen zu ändern.

BENUTZER

USER wird verwendet, um die laufende Besitzeridentität zu wechseln. Docker verwendet standardmäßig root. Wenn dies jedoch nicht erforderlich ist, wird empfohlen, zu einem anderen Benutzer zu wechseln. Schließlich hat root zu viele Berechtigungen und seine Verwendung birgt Sicherheitsrisiken.

ARBEITSVERZEICHNIS

WORKDIR wird zum Wechseln des Arbeitsverzeichnisses verwendet. Das Standardarbeitsverzeichnis von Docker ist /. Nur RUN kann den Befehl cd ausführen, um Verzeichnisse zu wechseln, und er funktioniert nur beim aktuellen RUN, was bedeutet, dass jeder RUN unabhängig ausgeführt wird. Wenn Sie möchten, dass andere Anweisungen in einem bestimmten Verzeichnis ausgeführt werden, müssen Sie sich auf WORKDIR verlassen. Die durch die Aktion WORKDIR vorgenommenen Verzeichnisänderungen sind dauerhaft, sodass Sie WORKDIR nicht vor jedem Befehl verwenden müssen.

KOPIE

COPY kopiert Dateien vom Pfad <src> zum Pfad <dest> innerhalb des Containers.

<Quelle>

Es muss sich um eine Datei oder ein Verzeichnis im Quellordner oder um eine Remote-URL handeln.

ist ein absoluter Pfad im Zielcontainer.

Alle neuen Dateien und Ordner werden mit UID und GID erstellt. Wenn <src> tatsächlich eine Remote-Datei-URL ist, beträgt die Berechtigung der Zieldatei 600.

HINZUFÜGEN

ADD kopiert Dateien vom Pfad <src> zum Pfad <dest> innerhalb des Containers.

<src> muss eine Datei oder ein Verzeichnis im Quellordner oder eine Remote-URL sein. <dest> ist ein absoluter Pfad im Zielcontainer.

Für alle neuen Dateien und Ordner werden UIDs und GIDs erstellt. Wenn <src> tatsächlich eine Remote-Datei-URL ist, beträgt die Berechtigung der Zieldatei 600.

VOLUMEN

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.

EXPONIEREN

Die EXPOSE-Anweisung gibt an, dass der angegebene Port weitergeleitet werden soll, wenn Docker dies zulässt.

CMD

In einer Docker-Datei kann nur eine CMD-Anweisung enthalten sein. Wenn Sie mehrere CMD-Befehle angeben, wird der letzte wirksam.

Die Hauptfunktion des CMD-Befehls besteht darin, einen Standardausführungscontainer bereitzustellen. Diese Standardeinstellungen können die ausführbare Datei einschließen oder weglassen.

Wenn Sie das Shell- oder Exec-Format verwenden, CMD

Dieser Befehl wird automatisch ausgeführt.

EINBAUEN

Die Funktion von ONBUILD besteht darin, die Ausführung der Anweisung zu verzögern, bis beim Erstellen des Images die nächste Docker-Datei ausgeführt wird, die FROM verwendet. Die Verzögerung ist auf einmal begrenzt.

Das Anwendungsszenario von ONBUILD besteht darin, den neuesten Quellcode (mit RUN) abzurufen und beim Erstellen eines Images das Systemframework einzuschränken.

ARG

ARG ist ein neuer Befehl, der in Docker Version 1.9 hinzugefügt wurde.

Die von ARG definierten Variablen sind nur gültig, wenn das Image erstellt wird. Nach Abschluss der Erstellung werden die Variablen ungültig und verschwinden.

ETIKETT

Definieren Sie einen Bild-Tag „Eigentümer“ und weisen Sie ihm einen Wert zu, der dem Wert der Variablen „Name“ entspricht. (LABEL Besitzer=$Name )

EINSTIEGSPUNKT

Es gibt den Befehl oder die Datei an, die ausgeführt werden soll, wenn das Docker-Image als Instanz (also als Docker-Container) ausgeführt wird.

Beachten:

Mit CMD und ENTRYPOINT können Sie das zu startende Programm angeben. Beide Befehle haben zwei unterschiedliche Syntaxen:

CMD ls -l

oder

CMD ["ls",''-l"]

Bei der ersten Syntax fügt Docker dem Befehl automatisch „/bin/sh –c“ hinzu, was zu unerwartetem Verhalten führen kann. Um dieses Verhalten zu vermeiden, empfehlen wir, dass alle CMD und ENTRYPOINT die zweite Syntax verwenden.

Wenn Sie beides verwenden, stellen Sie sicher, dass Sie die Bedeutung verstehen. Im Allgemeinen müssen Sie beides nur dann verwenden, wenn ENTRYPOINT die auszuführende Binärdatei angibt und CMD die Standardparameter für die Ausführung bereitstellt.

  • Kombinieren Sie Befehle so oft wie möglich

Jeder Befehl in einer Docker-Datei erstellt eine neue Ebene und die maximale Anzahl von Ebenen, die ein Container haben kann, ist begrenzt. Daher kann das Zusammenführen logisch zusammenhängender Befehle so weit wie möglich die Anzahl der Ebenen reduzieren. Methoden zum Zusammenführen von Befehlen können das Zusammenführen mehrerer Befehle umfassen, die zusammengeführt werden können (EXPOSE, ENV, VOLUME, COPY).

Jeder Befehl in einer Docker-Datei erstellt eine neue Ebene und die maximale Anzahl von Ebenen, die ein Container haben kann, ist begrenzt. Daher kann durch das möglichst vollständige Zusammenführen logisch zusammenhängender Befehle die Anzahl der Ebenen verringert werden, was auch die Kompilierung beschleunigen kann.

Kombinieren Sie mehrere kombinierbare Befehle (RUN, EXPOSE, ENV, VOLUME, COPY), zum Beispiel:

EXOISE 80
EXOISE 8080
CMD cd /tmp
CMD ls

==>

EXOISE 80 8080
CMD cd /tmp und ls

Der ADD-Befehl und der COPY-Befehl haben weitgehend die gleiche Funktionalität. Da die COPY-Semantik jedoch direkter ist, empfehlen wir, wann immer möglich, den COPY-Befehl zu verwenden. Die einzige Ausnahme besteht darin, dass der Befehl ADD über eine eigene Dekomprimierungsfunktion verfügt. Wenn Sie eine Datei in das Image kopieren und dekomprimieren müssen, können Sie den Befehl ADD verwenden. Andernfalls empfehlen wir die Verwendung des COPY-Befehls.

HINZUFÜGEN 1.1.1.100:1234/jdk-8u74-linux-x64.tar.gz /usr/local/
  • Verwendung von USER

Standardmäßig werden alle Docker-Anwendungen unter dem Root-Benutzer des Containers ausgeführt, dies birgt jedoch einige potenzielle Sicherheitsrisiken. Container, die in der Produktionsumgebung ausgeführt werden, werden am besten unter nicht privilegierten Benutzern mit dem Befehl USER ausgeführt.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der spezifischen Verwendung der ENV-Anweisung in Dockerfile
  • Dockerfile echo gibt die Methode zum Implementieren mehrerer Textzeilen in der angegebenen Datei an
  • Erläuterung der Dockerfile-Anweisungen und der grundlegenden Struktur
  • Implementierung eines Crawler-Scrapy-Image, das von Dockerfile basierend auf Alpine erstellt wurde
  • So erstellen Sie Ihr eigenes Image mit Dockerfile
  • So verwenden Sie Dockerfile zum Erstellen von Images in Docker
  • So erstellen Sie mit Dockerfile ein Spiegelbild der Java-Laufzeitumgebung
  • Zusammenfassung gängiger Befehle in Dockerfile
  • Beispielanalyse der Verwendung von Dockerfile-Textdateien

<<:  So drucken Sie hervorgehobenen Code in der Node.JS-Konsole

>>:  Methoden und Probleme bei der Installation von MariaDB in CentOS unter MySQL

Artikel empfehlen

So verwenden Sie die Concat-Funktion in MySQL

Wie unten dargestellt: //Fragen Sie das Jahr und ...

Lösung für leere Seite nach Vue-Verpackung

1. Lösung für das Problem, dass die Seite leer is...

js realisiert das dynamische Laden von Daten durch Wasserfallfluss

In diesem Artikel erfahren Sie den spezifischen C...

So optimieren Sie Bilder, um die Website-Leistung zu verbessern

Inhaltsverzeichnis Überblick Was ist Bildkomprimi...

Detaillierte Erklärung der Stile in uni-app

Inhaltsverzeichnis Stile in uni-app Zusammenfasse...

Detaillierte Erklärung zum Schreiben mehrerer Bedingungen von CSS: nicht

Der Pseudoklassenselektor :not kann Elemente filt...

Detailliertes Tutorial zum Bereitstellen von Jenkins basierend auf Docker

0. Als ich dieses Dokument erstellte, war es unge...

CSS-Code-Abkürzung div+css-Layout-Code-Abkürzungsspezifikation

Durch die Verwendung von Abkürzungen können Sie di...