Android

Wie man Docker-Images mit Dockerfile erstellt

Docker Tutorial #7 - Was ist eigentlich ein Docker Image?

Docker Tutorial #7 - Was ist eigentlich ein Docker Image?

Inhaltsverzeichnis:

Anonim

Ein Docker-Image ist die Blaupause der Docker-Container, die die Anwendung und alles enthalten, was Sie zum Ausführen der Anwendung benötigen. Ein Container ist eine Laufzeitinstanz eines Images.

In diesem Tutorial erklären wir, was Dockerfile ist, wie man ein Dockerfile erstellt und wie man mit Dockerfile ein Docker-Image erstellt.

Was ist Dockerfile?

Eine Docker-Datei ist eine Textdatei, die alle Befehle enthält, die ein Benutzer in der Befehlszeile ausführen kann, um ein Bild zu erstellen. Es enthält alle Anweisungen, die Docker zum Erstellen des Images benötigt.

Docker-Images bestehen aus einer Reihe von Dateisystemebenen, die Anweisungen in der Docker-Datei des Images darstellen, aus denen eine ausführbare Softwareanwendung besteht.

Die Docker-Datei hat die folgende Form:

# Comment INSTRUCTION arguments

INSTRUCTION wird nicht zwischen Groß- und Kleinschreibung unterschieden, es wird jedoch GROSSSCHRIFT für die Namen verwendet.

Unten finden Sie eine Liste mit einer kurzen Beschreibung einiger der am häufigsten verwendeten Dockerfile-Anweisungen:

  • ARG - Mit dieser Anweisung können Sie Variablen definieren, die zur Erstellungszeit übergeben werden können. Sie können auch einen Standardwert festlegen. FROM - Das Basisimage zum Erstellen eines neuen Images. Diese Anweisung muss die erste kommentarlose Anweisung in der Docker-Datei sein. Die einzige Ausnahme von dieser Regel ist, wenn Sie eine Variable im FROM Argument verwenden möchten. In diesem Fall können vor FROM eine oder mehrere ARG Anweisungen stehen. LABEL - Dient zum Hinzufügen von Metadaten zu einem Bild, z. B. Beschreibung, Version, Autor usw. Sie können mehr als ein LABEL , und jeder LABEL Befehl ist ein Schlüssel-Wert-Paar. RUN - Die in dieser Anweisung angegebenen Befehle werden während des Erstellungsprozesses ausgeführt. Mit jedem RUN Befehl wird eine neue Ebene über dem aktuellen Bild erstellt. HINZUFÜGEN - Dient zum Kopieren von Dateien und Verzeichnissen von der angegebenen Quelle in das angegebene Ziel im Docker-Image. Die Quelle können lokale Dateien oder Verzeichnisse oder eine URL sein. Wenn es sich bei der Quelle um ein lokales Tar-Archiv handelt, wird es automatisch in das Docker-Image entpackt. KOPIEREN - Ähnlich wie ADD aber die Quelle kann nur eine lokale Datei oder ein lokales Verzeichnis sein. ENV - Mit dieser Anweisung können Sie eine Umgebungsvariable definieren. CMD - Wird verwendet, um einen Befehl anzugeben, der ausgeführt wird, wenn Sie einen Container ausführen. Sie können nur eine CMD Anweisung in Ihrer Docker-Datei verwenden. ENTRYPOINT - Ähnlich wie bei CMD definiert diese Anweisung, welcher Befehl ausgeführt wird, wenn ein Container ausgeführt wird. WORKDIR - Diese Anweisung legt das aktuelle Arbeitsverzeichnis für die Anweisungen RUN , CMD , ENTRYPOINT , COPY und ADD . BENUTZER - Legen Sie den Benutzernamen oder die UID , die beim Ausführen der folgenden Anweisungen RUN , CMD , ENTRYPOINT , COPY und ADD werden sollen. VOLUME - Ermöglicht das Mounten eines Hostcomputerverzeichnisses in den Container. EXPOSE - Wird verwendet, um den Port anzugeben, auf dem der Container zur Laufzeit empfangsbereit ist.

Um Dateien und Verzeichnisse vom Hinzufügen zum Image auszuschließen, erstellen Sie eine .dockerignore Datei im Kontextverzeichnis. Die Syntax des .dockerignore ähnelt der der .gitignore Datei von Git.

Eine vollständige Referenz und eine ausführliche Erläuterung der Dockerfile-Anweisungen finden Sie auf der offiziellen Dockerfile-Referenzseite.

Erstellen Sie eine Docker-Datei

Das häufigste Szenario beim Erstellen von Docker-Images ist das Abrufen eines vorhandenen Images aus einer Registrierung (normalerweise aus Docker Hub) und das Festlegen der Änderungen, die Sie am Basis-Image vornehmen möchten. Das beim Erstellen von Docker-Images am häufigsten verwendete Basis-Image ist Alpine, da es klein und für die Ausführung im RAM optimiert ist.

Der Docker Hub ist ein Cloud-basierter Registrierungsdienst, mit dessen Hilfe unter anderem die Docker-Images in einem öffentlichen oder privaten Repository gespeichert werden.

In diesem Beispiel erstellen wir ein Docker-Image für den Redis-Server. Wir werden das neueste Ubuntu 18.04 als Basis-Image verwenden.

Erstellen Sie zunächst ein Verzeichnis, das die Docker-Datei und alle erforderlichen Dateien enthält:

mkdir ~/redis_docker

Navigieren Sie zu dem Verzeichnis und erstellen Sie die folgende Docker-Datei:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Lassen Sie uns die Bedeutung der einzelnen Zeilen in der Docker-Datei erklären:

  • In Zeile 1 wir das Basisimage. Die in Zeile 3 beginnende Anweisung RUN aktualisiert den apt-Index, installiert das Paket "redis-server" und bereinigt den apt-Cache. Die in den Anweisungen verwendeten Befehle stimmen mit den Befehlen überein, die Sie zur Installation von redis auf einem Ubuntu-Server verwenden würden. Die Anweisung EXPOSE definiert den Port, an dem der Redis-Server empfangsbereit ist. In der letzten Zeile verwenden wir die Anweisung CMD , um den Standardbefehl festzulegen Dies wird ausgeführt, wenn der Container ausgeführt wird.

Speichern Sie die Datei und schließen Sie den Editor.

Das Image erstellen

Der nächste Schritt besteht darin, das Image zu erstellen. Führen Sie dazu den folgenden Befehl in dem Verzeichnis aus, in dem sich die Docker-Datei befindet:

docker build -t linuxize/redis.

Die Option -t gibt den Bildnamen und optional einen Benutzernamen und ein Tag im Format "Benutzername / Bildname: Tag" an.

Die Ausgabe des Erstellungsprozesses sieht ungefähr so ​​aus:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Wenn der Erstellungsprozess abgeschlossen ist, wird das neue Image in der Image-Liste aufgeführt:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Einen Container laufen lassen

Nachdem das Image erstellt wurde, führen Sie einen Container aus, indem Sie Folgendes ausführen:

docker run -d -p 6379:6379 --name redis linuxize/redis

Die Optionen -d weisen Docker an, den Container im getrennten Modus auszuführen, die Option -p 6379:6379 veröffentlicht den Port 6379 auf dem Host-Computer, und die Option --name redis gibt den Containernamen an. Das letzte Argument linuxize/redis ist der Name des Images, mit dem der Container ausgeführt wird.

Verwenden Sie beim Starten des Containers den folgenden Befehl, um alle ausgeführten Container aufzulisten:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

So überprüfen Sie, ob alles redis-cli funktioniert:

redis-cli ping

Der Redis-Server sollte mit PONG antworten.

Fazit

In diesem Tutorial wurden nur die Grundlagen der Verwendung von Dockerfiles zum Erstellen von Bildern behandelt. Weitere Informationen zum Schreiben von Docker-Dateien und zu den empfohlenen Best Practices finden Sie unter Best Practices zum Schreiben von Docker-Dateien.

Docker