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:

  • service deklariert jeden Container mit seiner speziellen Konfiguration, die wir benennen können wie wir wollen.
  • build sagt uns, wie wir unseren Container bauen wollen, in diesem Fall welche Datei verwendet werden soll und wo sie sich mit dockerfile und context befindet.
  • restart sagt 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.
  • ports mappt jeden Port, den wir wollen, auf den Standardport, genau wie das -p Flag, wenn wir im Terminal arbeiten.
  • volumes sind 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.