Docker Tutorial #7 - Was ist eigentlich ein Docker Image?
Inhaltsverzeichnis:
- Was ist Dockerfile?
- Erstellen Sie eine Docker-Datei
- Das Image erstellen
- Einen Container laufen lassen
- Fazit
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 vorFROM
eine oder mehrereARG
Anweisungen stehen. LABEL - Dient zum Hinzufügen von Metadaten zu einem Bild, z. B. Beschreibung, Version, Autor usw. Sie können mehr als einLABEL
, und jederLABEL
Befehl ist ein Schlüssel-Wert-Paar. RUN - Die in dieser Anweisung angegebenen Befehle werden während des Erstellungsprozesses ausgeführt. Mit jedemRUN
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 wieADD
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 eineCMD
Anweisung in Ihrer Docker-Datei verwenden. ENTRYPOINT - Ähnlich wie beiCMD
definiert diese Anweisung, welcher Befehl ausgeführt wird, wenn ein Container ausgeführt wird. WORKDIR - Diese Anweisung legt das aktuelle Arbeitsverzeichnis für die AnweisungenRUN
,CMD
,ENTRYPOINT
,COPY
undADD
. BENUTZER - Legen Sie den Benutzernamen oder dieUID
, die beim Ausführen der folgenden AnweisungenRUN
,CMD
,ENTRYPOINT
,COPY
undADD
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.
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 Zeile3
beginnende AnweisungRUN
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 AnweisungEXPOSE
definiert den Port, an dem der Redis-Server empfangsbereit ist. In der letzten Zeile verwenden wir die AnweisungCMD
, 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.
Wie man einfache Trainingsroutinen mit zunehmender Fitness erstellt
Möchten Sie einfache Trainingsroutinen erstellen, die Sie zu Hause ausprobieren können? Prüfen Sie diesen Service mit dem Namen GAIN Fitness, der Ihnen dabei hilft.
Wie man mit imgburn Audio-CDs aus flac-Dateien erstellt
So erstellen Sie Audio-CDs aus FLAC-Dateien mit ImgBurn in Windows.
Wie man mit dem Rasterbator riesige, lebensgroße Plakate erstellt
Erfahren Sie, wie Sie mit dem Rasterbator riesige, lebensgroße Poster erstellen.