CodeGym /Kurse /Docker SELF /Erstellen von docker-compose.yml

Erstellen von docker-compose.yml

Docker SELF
Level 15 , Lektion 2
Verfügbar

3.1 Datei compose.yaml

Die Datei compose.yaml (oder auch eine der folgenden Varianten: docker-compose.yaml, docker-compose.yml, compose.yml) ist die Hauptkonfigurationsdatei, die von Docker Compose verwendet wird, um Multi-Container-Anwendungen zu definieren und zu verwalten. Sie beschreibt, welche Container (Services) gestartet werden sollen, wie sie miteinander interagieren und welche Ressourcen sie benötigen.

Der Einfachheit halber werden wir in dieser Vorlesung die Variante compose.yaml verwenden, da diese für moderne Versionen von Docker Compose empfohlen wird.

Struktur der Datei compose.yaml

Die Datei compose.yaml besteht aus mehreren Abschnitten, von denen jeder verschiedene Aspekte der Anwendungs-Konfiguration beschreibt. Die Hauptabschnitte umfassen:

  1. version: gibt die Version der Compose-Datei an (zum Beispiel '3.9').
  2. services: beschreibt die Container (Services), deren Einstellungen und Abhängigkeiten.
  3. volumes: definiert Volumes zur Daten-Speicherung zwischen Containern und Host.
  4. networks: konfiguriert Netzwerke, über die die Services miteinander kommunizieren.

3.2 Wichtige Direktiven

1. version

Die Direktive version definiert die Syntaxversion von Docker Compose, die in der Datei compose.yaml verwendet wird. Zum Zeitpunkt des Schreibens dieses Artikels ist Version 3 mit Updates wie 3.8 und 3.9 die aktuellste.

Yaml

version: '3.9'

2. services

Der Abschnitt services definiert die Container, die Compose erstellen und starten soll. Jeder Service stellt einen separaten Container mit einer bestimmten Konfiguration dar.

Beispiel:

Yaml

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

In diesem Beispiel sind zwei Services definiert: web und db. Der Service web verwendet das Image nginx:latest und öffnet Port 80. Der Service db verwendet das Image mongo:latest und bindet ein Volume zum Speichern von Daten.

3. volumes

Der Abschnitt volumes wird verwendet, um Volumes zu definieren, die an Container angehängt werden können, um Daten zu speichern. Das ist nützlich, um Daten beim Neustart von Containern beizubehalten.

Beispiel:

Yaml

volumes:
  mongo-data:

4. networks

Der Abschnitt networks ermöglicht es, benutzerdefinierte Netzwerke zu definieren, in denen Container betrieben werden. Das sorgt für Isolation und ermöglicht die Konfiguration von Netzwerkverbindungen. Wenn keine Netzwerke angegeben sind, erstellt Docker Compose ein Standardnetzwerk, und alle Services werden daran angeschlossen.

Beispiel:

Yaml

networks:
  front-end:
  back-end:

3.3 Direktiven zur Konfiguration von Services

Die wichtigsten Direktiven für die Konfiguration von Services:

1. image

Die Direktive image gibt das Image an, das für die Erstellung eines Containers verwendet wird.

Beispiel:

Yaml

services:
  web:
    image: nginx:latest

2. build

Die Direktive build wird verwendet, um den Pfad zur Dockerfile anzugeben, die für das Erstellen des Images genutzt werden soll.

Beispiel:

Yaml

services:
  app:
    build: ./app

3. ports

Die Direktive ports definiert die Ports, die geöffnet und von der Host-Maschine auf den Container weitergeleitet werden sollen.

Beispiel:

Yaml

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

4. volumes

Die Direktive volumes mountet Volumes in Container, wodurch Daten zwischen Neustarts der Container gespeichert werden können.

Beispiel:

Yaml

services:
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

5. environment

Die Direktive environment legt Umgebungsvariablen für den Container fest.

Beispiel:

Yaml

services:
  app:
    image: myapp:latest
    environment:
      - NODE_ENV=production
      - API_KEY=1234567890

6. depends_on

Die Direktive depends_on gibt an, dass dieser Service von anderen Services abhängt und nach diesen gestartet werden soll.

Wichtig! Beim Starten deines Services hast du keine 100%ige Garantie, dass alle für seinen Betrieb notwendigen Services vollständig bereit sind. Sie werden gestartet — ja, aber die weitere Funktionsfähigkeit ist nicht garantiert. Dieses Problem wird mit einem Health-Check gelöst, aber dazu später mehr.

Beispiel:

Yaml

services:
  web:
    image: nginx:latest
    depends_on:
      - db
  db:
    image: mongo:latest

7. command

Die Direktive command ermöglicht das Überschreiben des Befehls, der beim Starten des Containers ausgeführt wird.

Beispiel:

Yaml

services:
  app:
    image: myapp:latest
    command: python app.py

8. networks

Die Direktive networks verbindet einen Service mit einem oder mehreren Netzwerken.

Beispiel:

Yaml

services:
  web:
    image: nginx:latest
    networks:
      - front-end
  db:
    image: mongo:latest
    networks:
      - back-end

3.4 Vollständiges Beispiel

Beispiel einer vollständigen Datei compose.yaml

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app
    networks:
      - front-end
        
  app:
    build: ./app
    volumes:
      - ./app:/usr/src/app
    environment:
      - NODE_ENV=production
    networks:
      - front-end
      - back-end
        
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db
    networks:
      - back-end
        
volumes:
  mongo-data:
        
networks:
  front-end:
  back-end:

In diesem Beispiel:

  • Es sind drei Services definiert: web, app und db.
  • web verwendet das Nginx-Image, bindet eine Konfigurationsdatei ein und hängt vom Service app ab.
  • app wird über ein lokales Dockerfile erstellt, bindet den Quellcode der Anwendung ein und nutzt Umgebungsvariablen.
  • db verwendet das MongoDB-Image und bindet ein Volume für die Datenspeicherung ein.
  • Es werden zwei Volumes und zwei Netzwerke zur Isolierung und Steuerung der Interaktion zwischen den Services erstellt.

Hinweis: Ein Volume ist mongo-data, und das andere ist ein gemountetes Verzeichnis von der Host-Maschine (z. B. ./app).

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION