CodeGym /Kurse /Docker SELF /Einbindung von Volumes und Netzwerken

Einbindung von Volumes und Netzwerken

Docker SELF
Level 16 , Lektion 1
Verfügbar

7.1 Einbindung von Volumes

Die Einbindung von Volumes und Netzwerken in Docker Compose macht es möglich, flexible und effiziente Multi-Container-Anwendungen zu erstellen. Volumes werden verwendet, um Daten zu speichern, die außerhalb von Containern erhalten bleiben sollen, während Netzwerke die Interaktion zwischen Containern ermöglichen. In dieser Vorlesung schauen wir uns im Detail an, wie man Volumes und Netzwerke in Docker Compose nutzt.

Volumes in Docker ermöglichen es, Daten außerhalb von Containern zu speichern, sodass sie auch nach dem Stoppen oder Löschen von Containern verfügbar bleiben. Das ist besonders nützlich für die Speicherung von Datenbanken, Logdateien und anderen langfristigen Daten.

Volume-Typen:

  • Named Volumes (Benannte Volumes): Diese werden von Docker verwaltet und in einem speziellen Verzeichnis auf dem Host gespeichert.
  • Bind Mounts (Gebundene Volumes): Diese werden aus einem angegebenen Verzeichnis auf dem Host in den Container eingebunden.

Definition von Volumes in Docker Compose

Beispiel für Named Volumes

In diesem Beispiel wird ein Named Volume postgres-data erstellt, das in das Verzeichnis /var/lib/postgresql/data innerhalb des Containers db eingebunden wird.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Beispiel für Bind Mounts

In diesem Beispiel werden lokale Verzeichnisse und Dateien nginx.conf und html als Bind Mounts in den Container web eingebunden.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 Netzwerkeinbindung

Netzwerke in Docker Compose ermöglichen Containern, miteinander zu interagieren. Jeder Container kann mit einem oder mehreren Netzwerken verbunden sein, was Isolierung und Traffic-Kontrolle bietet.

Netzwerktypen:

  • Bridge-Netzwerke: Standardmäßig werden Container mit einem Bridge-Netzwerk verbunden, das ihre Interaktion auf einem Host ermöglicht.
  • Overlay-Netzwerke: Werden verwendet, um Container auf verschiedenen Hosts in einem Docker-Swarm-Cluster zu verbinden.
  • Netzwerk-Plugins: Ermöglichen die Nutzung von Drittanbieter-Netzwerktreibern für komplexere Konfigurationen.

Beispiel für die Erstellung und Nutzung benutzerdefinierter Netzwerke

In diesem Beispiel werden zwei benutzerdefinierte Netzwerke erstellt: front-end und back-end. Der Service app ist mit beiden Netzwerken verbunden, der Service web nur mit front-end, und der Service db nur mit back-end.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

Praxistipps:

  1. Verwendung benannter Volumes: Benannte Volumes werden von Docker verwaltet und bieten einfache Nutzung und Datenverwaltung. Benannte Volumes können gleichzeitig an mehrere Dienste angeschlossen werden. Zum Beispiel schreibt der Backend-Service Logs, und der Monitoring-Service analysiert sie und benachrichtigt bei Fehlern auf error-Ebene.
  2. Trennung von Netzwerken: Die Nutzung mehrerer Netzwerke erlaubt es, verschiedene Teile der Anwendung zu isolieren und ihre Interaktion zu steuern.
  3. Speicherung von Konfigurationsdateien: Nutze gebundene Volumes, um Konfigurationsdateien zu mounten, was es ermöglicht, die Konfiguration einfach zu ändern, ohne Images neu aufzubauen.
  4. Netzwerksicherheit: Beschränke den Zugriff auf Netzwerke, sodass nur notwendige Container interagieren können. Das erhöht die Sicherheit der Anwendung.

7.3 Beispiele für die Nutzung von Volumes und Netzwerken

Beispiele für die Nutzung von Volumes und Netzwerken in Docker Compose:

Beispiel 1: Anwendung mit Webserver und Datenbank

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

In diesem Beispiel:

  • Der Webserver nginx und die Datenbank PostgreSQL sind mit demselben Netzwerk webnet verbunden, was ihre Interaktion ermöglicht. Wenn nur ein Netzwerk verwendet wird, kann es ausgelassen werden – ein Standardnetzwerk wird automatisch erstellt.
  • Die Daten der Datenbank werden in einem benannten Volume db-data gespeichert, was ihre Persistenz beim Neustart der Container sicherstellt.

Beispiel 2: Anwendung mit mehreren Ebenen

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

In diesem Beispiel:

  • Es wurden zwei Netzwerke erstellt: front-tier und back-tier.
  • Der Service frontend ist mit beiden Netzwerken verbunden, was ihm ermöglicht, sowohl mit backend als auch mit externen Clients zu interagieren.
  • Die Services backend und database sind nur mit dem Netzwerk back-tier verbunden, um ihre Isolation und Interaktion zu gewährleisten.
  • Die Daten der Services backend und database werden in separaten benannten Volumes backend-data und db-data gespeichert.
3
Aufgabe
Docker SELF, Level 16, Lektion 1
Gesperrt
Montieren eines benannten Volumes
Montieren eines benannten Volumes
3
Aufgabe
Docker SELF, Level 16, Lektion 1
Gesperrt
Gebundener Speicherort für Nginx
Gebundener Speicherort für Nginx
3
Aufgabe
Docker SELF, Level 16, Lektion 1
Gesperrt
Netzwerke für die Interaktion von Diensten
Netzwerke für die Interaktion von Diensten
3
Aufgabe
Docker SELF, Level 16, Lektion 1
Gesperrt
Daten-Mounting mit gebundenem und benanntem Volume
Daten-Mounting mit gebundenem und benanntem Volume
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION