Ein neues Image aus mehreren Quell-Images erstellen
In diesem Schritt lernen Sie, wie Sie ein neues Docker-Image erstellen, indem Sie Inhalte aus mehreren Quell-Images kombinieren. Dies ist ein gängiges Szenario, wenn Sie ein Image erstellen müssen, das Komponenten aus verschiedenen Basis-Images oder vorgefertigten Images enthält.
Zuerst laden wir die benötigten Quell-Images herunter. Wir verwenden die Images ubuntu
und alpine
als Beispiele.
docker pull ubuntu:latest
docker pull alpine:latest
Sie sollten eine Ausgabe sehen, die anzeigt, dass die Images heruntergeladen werden.
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
Nun erstellen wir ein neues Image mit einer Dockerfile
. Eine Dockerfile
ist ein Textdokument, das alle Befehle enthält, die ein Benutzer auf der Kommandozeile aufrufen würde, um ein Image zusammenzustellen. Erstellen Sie eine neue Datei namens Dockerfile
in Ihrem Verzeichnis ~/project
.
nano ~/project/Dockerfile
Fügen Sie folgenden Inhalt zur Dockerfile
hinzu:
FROM ubuntu:latest AS base
FROM alpine:latest AS alpine_base
COPY --from=alpine_base /etc/alpine-release /app/alpine-release
COPY --from=base /etc/os-release /app/ubuntu-release
WORKDIR /app
CMD ["ls", "-l"]
Lassen Sie uns diese Dockerfile
aufschlüsseln:
FROM ubuntu:latest AS base
: Diese Zeile setzt das Basis-Image für die erste Stufe unseres Builds auf ubuntu:latest
und benennt diese Stufe base
.
FROM alpine:latest AS alpine_base
: Diese Zeile startet eine neue Build-Stufe mit alpine:latest
als Basis-Image und benennt diese Stufe alpine_base
. Dies ist ein Multi-Stage-Build, der es uns ermöglicht, Dateien zwischen den Stufen zu kopieren.
COPY --from=alpine_base /etc/alpine-release /app/alpine-release
: Dieser Befehl kopiert die Datei /etc/alpine-release
aus der alpine_base
-Stufe in das Verzeichnis /app/alpine-release
der aktuellen Stufe.
COPY --from=base /etc/os-release /app/ubuntu-release
: Dieser Befehl kopiert die Datei /etc/os-release
aus der base
-Stufe in das Verzeichnis /app/ubuntu-release
der aktuellen Stufe.
WORKDIR /app
: Dies setzt das Arbeitsverzeichnis für nachfolgende Anweisungen auf /app
.
CMD ["ls", "-l"]
: Dies gibt den Standardbefehl an, der ausgeführt wird, wenn ein Container aus diesem Image gestartet wird. Er listet die Inhalte des Verzeichnisses /app
auf.
Speichern Sie die Dockerfile
durch Drücken von Strg + X
, dann Y
und Eingabe
.
Nun bauen wir das Image mit dem Befehl docker build
. Der .
am Ende des Befehls gibt den Build-Kontext an, der das aktuelle Verzeichnis (~/project
) ist.
docker build -t my-multi-stage-image:latest ~/project
Sie sollten eine Ausgabe sehen, die den Build-Prozess anzeigt, einschließlich der verschiedenen ausgeführten Stufen.
[+] Building
...
Successfully built <image_id>
Successfully tagged my-multi-stage-image:latest
Nach Abschluss des Builds können Sie überprüfen, ob das Image erstellt wurde, indem Sie Ihre lokalen Images auflisten.
docker images my-multi-stage-image
Sie sollten Ihr neu erstelltes Image in der Liste sehen.
REPOSITORY TAG IMAGE ID CREATED SIZE
my-multi-stage-image latest <image_id> About a minute ago ...MB
Abschließend starten wir einen Container aus diesem Image, um die kopierten Dateien zu sehen.
docker run --rm my-multi-stage-image:latest
Das Flag --rm
entfernt den Container automatisch, wenn er beendet wird. Die Ausgabe sollte die Dateien zeigen, die aus den Images ubuntu
und alpine
kopiert wurden.
total 8
-rw-r--r-- 1 root root 25 Aug 24 10:00 alpine-release
-rw-r--r-- 1 root root 281 Aug 24 10:00 ubuntu-release
Dies bestätigt, dass wir erfolgreich ein Image erstellt haben, indem wir Inhalte aus mehreren Quell-Images mit einem Multi-Stage-Build kombiniert haben.