Docker Schnellstart – Abschlussprojekt – Multi-Container mit Docker Compose
In dieser Übung werden wir untersuchen, wie wir eine App in ein kleines Netzwerk aus mehreren Docker Containern mit jeweils eigenen Images aufteilen können. Einzelne Container sind einfach genug, um sie mal eben in der Kommandozeile zu erstellen, aber alles, was komplizierter ist, kann schnell aus dem Ruder laufen.
Stattdessen werden wir eine spezielle Art von Konfigurationsdatei namens docker-compose.yml verwenden. Dieser deklarative Ansatz erlaubt es uns, schnell unsere Images in jedem Container zu definieren und das Netzwerk zwischen ihnen einzurichten.
In diesem Beispiel werden wir eine WordPress-Webseite und einen MySQL-Server einrichten.
Projektordner anlegen
Lege zunächst einen leeren Projektordner an z.B. projekt-wp
Jetzt wird es Zeit für etwas Magie mit Docker Compose.
Docker Compose einrichten
Erstelle eine docker-compose Datei mit der Endung .yml
In diese Datei schreiben wir alle Anweisungen, die von Docker Compose während des Build-Prozess ausgeführt werden sollen.
Inhalt der Datei docker-compose.yml:
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: meinwordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Lass uns einmal genau durchgehen, was hier passiert:
servicedeklariert jeden Container mit seiner speziellen Konfiguration, die wir benennen können wie wir wollen.buildsagt uns, wie wir unseren Container bauen wollen, in diesem Fall welche Datei verwendet werden soll und wo sie sich mitdockerfileundcontextbefindet.restartsagt Docker, was zu tun ist, wenn ein Container während der Laufzeit ausfällt, in diesem Fall wollen wir, dass er immer versucht, neu zu starten.portsmappt jeden Port, den wir wollen, auf den Standardport, genau wie das-pFlag, wenn wir im Terminal arbeiten.volumessind die persistenten Daten, die mit jedem Container verbunden sind. Wir duplizieren Teile unseres Containers und seiner Abhängigkeiten auf eine Art und Weise, dass wenn wir den Container wegwerfen und einen neuen starten, er diesen Cache hat, um die Zeit zu vermeiden, alles neu zu installieren.
Schließlich können wir unsere Dienste erstellen und unsere Container zusammenfügen, indem wir den Befehl docker-compose up und das Flag -d verwenden, um unsere Images im detached mode zu erstellen.
docker-compose up -d
Dies kann eine Weile dauern, da alles kopiert wird und ausgeführt wird, aber wenn es fertig ist, solltest du sehen, dass MySQL und WordPress gleichzeitig laufen.
Ausgabe Terminal:
Super! Alle Container wurden gestartet.

In der Docker Desktop GUI ist auch nochmal schön zu sehen, das unsere Multi-Container Umgebung erfolgreich läuft:

WordPress läuft unter dem Port 8000. Rufe daher localhost:8000 auf, um deine WordPress Seite (bzw. die Erstinstallation der Website) zu starten. Du solltest in deinem Browser ungefähr Folgendes sehen:

Fazit zum Multi-Container Projekt
Dies mag ein sehr einfacher Anwendungsfall gewesen sein, aber Docker Compose ist definitiv eines der wichtigsten Tools, die du bei fast allen deinen Docker-Projekten verwenden wirst.