Docker Multi-stage Build Challenge

DockerBeginner
Jetzt üben

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 Dockerfile mit 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:

  1. Erstellen Sie ein neues Verzeichnis namens myapp und wechseln Sie hinein.

    mkdir myapp
    cd myapp
    
  2. Laden Sie den NodeJS-Quellcode von https://github.com/labex-labs/nodejs-example.git herunter.

    git clone https://github.com/labex-labs/nodejs-example.git
    

    Verschieben Sie den heruntergeladenen Code direkt in das myapp-Verzeichnis.

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. Erstellen Sie im Verzeichnis myapp eine neue Datei namens Dockerfile mit 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 myapp im Pfad /home/labex/project erstellen.
  • Den NodeJS-Quellcode in das Verzeichnis myapp klonen.
  • Ein Dockerfile im Verzeichnis myapp mit 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:

  1. Verwenden Sie den Befehl docker build, um ein neues Image namens myapp zu erstellen.

    docker build -t myapp .
    
  2. Überprüfen Sie mit docker images, ob das Image erfolgreich erstellt wurde.

Anforderungen

Um diese Challenge abzuschließen, müssen Sie:

  • Den Befehl docker build im Verzeichnis /home/labex/project/myapp ausführen.
  • Das Image myapp nennen.

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 Port 3000 auf den Host-Port 3030 weiterleiten. Greifen Sie anschließend über Ihren Browser auf die Anwendung zu.

Beispiel

So gehen Sie vor:

  1. Starten Sie einen neuen Docker-Container mit dem Namen my-app.

    docker run --name my-app -p 3030:3000 myapp
    
  2. Öffnen Sie einen Webbrowser und rufen Sie http://localhost:3030 auf, um die laufende Anwendung zu sehen.

Anforderungen

Um diese Challenge abzuschließen, müssen Sie:

  • Den Container mit dem Namen my-app ausführen.
  • Den Port 3000 innerhalb des Containers auf den Port 3030 des 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.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben