Docker-Compose Tutorial: Einfache Verwaltung mehrerer Container

Docker ist ein mächtiges Werkzeug für die Containerisierung von Anwendungen. Oft besteht eine Anwendung jedoch aus mehreren Diensten, die jeweils in eigenen Containern laufen. Hier kommt Docker-Compose ins Spiel: Es ermöglicht das einfache Starten und Verwalten mehrerer Container in einer Anwendung. In diesem Tutorial zeige ich dir, wie du Docker-Compose verwendest, um Container-Orchestrierung zu erleichtern.

Inhalt

  1. Was ist Docker-Compose?
  2. Installation von Docker-Compose
  3. Aufbau der docker-compose.yml-Datei
  4. Ein einfaches Beispiel mit Docker-Compose
  5. Nützliche Docker-Compose Befehle
  6. Komplexere Szenarien mit Docker-Compose
  7. Docker-Compose in der Praxis: Tipps und Tricks

1. Was ist Docker-Compose?

Docker-Compose ist ein Werkzeug, das es ermöglicht, Anwendungen, die aus mehreren Containern bestehen, zu definieren und zu verwalten. Anstatt jeden Container einzeln zu starten, erlaubt Docker-Compose die Definition mehrerer Dienste in einer einzigen YAML-Datei (meist docker-compose.yml). Durch einen einzigen Befehl können dann alle Container, Netzwerke und Volumes gleichzeitig erstellt und verwaltet werden.


2. Installation von Docker-Compose

Docker-Compose ist in neueren Versionen von Docker Desktop bereits integriert. Wenn du Docker über eine andere Methode installiert hast, kannst du Docker-Compose manuell installieren. Hier ist ein Beispiel für Linux:

sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f 4)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Überprüfe nach der Installation, ob alles funktioniert, indem du folgenden Befehl ausführst:

docker-compose --version

3. Aufbau der docker-compose.yml-Datei

Die docker-compose.yml-Datei ist das Herzstück jeder Docker-Compose-Konfiguration. In dieser Datei definierst du alle Container (auch „Dienste“ genannt), Netzwerke und Volumes, die für deine Anwendung erforderlich sind.

Der grundsätzliche Aufbau sieht folgendermaßen aus:

version: '3'   # Version der Compose-Spezifikation
services:      # Hier werden die Dienste (Container) definiert
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

In diesem Beispiel haben wir zwei Dienste definiert:

  • web: Ein Nginx-Webserver, der auf Port 8080 zugänglich ist.
  • db: Ein MySQL-Datenbankdienst mit einem Volume für persistente Daten.

4. Ein einfaches Beispiel mit Docker-Compose

Lass uns ein einfaches Setup erstellen, bei dem wir einen Nginx-Webserver und eine MySQL-Datenbank verwenden. Wir erstellen dafür eine docker-compose.yml-Datei:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: supersecret
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Speichere die Datei in einem Verzeichnis, z.B. myapp/.

Nun kannst du die gesamte Anwendung (beide Dienste) mit einem einzigen Befehl starten:

docker-compose up -d

Dieser Befehl startet die Nginx-Webserver und MySQL-Datenbank im Hintergrund. Du kannst jetzt den Nginx-Webserver unter http://localhost:8080 aufrufen.


5. Nützliche Docker-Compose Befehle

Hier sind einige nützliche Docker-Compose Befehle, die du für das Verwalten deiner Container verwenden kannst:

  • Container starten: bashKopierenBearbeiten
docker-compose up

Fügt das -d-Flag hinzu, um die Container im Hintergrund (detached) zu starten:

docker-compose up -d
  • Container stoppen:
docker-compose stop
  • Container stoppen und entfernen:
docker-compose down
  • Container-Protokolle anzeigen:
docker-compose logs
  • Status aller Dienste anzeigen:
docker-compose ps

6. Komplexere Szenarien mit Docker-Compose

Docker-Compose kann auch in komplexeren Szenarien verwendet werden. Du kannst Umgebungsvariablen setzen, Netzwerke definieren, Container skalieren und vieles mehr.

Beispiel: Ein benutzerdefiniertes Netzwerk und skalierbare Container

Hier ein Beispiel für ein Setup, bei dem wir ein benutzerdefiniertes Netzwerk verwenden und die Anzahl der Webserver-Instanzen skalieren:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    networks:
      - frontend
    deploy:
      replicas: 3

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: supersecret
    networks:
      - backend

networks:
  frontend:
  backend:

In diesem Beispiel haben wir zwei Netzwerke (frontend und backend) erstellt. Der web-Dienst ist im frontend-Netzwerk und der db-Dienst im backend. Außerdem haben wir die Webserver-Instanzen auf drei Container skaliert.

Du kannst das Setup mit folgendem Befehl ausführen:

docker-compose up --scale web=3 -d

7. Docker-Compose in der Praxis: Tipps und Tricks

Umgebungsdateien (.env)

Du kannst Umgebungsvariablen in einer .env-Datei definieren, um Konfigurationswerte wie Datenbank-Passwörter oder Ports flexibel zu halten:

.env-Datei:

MYSQL_ROOT_PASSWORD=mysecretpassword
WEB_PORT=8080

In der docker-compose.yml kannst du dann diese Werte verwenden:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "${WEB_PORT}:80"

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

Mehrere Compose-Dateien

Du kannst mehrere Compose-Dateien für unterschiedliche Umgebungen (z.B. Entwicklung und Produktion) verwenden. Zum Beispiel kannst du eine docker-compose.yml für die allgemeine Konfiguration und eine docker-compose.prod.yml für Produktionsumgebungen erstellen.

Um beide zusammen zu verwenden:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Fazit

Docker-Compose ist ein unverzichtbares Werkzeug, um mehrere Container zu orchestrieren und als Teil einer Anwendung zusammenzuführen. Mit einer einzigen YAML-Datei kannst du Container, Netzwerke und Volumes konfigurieren und alle Dienste einfach starten und verwalten.

Ob du eine kleine Webanwendung mit zwei Containern oder eine komplexe Microservice-Architektur verwaltest – Docker-Compose macht die Verwaltung und Skalierung deiner Container deutlich einfacher.

Starte jetzt, indem du Docker-Compose in deinem nächsten Projekt verwendest und die Vorteile der einfachen Container-Orchestrierung genießt!

Schreibe einen Kommentar

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