Die Dockerfile verstehen

Die Dockerfile verstehen
Sie werden mir zustimmen, dass der Impact Docker auf die Welt der Technologie massiv ist. Es speichert Softwareentwickler und Systemadministratoren gleichermaßen viele Kopfschmerzen.

In diesem Artikel werden Sie einen sehr entscheidenden Teil des gesamten Docker -Setups, der Dockerfile, kennenlernen. Die Dockerfile verwendet eine einfache Struktur. Diese Einfachheit ist zwar eine gute Sache, aber es gibt Raum für Einzelpersonen, nur gemeinsam Befehle zu hacken, ohne die Auswirkungen vollständig zu verstehen.

Am Ende dieses Artikels werden Sie die Dockerfile besser verstehen. Sie können also Dockerfiles schreiben, die Sie verstehen.

In der Dockerfile

Die Dockerfile ist im Grunde eine Textdatei. Im Gegensatz zu regulären Textdateien werden Sie jedoch feststellen, dass es keine hat .txt Dateierweiterung. Die Dockerfile ist eine Datei, die Sie speichern werden Dockerfile, ohne Dateierweiterungen.

In dieser Dockerfile existiert alle Befehle, mit denen ein Docker -Bild zusammengestellt wurde. Während Sie diese Befehle beim Erstellen eines Bildes in die Docker -CLI übergeben können, sind Sie sich einig, dass es bessere Übung ist, eine Datei dafür zu haben, damit die Dinge besser organisiert werden können.

Die Befehle in der Dockerfile sind für den Aufbau eines Docker -Images von entscheidender Bedeutung.

Hier ist der Grund:

Jede Befehlszeile im Dockerfile erstellt die Ebenen, aus denen das Docker -Bild besteht. Vorausgesetzt, die Dockerfile bleibt gleich, jedes Mal, wenn Sie ein Bild aus dem Bild erstellen, ist es sicher, dass Sie die gleichen Ergebnisse erzielen würden. Wenn Sie jedoch eine neue Befehlszeile hinzufügen, erstellt Docker diese Ebene einfach und fügt sie den vorhandenen Ebenen hinzu.

Genau wie der Compiler oder Interpreter für Programmiersprachen liest Docker die Dockerfile von oben nach unten. Daher ist die Platzierung der Befehle sehr wichtig.

Im Gegensatz zu den meisten Programmiersprachen sind die Befehle in der Dockerfile nicht sensibel. Sie werden jedoch aus Sample Dockerfiles sehen, dass die Befehle in Großbuchstaben geschrieben sind. Dies ist nichts anderes als eine Konvention, der Sie auch folgen sollten.

Wie Programmiersprachen können Sie Kommentare in Ihre Dockerfiles schreiben. Kommentare in Dockerfiles werden mit dem Hash- oder Pfundsymbol bezeichnet # zu Beginn der Linie. Sie sollten beachten, dass es nur Einzeilen-Kommentare unterstützt. Um Multi-Line-Kommentare zu schreiben, verwenden Sie das Hash-Symbol für jede Zeile.

Vorsichtig, nicht alle Hash -Symbole, die Sie in einer Dockerfile sehen, sind Kommentare. Hash -Symbole könnten ebenfalls anzeigen Parser -Richtlinien. Parser -Richtlinien sind Befehle in der Dockerfile, die darauf hinweisen, wie die Dockerfile gelesen werden soll.

Zum Zeitpunkt des Schreibens dieses Artikels sind nur zwei Parser -Richtlinien für Docker verfügbar. Sie sind die fliehen Und Syntax Parser -Richtlinien. Der Syntax Die Richtlinie ist nur bei Docker verfügbar, wenn sie auf einem Buildkit -Backend ausgeführt wird.

Der fliehen Richtlinie funktioniert überall. Der fliehen Mit der Richtlinie können Sie entscheiden, welches Symbol Docker als Escape -Zeichen verwendet.

Sie können in Ihrer Dockerfile eine Linie haben, die der folgenden ähnelt:

Kopierenindex.HTML C: \\ Dokumente

Sie sollten sich nicht darum kümmern, was der Befehl tut, und konzentrieren Sie sich auf den Dateispeicherort. Die Verwendung des obigen Befehls in einem Windows -basierten Docker -Bild ist gültig. Aber Sie werden sich daran erinnern, dass Docker Linux basiert, damit es den Backslash verwendet \ Als Fluchtcharakter aufgrund von Linux -Konventionen. Wenn Docker die Dockerfile durchliest.

