Einführung
Docker Multi-stage Build ist eine Funktion, mit der Sie mehrere Phasen (Stages) in einem einzigen Dockerfile definieren können, um ein optimiertes finales Docker-Image zu erzeugen. In dieser Challenge lernen Sie, wie Sie mit diesem Verfahren die Image-Größe reduzieren und die Effizienz Ihrer Container steigern.
Dockerfile mit Multi-stage Build erstellen
In diesem Abschnitt erstellen Sie ein Dockerfile, das einen mehrstufigen Build-Prozess nutzt.
Aufgaben
- Erstellen Sie ein neues
Dockerfilemit zwei Stages. Die erste Stage baut die Anwendung auf, indem sie die erforderlichen Abhängigkeiten installiert und das Build-Skript ausführt. Die zweite Stage erstellt das endgültige Image, indem sie den kompilierten Code aus der ersten Stage kopiert, nur die produktionsrelevanten Abhängigkeiten installiert und den erforderlichen Port freigibt.
Beispiel
Hier ist ein beispielhafter Ablauf der Schritte:
Erstellen Sie ein neues Verzeichnis namens
myappund wechseln Sie hinein.mkdir myapp cd myappLaden Sie den NodeJS-Quellcode von
https://github.com/labex-labs/nodejs-example.githerunter.git clone https://github.com/labex-labs/nodejs-example.gitVerschieben Sie den heruntergeladenen Code direkt in das
myapp-Verzeichnis.mv nodejs-example/* . rm -rf nodejs-exampleErstellen Sie im Verzeichnis
myappeine neue Datei namensDockerfilemit folgendem Inhalt:## Stage 1: Build the application FROM node:14-alpine AS base WORKDIR /app COPY . ./ RUN npm install ## Stage 2: Create the final image FROM node:14-alpine WORKDIR /app COPY --from=base /app/ . EXPOSE 3000 CMD [ "npm", "start" ]
Anforderungen
Um diese Challenge abzuschließen, müssen Sie:
- Ein Verzeichnis namens
myappim Pfad/home/labex/projecterstellen. - Den NodeJS-Quellcode in das Verzeichnis
myappklonen. - Ein
Dockerfileim Verzeichnismyappmit dem angegebenen Inhalt erstellen.
Docker-Image bauen
In diesem Schritt erstellen Sie ein Image basierend auf dem Dockerfile.
Aufgaben
- Bauen Sie ein neues Image mit dem Namen
myapp.
Beispiel
So sollte das Ergebnis aussehen:
Verwenden Sie den Befehl
docker build, um ein neues Image namensmyappzu erstellen.docker build -t myapp .Überprüfen Sie mit
docker images, ob das Image erfolgreich erstellt wurde.
Anforderungen
Um diese Challenge abzuschließen, müssen Sie:
- Den Befehl
docker buildim Verzeichnis/home/labex/project/myappausführen. - Das Image
myappnennen.
Docker-Container ausführen
In diesem Schritt verwenden Sie das Docker-Image, um einen Container zu starten.
Aufgaben
- Starten Sie einen Container basierend auf dem Image
myapp. Der Container soll den internen Port3000auf den Host-Port3030weiterleiten. Greifen Sie anschließend über Ihren Browser auf die Anwendung zu.
Beispiel
So gehen Sie vor:
Starten Sie einen neuen Docker-Container mit dem Namen
my-app.docker run --name my-app -p 3030:3000 myappÖffnen Sie einen Webbrowser und rufen Sie
http://localhost:3030auf, um die laufende Anwendung zu sehen.
Anforderungen
Um diese Challenge abzuschließen, müssen Sie:
- Den Container mit dem Namen
my-appausführen. - Den Port
3000innerhalb des Containers auf den Port3030des Hosts mappen.
Zusammenfassung
In dieser Challenge haben Sie gelernt, wie Sie Docker Multi-stage Builds einsetzen, um kompaktere und effizientere Docker-Images zu erstellen. Durch die Verwendung mehrerer Stages in einem Dockerfile können Sie Build-Tools von der eigentlichen Laufzeitumgebung trennen und so die Größe des finalen Images drastisch reduzieren. Mit diesem Wissen können Sie nun eigene optimierte Docker-Images für Ihre Projekte entwerfen.



