Einführung in Docker Compose und Services – Ein umfassendes Tutorial

Docker hat sich als eine der führenden Plattformen zur Containerisierung etabliert. Es bietet Entwicklern eine effiziente Möglichkeit, Anwendungen und ihre Abhängigkeiten in Containern zu isolieren und auszuführen. Eine der häufigsten Herausforderungen besteht jedoch darin, mehrere Container für eine komplexe Anwendung zu verwalten. Hier kommt Docker Compose ins Spiel, eine leistungsstarke Tool-Erweiterung von Docker, die es ermöglicht, mehrere Container in einem Netzwerk zusammenzuführen und effizient zu verwalten.

In diesem Tutorial führen wir dich durch die Grundlagen von Docker Compose und erklären, wie du Services in einer docker-compose.yml-Datei definierst, um eine mehrschichtige Anwendung zu orchestrieren.


Was ist Docker Compose?

Docker Compose ist ein Tool, das es ermöglicht, Multi-Container-Docker-Anwendungen zu definieren und zu verwalten. Es erlaubt dir, die Dienste deiner Anwendung (wie Webserver, Datenbank, Caching-System usw.) in einer YAML-Datei zu konfigurieren. Mit nur einem einzigen Befehl kannst du dann alle Container dieser Anwendung starten, stoppen oder verwalten.

Vorteile von Docker Compose:

  • Einfache Konfiguration: Alle Services und deren Konfigurationen werden in einer YAML-Datei verwaltet.
  • Mehrere Umgebungen: Entwickle, teste und betreibe deine Anwendung in unterschiedlichen Umgebungen (z.B. Entwicklung, Staging, Produktion) mit einer einheitlichen Konfiguration.
  • Netzwerkverwaltung: Docker Compose sorgt automatisch dafür, dass alle definierten Container in einem isolierten Netzwerk zusammenarbeiten.

Voraussetzungen

Um dieses Tutorial zu befolgen, solltest du folgende Punkte sicherstellen:

  • Docker und Docker Compose sind auf deinem System installiert.
  • Grundkenntnisse in Docker und Container-Konzepten.
  • Ein Texteditor wie Visual Studio Code.

Schritt 1: Erstellen einer docker-compose.yml-Datei

In diesem Beispiel setzen wir eine einfache Webanwendung auf, die aus zwei Services besteht:

  1. Ein Webservice mit einem NGINX-Server.
  2. Ein Datenbank-Service mit einer MySQL-Datenbank.

Zuerst erstellen wir ein neues Verzeichnis für unser Projekt und eine docker-compose.yml-Datei darin:

mkdir mein-docker-compose-projekt
cd mein-docker-compose-projekt
touch docker-compose.yml

Öffne die docker-compose.yml-Datei in deinem bevorzugten Editor und füge den folgenden Inhalt hinzu:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: exampledb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpass
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Erläuterung der docker-compose.yml-Datei:

  1. Version: Die Version gibt die Docker-Compose-Datei-Syntax an. Hier verwenden wir Version 3.
  2. Services:
    • Der web-Service verwendet das neueste NGINX-Image und leitet den lokalen Port 8080 an den Container-Port 80 weiter, auf dem NGINX standardmäßig läuft.
    • Der db-Service nutzt das MySQL-Image in der Version 5.7 und initialisiert eine Datenbank mit Umgebungsvariablen.
  3. Volumes: Hier definieren wir benannte Volumes, um persistenten Speicher für die MySQL-Datenbank zu gewährleisten.

Schritt 2: Starten der Anwendung mit Docker Compose

Nun, da unsere docker-compose.yml-Datei definiert ist, können wir unsere Multi-Container-Anwendung mit einem einfachen Befehl starten:

docker-compose up -d

Dieser Befehl:

  • Lädt die notwendigen Docker-Images herunter (falls noch nicht vorhanden).
  • Startet die Container im Hintergrund (-d steht für „detached mode“).
  • Verbindet die Services (Webserver und Datenbank) in einem gemeinsamen Netzwerk.

Mit dem Befehl docker ps kannst du prüfen, ob die Container laufen:

docker ps

Jetzt solltest du in deinem Browser http://localhost:8080 aufrufen können und die Standardseite von NGINX sehen.


Schritt 3: Verwalten der Container

Docker Compose bietet eine Vielzahl von nützlichen Befehlen, um deine Container zu verwalten. Hier sind einige der wichtigsten:

  • Container stoppen: Um alle laufenden Container zu stoppen, benutze:
docker-compose down

Logs anzeigen: Um die Logs eines bestimmten Services anzuzeigen, verwende:

docker-compose logs web

Container neustarten: Falls du Änderungen an der Konfiguration vorgenommen hast, kannst du die Container einfach neu starten:

docker-compose restart

Status überprüfen: Der Befehl docker-compose ps zeigt den Status aller Dienste an.

docker-compose ps

Schritt 4: Arbeiten mit Umgebungen und Netzwerken

Ein großer Vorteil von Docker Compose ist die Möglichkeit, unterschiedliche Umgebungen (wie Entwicklung und Produktion) zu definieren. Oft möchtest du beispielsweise in der Entwicklungsumgebung andere Einstellungen verwenden als in der Produktionsumgebung.

Beispiel für Umgebungsvariablen:

Du kannst eine .env-Datei erstellen, um Umgebungsvariablen für dein Docker-Compose-Projekt zu definieren:

  1. Erstelle eine .env-Datei:
touch .env

Füge folgende Variablen hinzu:

MYSQL_ROOT_PASSWORD=rootpass
MYSQL_DATABASE=exampledb
MYSQL_USER=user
MYSQL_PASSWORD=userpass

In deiner docker-compose.yml-Datei kannst du diese Variablen dann referenzieren:

db:
  image: mysql:5.7
  environment:
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_DATABASE: ${MYSQL_DATABASE}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}

Netzwerke:

Docker Compose erstellt standardmäßig ein eigenes Netzwerk für die Services in der docker-compose.yml. Du kannst aber auch benutzerdefinierte Netzwerke anlegen:

networks:
  front_end:
  back_end:

services:
  web:
    networks:
      - front_end
  db:
    networks:
      - back_end

Dies trennt den Webserver und die Datenbank in zwei Netzwerke, sodass sie nur über explizit freigegebene Ports kommunizieren.


Fazit

Docker Compose ist ein extrem nützliches Tool für die Verwaltung von Multi-Container-Docker-Anwendungen. Mit einer klar strukturierten docker-compose.yml-Datei kannst du mehrere Services in einem Netzwerk orchestrieren und deine Anwendung sowohl in der Entwicklung als auch in der Produktion mühelos skalieren.

Durch die Möglichkeit, Umgebungen und Netzwerke zu konfigurieren, bietet Docker Compose eine flexible Lösung für eine Vielzahl von Anwendungsszenarien. Probiere es aus und optimiere deine Workflows!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert