26 Docker Compose: Multi-Container-Anwendungen

26.1 Einführung

Docker Compose ist ein Tool zur Definition und Verwaltung von Multi-Container-Docker-Anwendungen. Mit Docker Compose können Sie Anwendungen, die aus mehreren Containern bestehen, in einer einzigen YAML-Datei definieren und diese mit einfachen Befehlen starten, stoppen und verwalten.

26.2 Installation von Docker Compose

Docker Compose kann einfach installiert werden, wenn Docker bereits auf dem System läuft.

26.2.1 Installation unter Linux

Befehl:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

26.2.2 Überprüfung der Installation

Befehl:

docker-compose --version

Ausgabe:

docker-compose version 1.29.2, build 5becea4c

26.3 Grundlegende Konzepte von Docker Compose

26.3.1 Docker Compose Datei (docker-compose.yml)

Die docker-compose.yml-Datei definiert die Dienste, Netzwerke und Volumes, die für die Anwendung benötigt werden.

Beispiel: Einfache docker-compose.yml-Datei

version: '3.1'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

Erklärung: Diese Datei definiert zwei Dienste: web und db. Der web-Dienst verwendet das Nginx-Image und mappt den Host-Port 8080 auf den Container-Port 80. Der db-Dienst verwendet das MySQL-Image und setzt das Root-Passwort auf example.

26.4 Verwendung von Docker Compose

26.4.1 Dienste starten

Befehl:

docker-compose up -d

Erklärung: Dieser Befehl startet alle in der docker-compose.yml-Datei definierten Dienste im Hintergrund.

26.4.2 Dienste stoppen

Befehl:

docker-compose down

Erklärung: Dieser Befehl stoppt alle laufenden Dienste und entfernt die zugehörigen Container.

26.4.3 Dienste anzeigen

Befehl:

docker-compose ps

Ausgabe:

    Name                  Command               State          Ports        
----------------------------------------------------------------------------
myapp_db_1   docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp   
myapp_web_1  nginx -g daemon off;             Up      0.0.0.0:8080->80/tcp

26.4.4 Logs anzeigen

Befehl:

docker-compose logs

Erklärung: Dieser Befehl zeigt die Logs aller Dienste an.

26.5 Beispiel für eine komplexere Docker Compose Datei

Datei: docker-compose.yml

version: '3.8'

services:
  web:
    build: ./web
    ports:
      - "8080:80"
    volumes:
      - ./web:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: example
      POSTGRES_PASSWORD: example
      POSTGRES_DB: exampledb
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

Erklärung: Diese Datei definiert zwei Dienste: web und db. Der web-Dienst wird aus einem Dockerfile im Verzeichnis ./web erstellt und verwendet Bind Mounts für die Webinhalte. Der db-Dienst verwendet das PostgreSQL-Image und definiert Umgebungsvariablen für die Datenbankkonfiguration. Ein Volume db-data wird erstellt, um die Datenbankdaten zu persistieren.

26.6 Multi-Container-Anwendungen mit Abhängigkeiten

Docker Compose ermöglicht es, Abhängigkeiten zwischen Diensten zu definieren, sodass Dienste in der richtigen Reihenfolge gestartet werden.

26.6.1 Abhängigkeiten festlegen

Beispiel:

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

Erklärung: In diesem Beispiel wird der web-Dienst erst gestartet, nachdem der db-Dienst gestartet wurde.

26.7 Skalieren von Diensten

Docker Compose ermöglicht das einfache Skalieren von Diensten, um mehrere Instanzen eines Dienstes auszuführen.

26.7.1 Dienst skalieren

Befehl:

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

Erklärung: Dieser Befehl startet drei Instanzen des web-Dienstes.

Docker Compose bietet eine leistungsstarke und benutzerfreundliche Möglichkeit, Multi-Container-Anwendungen zu definieren und zu verwalten. Durch die Verwendung einer einfachen YAML-Datei können Entwickler und Administratoren komplexe Anwendungsumgebungen mit mehreren Diensten effizient starten, stoppen und verwalten. Im nächsten Kapitel werden Best Practices für den Einsatz von Docker in der Produktion behandelt.