Um dieses Verhalten zu ändern, werden Sie die verwenden fliehen Parser -Richtlinie wie unten gesehen:

# Escape = '

Diese Richtlinie veranlasst Docker, den Backtick als Fluchtcharakter anstelle des Backslashs zu verwenden. Um die Parser-Richtlinie zu verwenden, müssen Sie sie ganz oben in der Dockerfile stellen. Andernfalls wird es nur als Kommentar gelten-Sie müssen es auch über Kommentare platzieren, wenn Sie die Kommentare oben in der Datei haben.

Dockerfile -Anweisungen

Docker stützt sich auf jede Befehlszeile in der Dockerfile und führt sie aus, wodurch eine Ebene für jede Zeile im Prozess erstellt wird.

Sie benötigen ein Verständnis der Befehle, um DockerFiles zu schreiben. Ein Punkt der Vorsicht: Viele der Dockerfile -Befehle machen ähnliche Dinge. Sie müssen sich keine Sorgen machen, Sie werden diese Befehle auch verstehen.

Hier ist eine Liste der Befehle, über die Sie erfahren werden:

  • AUS
  • ETIKETT
  • Env
  • EXPONIEREN
  • LAUFEN
  • KOPIEREN
  • Workdir
  • CMD

AUS

Denken Sie daran, dass das Hauptziel von Docker darin besteht. Was auch immer Image Docker aus Ihrer Dockerfile baut.

Mit dem Befehl aus dem Befehl wird angegeben, welches Betriebssystem Sie als Basisbild verwenden möchten. Wenn Sie beabsichtigen, auf einem Basisbild zu bauen, den From -Befehl muss Seien Sie der erste Befehl in den DockerFile-Asides-Parser-Richtlinien und -kommentaren.

ETIKETT

Die Dockerfile benötigt Metadaten, und der Befehl Etikett ist das, was Sie zum Erstellen verwenden würden. Nachdem Sie ein Bild erstellt und einen Container ausgeführt haben, können Sie das verwenden Docker inspizieren Befehl zum Suchen Sie Informationen zum Container.

Env

Umgebungsvariablen. Vertraute Worte? Der Befehl env wird verwendet, um Umgebungsvariablen festzulegen, während das Docker -Bild erstellt wird. Sie werden auch feststellen, dass diese Set -Umgebungsvariablen nach dem Start des Containers auch zugänglich sind.

Dockerfile hat einen ähnlichen Befehl wie Env, bekannt als Arg. Jede Umgebungsvariable wird jedoch nur beim Erstellen des Bildes verfügbar, aber nicht nach dem Start des Containers.

EXPONIEREN

Genauso wie Ihr Docker-Host-your-Maschine der Docker-Host in diesem Fall-Ports für Kommunikation wie 8080, 5000 usw. ist. ist genauso wie Docker -Container Ports haben.

Sie verwenden den Befehl expose, um auszuwählen, welche Ports verfügbar sein sollen, um mit einem Container zu kommunizieren.

Beim Ausführen von Docker -Containern können Sie in die bestehen -P Argument, das als Publish bekannt ist und dem Expose -Befehl ähnelt.

Hier ist der subtile Unterschied: Sie verwenden den Befehl expose, um Ports für andere Docker -Container zu öffnen, während die -P Argument wird verwendet, um Ports für die externe Umgebung zu öffnen i.e. außerhalb des Docker -Containers.

Wenn Sie nicht expose verwenden oder -P Dann ist der Docker -Container dann nicht über alle Ports von außerhalb des Containers oder anderen Docker -Containern zugänglich.

LAUFEN

Beim Erstellen eines Docker -Images müssen Sie möglicherweise Befehle aus Gründen wie Installation von Anwendungen und Paketen ausführen, um Teil des Bildes zu sein.

Mit dem Befehl Run können Sie all das tun. Aber denken Sie daran: Befehle werden nur ausgeführt, wenn Sie das Docker -Bild erstellen.

KOPIEREN

Es gibt verschiedene Gründe, Dateien von Ihrem Docker -Host in Ihr Docker -Bild zu kopieren. Einige Dateien, die Sie möglicherweise kopieren möchten.

Um Dateien von Ihrem Docker -Host in ein Docker -Bild zu kopieren, können Sie den Befehl kopieren.

