Eine Docker-Datei ist eine Textdatei mit Anweisungen, die verwendet werden, um die Installation und Konfiguration eines Docker-Images zu automatisieren. Dockerfiles erleichtern die Bereitstellung mehrerer Docker-Container, ohne dasselbe Image auf mehreren virtuellen Maschinen verwalten zu müssen. Anweisungen werden in der Reihenfolge ausgeführt, in der sie im Dockerfile erscheinen, was ihre Verwendung und Aktualisierung klar und intuitiv macht. Dieser Artikel behandelt die Grundlagen, mit einem Beispiel, wie ein Dockerfile funktioniert.
Bevor Sie beginnen
-
Machen Sie sich mit unserem Leitfaden „Erste Schritte“ vertraut, erstellen und aktualisieren Sie ein Linode und installieren Sie Docker. Alternativ können Sie schnell ein aktualisiertes, Docker-fähiges Linode mit der Docker Marketplace App bereitstellen.
-
Stellen Sie sicher, dass Ihr Linode sicher ist, indem Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz folgen.
-
In diesem Handbuch wird davon ausgegangen, dass Sie mit der Verwendung der Docker-Befehlszeilenschnittstelle (CLI) vertraut sind. Um mehr über die Docker-CLI zu erfahren, sehen Sie sich ihre Dokumentation an.
Wie funktioniert ein Dockerfile?
Ein Dockerfile ist ein Skript, das verschiedene Befehle und Aktionen ausführt, um ein Docker-Image zu erstellen, das dann zum Bereitstellen eines Docker-Containers verwendet werden kann. Die Befehle und Informationen in der Dockerfile können so konfiguriert werden, dass bestimmte Softwareversionen und Abhängigkeiten für stabile Bereitstellungen verwendet werden. Sie können auch eine Docker-Registrierung verwenden, um Ihre öffentlichen (oder privaten) Docker-Images zu speichern und darauf zuzugreifen.
Sobald ein Dockerfile geschrieben ist, können Sie den docker build
verwenden Befehl zum Generieren eines Docker-Images basierend auf den Anweisungen der Dockerfile. Anschließend können Sie einen Container basierend auf dem Image mit Befehlen wie docker run
bereitstellen oder docker create
.
Hier sind allgemeine Anweisungen, die Sie in Ihren Dockerfiles verwenden können, um Images zu erstellen:
Grundlegende Definitionen
- VON :Definieren Sie das Basis-Image, z. B.
ubuntu
oderdebian
, wird verwendet, um den Erstellungsprozess zu starten. Erforderlich für jedes Dockerfile. - WARTER :Definieren Sie den vollständigen Namen und die E-Mail-Adresse des Bilderstellers.
Variablen
- ENV :Legen Sie Umgebungsvariablen fest, die bestehen bleiben, wenn der Container bereitgestellt wird.
- ARG :Legen Sie eine passable Build-Time-Variable fest. Kann alternativ zu
ENV
verwendet werden um eine Variable zu erstellen, die nicht bestehen bleibt, wenn der Container aus dem Image bereitgestellt wird.
Befehlsausführung
- LAUFEN :Führt Befehle, wie z. B. Befehle zur Paketinstallation, auf einer neuen Bildebene aus.
- CMD :Führen Sie einen bestimmten Befehl innerhalb des Containers aus, der mit dem Image bereitgestellt wird, oder legen Sie Standardparameter für einen
ENTRYPOINT
fest Anweisung. Pro Dockerfile wird nur eine verwendet. - Einstiegspunkt :Legen Sie eine Standardanwendung fest, die jedes Mal verwendet wird, wenn ein Container mit dem Image bereitgestellt wird. Pro Dockerfile wird nur eine verwendet.
- BENUTZER :Legen Sie die UID (den Benutzernamen) fest, um Befehle im Container auszuführen.
- ARBEITSVERZ :Legen Sie den Containerpfad fest, in dem nachfolgende Dockerfile-Befehle ausgeführt werden.
HinweisRUN
,CMD
, undENTRYPOINT
können jeweils in shell ausgeführt werden Form, die normale Argumente akzeptiert, oder exec Form, die Argumente als JSON-Array akzeptiert. Weil exec form ruft keine Befehlsshell auf, es wird im Allgemeinen bevorzugt und in diesem Handbuch verwendet.
Datenverwaltung
- HINZUFÜGEN :Kopieren Sie Dateien von einer Quelle in das Dateisystem des Bildes am festgelegten Ziel mit automatischer Tarball- und Remote-URL-Behandlung.
- KOPIEREN :Ähnlich wie
ADD
aber ohne automatische Tarball- und Remote-URL-Behandlung. - LAUTSTÄRKE :Ermöglicht den Zugriff von einem angegebenen Einhängepunkt im Container auf ein Verzeichnis auf dem Hostcomputer.
Vernetzung
- AUSSETZEN :Stellen Sie einen bestimmten Port bereit, um die Vernetzung zwischen dem Container und der Außenwelt zu ermöglichen.
Als Nächstes erstellen wir ein Dockerfile-Beispiel, das einige dieser Befehle verwendet.
Erstellen eines Dockerfiles
So erstellen Sie das Dockerfile:
-
An der Eingabeaufforderung (entweder über SSH oder Lish im Linode Manager) erstellen und wechseln Sie in ein neues Verzeichnis:
mkdir ~/mydockerbuild && cd ~/mydockerbuild
Hinweis Dadurch wird das Docker-Build-Verzeichnis in Ihrem Home-Verzeichnis platziert. Als bewährte Methode sollten Sie die Dockerfile nicht in Ihrem Home-Verzeichnis selbst oder im Root-Verzeichnis des Servers speichern. Erstellen Sie stattdessen ein separates Verzeichnis und platzieren Sie alle erforderlichen Dateien darin (neben der Docker-Datei), wie in dieser Anleitung gezeigt.
-
Erstellen Sie ein Dockerfile-Beispiel:
touch example_dockerfile
-
Öffnen Sie das Dockerfile mit dem Texteditor Ihrer Wahl (für dieses Beispiel verwenden wir nano):
nano example_dockerfile
-
Kopieren Sie das folgende Beispiel in Ihre Dockerfile. Dadurch wird ein Dockerfile erstellt, das ein Debian-Image generiert, die Betreuerinformationen festlegt und einfach „Hello, Sunshine!“ zurückgibt. wenn ausgeführt:
- Datei:example_dockerfile
1 2 3
FROM debian MAINTAINER Jane Doe [email protected] CMD ["echo", "Hello, Sunshine!"]
-
Speichern Sie die Dockerdatei.
-
Geben Sie
cat example_dockerfile
ein und stellen Sie sicher, dass der obige Text enthalten ist.
Erstellen eines Docker-Images aus einer Docker-Datei
Erstellen Sie das Image aus dem Dockerfile mit dem docker build
Befehl:
docker build ~/mydockerbuild -f example_dockerfile -t example_image
Beschriften Sie Ihr Bild mit example_image
erleichtert das Bereitstellen eines Containers im nächsten Schritt.
Die Ausgabe sollte in etwa so aussehen:
Sending build context to Docker daemon 4.096kB
Step 1/3 : FROM debian
---> 4a7a1f401734
Step 2/3 : MAINTAINER Jane Doe [email protected]
---> Running in fdd81bd8b5c6
Removing intermediate container fdd81bd8b5c6
---> 1253842068a3
Step 3/3 : CMD ["echo", "Hello, Sunshine!"]
---> Running in d33e1bacf1af
Removing intermediate container d33e1bacf1af
---> a5d95e138b97
Successfully built a5d95e138b97
Successfully tagged example_image:latest
Wie Sie sehen können, sind die Anweisungen aus example_dockerfile
werden der Reihe nach ausgeführt. Das Bild mit der Bezeichnung example_image
ist jetzt betriebsbereit, um einen Container bereitzustellen.
Ausführen Ihres Docker-Images zum Bereitstellen eines Containers
Das Ausführen des soeben erstellten Images zum Bereitstellen eines Docker-Containers ist jetzt so einfach wie die Eingabe des Folgenden:
docker run example_image
Ein neuer Container basierend auf example_image
bereitgestellt wird, und der im CMD
angegebene Befehl Die Anweisung wird dann aus dem Container mit der folgenden Ausgabe ausgeführt:
Hello, Sunshine!
Hinweis Wenn der docker run
Befehl ausgeführt wird und das Docker-Image nicht in Ihrem aktuellen Arbeitsverzeichnis verfügbar ist, wird es stattdessen aus der Docker-Registrierung gezogen.
Weiterführende Literatur
Herzliche Glückwünsche! Sie haben Ihr erstes Dockerfile erstellt und Ihr erstes Docker-Image ausgeführt.
Weitere Beispiele und Informationen zur Verwendung von Dockerfiles mit Docker-Images und -Containern finden Sie unter:
-
unser Leitfaden zur ausführlichen Verwendung von Docker-Images, Containern und Dockerfiles;
-
Best Practices für Docker-Dockerfiles.
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Best Practices zum Schreiben von Dockerfiles
- Offizielle Docker-Images auf Docker Hub
- Docker-Dokumentation