Von den Grundlagen bis zu Multi-Stage-Builds

DockerBeginner
Jetzt üben

Einführung

Docker hat die Art und Weise, wie wir Anwendungen entwickeln, ausliefern und ausführen, revolutioniert. Das Herzstück der Docker-Funktionalität ist die Fähigkeit, maßgeschneiderte Images für spezifische Anforderungen zu erstellen. In dieser Challenge werden Sie die Leistungsfähigkeit und Flexibilität des Befehls docker build erkunden und lernen, wie Sie Docker-Images für eine Vielzahl von Szenarien erstellen.

Von einfachen Anwendungen bis hin zu komplexeren Setups mit Abhängigkeiten und Umgebungsvariablen sammeln Sie praktische Erfahrungen mit den grundlegenden Konzepten der Docker-Image-Erstellung. Am Ende dieser Challenge verfügen Sie über ein solides Fundament für den Bau effizienter und effektiver Docker-Images – eine entscheidende Fähigkeit in modernen Softwareentwicklungs- und Deployment-Workflows.

Beginnen wir unsere Reise in die Welt der Docker-Image-Erstellung!

Grundlagen des Docker-Builds

Wir beginnen mit den Basics. In diesem Schritt erstellen Sie ein einfaches Docker-Image, das eine "Hello, World!"-Nachricht ausgibt. Dies macht Sie mit der Grundstruktur eines Dockerfiles und dem Befehl docker build vertraut.

Aufgaben

  1. Navigieren Sie in das Verzeichnis hello-world unter /home/labex/project.
  2. Öffnen Sie das Dockerfile in diesem Verzeichnis und fügen Sie die erforderlichen Anweisungen hinzu.
  3. Erstellen Sie ein Docker-Image mit dem Namen hello-world unter Verwendung des Befehls docker build.

Anforderungen

  • Führen Sie alle Operationen im Verzeichnis /home/labex/project/hello-world aus.
  • Verwenden Sie das Alpine Linux Basis-Image in Ihrem Dockerfile.
  • Das Docker-Image soll beim Ausführen "Hello, World!" ausgeben.

Beispiel

Nach Abschluss dieses Schritts sollten Sie in der Lage sein, den folgenden Befehl auszuführen und die entsprechende Ausgabe zu sehen:

$ docker run hello-world
Hello, World!

Gute Arbeit bei der Erstellung Ihres ersten Docker-Images! Dieses einfache Beispiel demonstriert die Grundprinzipien der Image-Erstellung. Im nächsten Schritt bauen wir auf diesem Wissen auf, um ein komplexeres Image mit Abhängigkeiten zu erstellen.

✨ Lösung prüfen und üben

Docker-Image mit Abhängigkeiten erstellen

Da Sie nun mit den Grundlagen vertraut sind, widmen wir uns einem realistischeren Szenario. In diesem Schritt erstellen Sie ein Docker-Image für eine Python-Anwendung, die das Flask-Webframework nutzt. Dabei lernen Sie das Konzept der Verwaltung von Abhängigkeiten in Docker-Images kennen.

Aufgaben

  1. Navigieren Sie in das Verzeichnis flask-app unter /home/labex/project.
  2. Öffnen Sie das Dockerfile in diesem Verzeichnis und fügen Sie die notwendigen Anweisungen zur Installation der Abhängigkeiten hinzu.
  3. Untersuchen Sie die Datei requirements.txt, um die benötigten Abhängigkeiten zu verstehen.
  4. Erstellen Sie ein Docker-Image mit dem Namen flask-app unter Verwendung des Befehls docker build.

Anforderungen

  • Führen Sie alle Operationen im Verzeichnis /home/labex/project/flask-app aus.
  • Verwenden Sie das Basis-Image python:3.7-alpine in Ihrem Dockerfile.
  • Stellen Sie sicher, dass die in requirements.txt aufgeführten Abhängigkeiten im Image installiert werden.
  • Das Dockerfile muss die Datei requirements.txt kopieren und die Abhängigkeiten installieren.

Beispiel

Nach Abschluss dieses Schritts sollten Sie das Image flask-app in der Liste Ihrer Docker-Images sehen können:

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
flask-app    latest    abcdef123456   2 minutes ago   55.8MB

Hervorragend! Sie haben nun ein Docker-Image erstellt, das externe Abhängigkeiten enthält. Dies ist ein gängiges Szenario in der Praxis. Im nächsten Schritt schauen wir uns an, wie wir Umgebungsvariablen nutzen können, um unsere Images flexibler und konfigurierbar zu machen.

✨ Lösung prüfen und üben

Docker-Image mit Umgebungsvariablen erstellen

Das Konfigurationsmanagement ist ein entscheidender Aspekt containerisierter Anwendungen. In diesem Schritt erstellen Sie ein Docker-Image, das eine Umgebungsvariable verwendet, um die Portnummer für eine Flask-Anwendung festzulegen. Dies zeigt Ihnen, wie Sie Ihre Docker-Images dynamischer gestalten und an verschiedene Umgebungen anpassen können.

