Docker Multi-stage Build Challenge

DockerIntermediate
Jetzt üben

Einführung

Docker Multi-stage Build ist eine Funktion, mit der du mehrere Phasen (Stages) in einem Dockerfile verwenden kannst, um ein finales Docker-Image zu erstellen. In dieser Challenge lernst du, wie du Docker Multi-stage Build einsetzt, um ein kleineres und effizienteres Docker-Image zu erstellen.

Erstellen eines Dockerfile mit Multi-stage Build

In diesem Abschnitt erstellst du ein Dockerfile, das einen Multi-stage Build verwendet.

Aufgaben

  • Erstelle ein neues Dockerfile mit zwei Phasen. Die erste Phase baut die Anwendung, indem sie die erforderlichen Abhängigkeiten installiert und das Build-Skript ausführt. Die zweite Phase erstellt das finale Image, indem sie den kompilierten Code aus der ersten Phase kopiert, nur die Produktionsabhängigkeiten installiert und den notwendigen Port freigibt.

Beispiel

Hier ist ein Beispiel für die Schritte, die du durchführen wirst:

  1. Erstelle ein neues Verzeichnis namens myapp und wechsle hinein.

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

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

    Verschiebe den heruntergeladenen Code in das myapp-Verzeichnis.

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. Erstelle eine neue Datei namens Dockerfile im myapp-Verzeichnis 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, musst du:

  • Ein Verzeichnis namens myapp im Verzeichnis /home/labex/project erstellen.
  • Den NodeJS-Quellcode in das myapp-Verzeichnis klonen.
  • Ein Dockerfile im myapp-Verzeichnis mit dem angegebenen Inhalt erstellen.

Erstellen eines Docker-Images

In diesem Schritt erstellst du ein Image unter Verwendung des Dockerfile.

Aufgaben

  • Erstelle ein neues Image namens myapp.

Beispiel

Hier ist ein Beispiel für das, was du erreichen solltest:

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

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

Anforderungen

Um diese Challenge abzuschließen, musst du:

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

Ausführen eines Docker-Containers

In diesem Schritt verwendest du das Docker-Image, um einen Container auszuführen.

Aufgaben

  • Verwende das myapp-Image, um einen Container zu starten. Der Container sollte den Port 3000 des Containers auf den Port 3030 des Hosts weiterleiten, damit du die Anwendung in deinem Browser aufrufen kannst.

Beispiel

Hier ist ein Beispiel für das, was du erreichen solltest:

  1. Starte einen neuen Docker-Container namens my-app.

    docker run --name my-app -p 3030:3000 myapp
    
  2. Öffne einen Webbrowser und navigiere zu http://localhost:3030, um auf die laufende Anwendung zuzugreifen.

Anforderungen

Um diese Challenge abzuschließen, musst du:

  • Den Container mit dem Namen my-app ausführen.
  • Den Port 3000 innerhalb des Containers auf den Port 3030 auf dem Host mappen.

Zusammenfassung

In dieser Challenge hast du gelernt, wie man Docker Multi-stage Build verwendet, um ein kleineres und effizienteres Docker-Image zu erstellen. Durch die Verwendung mehrerer Phasen in einem Dockerfile kannst du Build- und Laufzeitumgebungen trennen und die Größe des finalen Docker-Images reduzieren. Mit diesem Wissen kannst du nun beginnen, deine eigenen Docker-Images mithilfe von Multi-stage Builds zu erstellen.

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