Es gibt den Befehl add, der dem Kopie ähnelt und etwas anders ist. Während das Kopieren nur Dateien von Ihrem Docker -Host in das Docker -Bild kopieren kann, kann hinzufügen Dateien aus einer URL kopieren und komprimierte Dateien in das Docker -Bild extrahieren.

Warum Kopie anstelle von Add verwenden? Nun, das Kopieren von Dateien aus einer URL ist eine Aufgabe, die Sie mit Curl über den Befehl run ausführen können. Sie können auch Dateien im Docker -Bild mit dem Befehl run extrahieren.

Es ist jedoch nichts Falsches daran zu verwenden, um komprimierte Dateien direkt in das Docker -Bild zu extrahieren.

Workdir

Erinnern Sie sich an den Befehl run? Sie können den Befehl zum Ausführen verwenden, um Befehle in Ihrem Docker -Bild auszuführen. Manchmal haben Sie jedoch einen Grund, einen Befehl in bestimmten Verzeichnissen auszuführen. Um eine Datei zu entpacken, müssen Sie sich im Verzeichnis der ZIP -Datei befinden oder darauf hinweisen.

Dort ist Workdir nützlich. Mit WorkDir können Sie das Verzeichnis ändern, während Docker das Bild erstellt, und das neue Verzeichnis bleibt das aktuelle Verzeichnis für den Rest der Build -Anweisungen.

CMD

Ihr Docker -Container ist normalerweise so eingerichtet, dass Sie einen Prozess ausführen. Aber woher weiß es, welchen Prozess zu laufen ist?? Es ist durch den CMD -Befehl. Der Befehl cmd wird verwendet, um Befehle auszuführen, wenn Docker den Docker -Container aus dem Bild startet.

Während Sie den Befehl angeben können, der ausgeführt wird, wenn Sie aus der Befehlszeile gestartet werden, bleiben die in der CMD-Anweisung angegebenen Befehle der Standard.

Docker kann nur einen CMD -Befehl ausführen. Wenn Sie also zwei oder mehr CMD -Anweisungen einfügen, würde Docker nur den letzten i ausführen.e. der neueste.

Der Einstiegspunkt ähnelt dem CMD. Sie können jedoch beim Starten Befehle ausführen, und es würde die Anweisungen, die Sie am Einstiegspunkt definiert haben, nicht überschreiben.

Beispiel

In diesem Beispiel sehen Sie eine Implementierung fast aller oben diskutierten Befehle. Sie werden sehen, wie eine Flask -Anwendung in einem Docker -Container ausgeführt wird. Wenn Sie nicht wissen, was Flask ist, ist Flask ein Web -Framework, das in Python zum Erstellen von Webanwendungen geschrieben wurde.

Es ist ganz einfach, sodass Sie keine Kenntnis der Sprache haben müssen, um das Beispiel auszuführen.

Zunächst müssen Sie Git auf Ihrem Computer installieren. Nach dem Installieren von Git klonen Sie den Quellcode hier aus dem Github -Repository.

Erstellen Sie zunächst ein neues Verzeichnis. Sie haben den Quellcode und die Dockerfile in diesem Verzeichnis. Sie können ein Verzeichnis erstellen-Sie können es anrufen Docker-Stichprobe-und die Dockerfile mit den folgenden Befehlen:

Mkdir Docker-Probe && CD Docker-Stichprobe
Berühren Sie Dockerfile

Denken Sie daran, dass die Dockerfile nur eine einfache Textdatei ist? Sie erinnern sich auch, dass es das nicht geben sollte .txt Verlängerung? Wenn Sie sie verpasst haben.

Als nächstes laden Sie den Quellcode von Github mit dem herunter Git -Klon Befehl wie unten gesehen:

Git -Klon https: // github.com/craigkerstiens/Flask-helloworld.Git

Sie können den Inhalt des Flask-helloworld Verzeichnis:

LS Flask-helloworld

Sie werden die folgenden Dateien sehen:

  • Markdown.RST: Es enthält die Details des Projekts, aber für dieses Beispiel nicht wichtig. Sie sollten sich darüber keine Sorgen machen.
  • Procfile: Es enthält Befehle zum Ausführen der Projekte auf einem Server. Sie sollten sich auch darüber keine Sorgen machen.
  • App.py: Es enthält den Code, den Sie im Docker -Container ausgeführt haben.
  • Anforderungen.txt: Es enthält die Abhängigkeiten die App.py Die Datei muss erfolgreich ausgeführt werden.

Schreiben der Dockerfile