Aufgaben

  1. Navigieren Sie in das Verzeichnis flask-app-env unter /home/labex/project.
  2. Öffnen Sie das Dockerfile in diesem Verzeichnis und fügen Sie Anweisungen zum Setzen einer Umgebungsvariablen hinzu.
  3. Ändern Sie die Datei app.py, sodass sie die Umgebungsvariable für die Portnummer verwendet.
  4. Erstellen Sie ein Docker-Image mit dem Namen flask-app-env unter Verwendung des Befehls docker build.

Anforderungen

  • Führen Sie alle Operationen im Verzeichnis /home/labex/project/flask-app-env aus.
  • Verwenden Sie das Basis-Image python:3.7-alpine in Ihrem Dockerfile.
  • Setzen Sie im Dockerfile eine Umgebungsvariable PORT mit dem Standardwert 5000.
  • Passen Sie die Flask-Anwendung so an, dass sie die Umgebungsvariable PORT für den Listening-Port nutzt.
  • Stellen Sie sicher, dass alle erforderlichen Python-Pakete aus der requirements.txt installiert sind.

Beispiel

Nachdem Sie diesen Schritt abgeschlossen und den Container gestartet haben, sollten Sie auf die Anwendung zugreifen können:

$ docker run -d -p 5000:5000 flask-app-env
$ curl http://127.0.0.1:5000
Hello, World!

Gute Arbeit! Sie haben nun ein flexibleres Docker-Image erstellt, das sich über Umgebungsvariablen anpassen lässt. Dies ist eine leistungsstarke Technik zur Erstellung wiederverwendbarer und konfigurierbarer Container-Images. Im letzten Schritt erkunden wir ein fortgeschrittenes Docker-Feature: Multi-Stage-Builds.

✨ Lösung prüfen und üben

Docker-Image mit mehreren Stufen (Multi-Stage) erstellen

Für unsere letzte Herausforderung tauchen wir in Multi-Stage-Builds ein. Diese fortgeschrittene Technik ermöglicht es Ihnen, effizientere Docker-Images zu erstellen, indem Sie mehrere Stufen im Build-Prozess verwenden. Sie erstellen ein Docker-Image für eine Go-Anwendung, wobei eine Stufe zum Kompilieren des Codes und eine weitere zur Erstellung eines schlanken, produktionsreifen Images dient.

Aufgaben

  1. Navigieren Sie in das Verzeichnis go-app unter /home/labex/project.
  2. Öffnen Sie das Dockerfile in diesem Verzeichnis und fügen Sie die Anweisungen für einen Multi-Stage-Build hinzu.
  3. Untersuchen Sie die Datei main.go, um die einfache Go-Anwendung zu verstehen.
  4. Erstellen Sie ein Docker-Image mit dem Namen go-app unter Verwendung des Befehls docker build.

Anforderungen

  • Führen Sie alle Operationen im Verzeichnis /home/labex/project/go-app aus.
  • Verwenden Sie golang:1.14-alpine als Basis-Image für die Build-Stufe und alpine als Basis-Image für die finale Stufe.
  • Die Go-Anwendung soll beim Ausführen "Hello, World!" ausgeben.
  • Die Go-Anwendung muss mit dem Befehl go build kompiliert werden.
  • Das finale Docker-Image darf nur die kompilierte Binärdatei enthalten, nicht die Go-Entwicklungsumgebung.

Beispiel

Nach Abschluss dieses Schritts sollten Sie in der Lage sein, den folgenden Befehl auszuführen und die Ausgabe zu sehen:

$ docker run go-app
Hello, World!
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieser umfassenden Challenge zur Docker-Image-Erstellung! Sie haben den Weg von einem einfachen Docker-Image bis hin zur Implementierung fortgeschrittener Techniken wie Multi-Stage-Builds gemeistert. Dabei haben Sie gelernt, wie man:

  1. Ein einfaches Docker-Image mit einem Basis-Dockerfile erstellt.
  2. Abhängigkeiten in Docker-Images verwaltet.
  3. Umgebungsvariablen nutzt, um Images flexibler zu gestalten.
  4. Multi-Stage-Builds für effiziente, produktionsreife Images implementiert.

Diese Fähigkeiten bilden das Fundament für den effektiven Einsatz von Docker und werden Ihnen in verschiedenen Szenarien – von der Entwicklung über Tests bis hin zum produktiven Deployment – von großem Nutzen sein. Sie haben praktische Erfahrung mit der Docker-CLI und der Dockerfile-Syntax gesammelt, was für jeden, der mit containerisierten Anwendungen arbeitet, von unschätzbarem Wert ist.

Denken Sie bei Ihrer weiteren Reise mit Docker daran, dass diese grundlegenden Operationen die Bausteine für komplexere Docker-Workflows sind. Üben Sie diese Fähigkeiten regelmäßig, um Ihre Kompetenz in der Erstellung und Verwaltung von Container-Images zu festigen. Dies wird letztendlich zu effizienteren und schlankeren Entwicklungs- und Deployment-Prozessen führen.

Erkunden Sie weiterhin die Möglichkeiten von Docker und zögern Sie nicht, mit verschiedenen Basis-Images, Build-Strategien und Optimierungstechniken zu experimentieren. Die Welt der Containerisierung ist riesig und voller Möglichkeiten – und Sie sind nun bestens gerüstet, um sie selbstbewusst zu navigieren!