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
- Navigieren Sie in das Verzeichnis
hello-worldunter/home/labex/project. - Öffnen Sie das
Dockerfilein diesem Verzeichnis und fügen Sie die erforderlichen Anweisungen hinzu. - Erstellen Sie ein Docker-Image mit dem Namen
hello-worldunter Verwendung des Befehlsdocker build.
Anforderungen
- Führen Sie alle Operationen im Verzeichnis
/home/labex/project/hello-worldaus. - 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.
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
- Navigieren Sie in das Verzeichnis
flask-appunter/home/labex/project. - Öffnen Sie das
Dockerfilein diesem Verzeichnis und fügen Sie die notwendigen Anweisungen zur Installation der Abhängigkeiten hinzu. - Untersuchen Sie die Datei
requirements.txt, um die benötigten Abhängigkeiten zu verstehen. - Erstellen Sie ein Docker-Image mit dem Namen
flask-appunter Verwendung des Befehlsdocker build.
Anforderungen
- Führen Sie alle Operationen im Verzeichnis
/home/labex/project/flask-appaus. - Verwenden Sie das Basis-Image
python:3.7-alpinein Ihrem Dockerfile. - Stellen Sie sicher, dass die in
requirements.txtaufgeführten Abhängigkeiten im Image installiert werden. - Das Dockerfile muss die Datei
requirements.txtkopieren 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.
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
- Navigieren Sie in das Verzeichnis
flask-app-envunter/home/labex/project. - Öffnen Sie das
Dockerfilein diesem Verzeichnis und fügen Sie Anweisungen zum Setzen einer Umgebungsvariablen hinzu. - Ändern Sie die Datei
app.py, sodass sie die Umgebungsvariable für die Portnummer verwendet. - Erstellen Sie ein Docker-Image mit dem Namen
flask-app-envunter Verwendung des Befehlsdocker build.
Anforderungen
- Führen Sie alle Operationen im Verzeichnis
/home/labex/project/flask-app-envaus. - Verwenden Sie das Basis-Image
python:3.7-alpinein Ihrem Dockerfile. - Setzen Sie im Dockerfile eine Umgebungsvariable
PORTmit dem Standardwert 5000. - Passen Sie die Flask-Anwendung so an, dass sie die Umgebungsvariable
PORTfür den Listening-Port nutzt. - Stellen Sie sicher, dass alle erforderlichen Python-Pakete aus der
requirements.txtinstalliert 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.
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
- Navigieren Sie in das Verzeichnis
go-appunter/home/labex/project. - Öffnen Sie das
Dockerfilein diesem Verzeichnis und fügen Sie die Anweisungen für einen Multi-Stage-Build hinzu. - Untersuchen Sie die Datei
main.go, um die einfache Go-Anwendung zu verstehen. - Erstellen Sie ein Docker-Image mit dem Namen
go-appunter Verwendung des Befehlsdocker build.
Anforderungen
- Führen Sie alle Operationen im Verzeichnis
/home/labex/project/go-appaus. - Verwenden Sie
golang:1.14-alpineals Basis-Image für die Build-Stufe undalpineals 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 buildkompiliert 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!
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:
- Ein einfaches Docker-Image mit einem Basis-Dockerfile erstellt.
- Abhängigkeiten in Docker-Images verwaltet.
- Umgebungsvariablen nutzt, um Images flexibler zu gestalten.
- 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!