Diese Dockerfile hat alle oben diskutierten Docker -Anweisungen. Es enthält auch Kommentare, um zu verstehen, was jede Zeile tut.

# Aus der Anweisung wählt das übergeordnete Bild für Docker aus.
# Dieses Beispiel verwendet Alpine.
# Alpine ist ein minimales Docker -Bild, das sehr klein ist
Von Alpine: 3.3
# Die Beschriftungsanweisung erstellt Beschriftungen.
# Das erste Etikett ist Wartung mit dem Wert Linux -Hinweis.
# Das zweite Etikett ist Appname mit der Wertkolben Hallo Hallo. Welt
# Sie können so viele Schlüssel-Wert-Paare haben, wie Sie möchten.
# Sie können auch einen beliebigen Namen für die Schlüssel auswählen.
# Die Auswahl des Betreuers und des Appnamens in diesem Beispiel
# ist eine persönliche Wahl.
Label "Warteur" = "Linux Hint" "AppName" = "Flask Hello World"
# ENV -Anweisung weist Umgebungsvariablen zu.
# Das Verzeichnis /usr /src verzeichnet heruntergeladene Programme,
# sei es Quelle oder binär, bevor sie installiert werden.
Env Application /USR /SRC
# Anweisungen kopieren Kopien Dateien oder Verzeichnisse,
# vom Docker -Host zum Docker -Bild.
# Sie kopieren den Quellcode in das Docker -Bild.
# Der folgende Befehl verwendet die Variable der Set -Umgebungsvariable.
Kopieren Sie Flask-helloworld $ Application/Flask-helloworld
# Nochmals die Env -Anweisung verwenden.
Env Flaskapp $ Application/Flask-helloworld
# WorkDir -Anweisung ändert das aktuelle Verzeichnis im Docker -Bild.
# Der folgende Befehl ändert das Verzeichnis in/usr/src/flask-helloworld.
# Das Zielverzeichnis verwendet die Umgebungsvariable.
Workdir $ flaskapp/
# Anweisungen ausführen aus. Befehle ausführen,
# Genau wie Sie am Terminal tun,
# Aber im Docker -Bild.
# Der folgende Befehl installiert Python, PIP und die App -Abhängigkeiten.
# Die Abhängigkeiten liegen in den Anforderungen.TXT -Datei.
Führen Sie apk add-update python py-pip
PIP -Installation ausführen -upgrade pip
PIP -Installationsanforderungen ausführen.TXT # Expose Anweisung öffnet den Port für die Kommunikation mit dem Docker -Container.
# Die Flask -App verwendet den Port 5000, sodass Sie Port 5000 freilegen werden.
Entdecken Sie 5000 # CMD -Befehle aus, die Befehle wie Run ausführen,
# Aber die Befehle werden ausgeführt, wenn der Docker -Container startet.
# Es kann nur eine CMD -Anweisung verwendet werden.
CMD ["Python", "App.py "]

Erstellen des Docker -Bildes

Nach dem Schreiben der Dockerfile können Sie das Docker -Bild mit dem folgenden Befehl erstellen:

sudo docker Build -t sample_image .

Hier, Sample_image ist der Name des Docker -Bildes. Sie können ihm einen anderen Namen geben. Der Punkt (.) Am Ende des Befehls zeigt an, dass die Dateien, mit denen Sie arbeiten, im aktuellen Verzeichnis befinden.

Ausführen des Docker -Containers

Um den Docker -Container auszuführen, können Sie die verwenden Docker Run Befehl unten:

sudo docker run -ip 5000: 5000 Sample_image: neuestes

Der -I -Parameter stellt sicher. Stellen Sie sich das als: Docker-Host: Docker-Container vor.

Nach dem Start des Docker -Containers können Sie Localhost: 5000 in Ihrem Browser besuchen, um die Ergebnisse der Kolbenanwendung anzuzeigen.

Abschluss

Die Dockerfile ist die Blaupause für ein Docker -Bild. Wenn Sie verstehen, wie Dockerfiles funktionieren, und in der Lage zu sein, sie bequem zu schreiben.

Wenn Sie durch diesen Artikel darauf hinarbeiten, haben Sie gesehen, wie Dockerfiles funktionieren. Hoffentlich verstehen Sie auch, was die wichtigsten Docker -Anweisungen bedeuten und können sie beim Erstellen Ihrer eigenen Docker -Bilder verwenden können.

Jede Frage, die Sie zu Dockerfiles haben, wäre willkommen. Danke fürs Lesen.