Schnelle Docker-Container-Bereitstellung mit docker-compose

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem umfassenden Tutorial lernen Sie, wie Sie Docker-Container mithilfe des leistungsstarken Tools docker-compose schnell bereitstellen. Wir führen Sie durch den Prozess des Verständnisses der Docker-Architektur, der Installation und Konfiguration von Docker sowie der ersten Schritte mit Docker Compose. Am Ende dieses Tutorials können Sie multi-container Anwendungen definieren und konfigurieren, Docker-Container mit Compose bereitstellen und verwalten sowie Docker-Umgebungen einfach skalieren und vernetzen. Tauchen wir ein und erkunden Sie die Leistungsfähigkeit von "docker-compose up -d", um Ihre Anwendungen schnell zum Leben zu erwecken!

Einführung in Docker und Containerisierung

Docker ist eine beliebte Open-Source-Plattform, die die Entwicklung, Bereitstellung und Verwaltung von Anwendungen in containerisierten Umgebungen ermöglicht. Die Containerisierung ist eine Methode, Anwendungen zusammen mit ihren Abhängigkeiten in isolierte und selbstkonsistente Einheiten, sogenannte Container, zu verpacken und zu verteilen.

Was ist Docker?

Docker ist eine Softwareplattform, die es Ihnen ermöglicht, Anwendungen innerhalb von Containern zu erstellen, bereitzustellen und auszuführen. Container sind leichte, portablen und selbstkonsistente Umgebungen, die alles enthalten, was eine Anwendung zum Ausführen benötigt, wie z. B. Code, Laufzeitumgebung, Systemtools und Bibliotheken. Dieser Ansatz stellt sicher, dass die Anwendung in verschiedenen Computing-Umgebungen, vom Laptop eines Entwicklers bis zu einem Produktionsserver, konsistent läuft.

Vorteile von Docker und Containerisierung

  • Konsistenz: Container stellen sicher, dass Anwendungen unabhängig von der zugrunde liegenden Infrastruktur auf dieselbe Weise ausgeführt werden.
  • Skalierbarkeit: Container lassen sich leicht skalieren, um der sich ändernden Nachfrage gerecht zu werden.
  • Effizienz: Container sind leichtgewichtig und nutzen Ressourcen effizienter als herkömmliche virtuelle Maschinen.
  • Portabilität: Container können zwischen verschiedenen Computing-Umgebungen verschoben werden, z. B. vom Rechner eines Entwicklers zu einem Produktionsserver.
  • Isolation: Container bieten ein hohes Maß an Isolation, um sicherzustellen, dass die Prozesse eines Containers nicht in die Prozesse eines anderen Containers eingreifen.

Docker-Architektur und Komponenten

Die Docker-Architektur besteht aus mehreren wichtigen Komponenten:

  • Docker Engine: Die Kernlaufzeitumgebung, die Container verwaltet.
  • Docker Images: Blaupausen zur Erstellung von Containern, die die notwendigen Dateien, Bibliotheken und Abhängigkeiten enthalten.
  • Docker Container: Instanzen von Docker-Images, die Anwendungen ausführen.
  • Docker Registry: Ein Repository zum Speichern und Verteilen von Docker-Images.
graph TD A[Docker Engine] --> B[Docker Images] A --> C[Docker Container] A --> D[Docker Registry]

Anwendungsfälle für Docker

Docker wird in verschiedenen Branchen und Szenarien häufig verwendet, wie z. B.:

  • Webanwendungen: Bereitstellung und Skalierung von Webanwendungen in verschiedenen Umgebungen.
  • Microservices: Erstellung und Verwaltung komplexer, verteilter Anwendungen, die aus kleinen, unabhängigen Diensten bestehen.
  • Continuous Integration und Deployment: Automatisierung des Buildens, Testens und Bereitstellens von Anwendungen.
  • Maschinelles Lernen und Data Science: Verpackung und Bereitstellung von Machine-Learning-Modellen und Datenverarbeitungspipelines.
  • IoT und Edge Computing: Bereitstellung von Anwendungen und Diensten am Rande des Netzwerks.

Durch das Verständnis der Grundlagen von Docker und Containerisierung können Sie diese leistungsstarken Tools nutzen, um Ihre Prozesse der Anwendungsentwicklung, -bereitstellung und -verwaltung zu optimieren.

Verständnis der Docker-Architektur und -Komponenten

Docker Engine

Die Docker Engine ist die zentrale Laufzeitumgebung, die das gesamte Docker-Ökosystem antreibt. Sie ist verantwortlich für die Verwaltung des Lebenszyklus von Docker-Containern, einschließlich des Erstellens, Ausführens und Überwachens. Die Docker Engine besteht aus folgenden Schlüsselkomponenten:

  • Docker Daemon: Der Hintergrundprozess, der Docker-Objekte wie Images, Container, Netzwerke und Volumes verwaltet.
  • Docker API: Die API, die Programme und Tools verwenden, um mit dem Docker Daemon zu interagieren.
  • Docker CLI: Die Befehlszeilenschnittstelle, die Benutzern die Interaktion mit dem Docker Daemon ermöglicht.

Docker Images

Docker Images sind die Blaupausen zur Erstellung von Docker Containern. Sie enthalten die notwendigen Dateien, Bibliotheken und Abhängigkeiten, die zum Ausführen einer Anwendung erforderlich sind. Docker Images werden mithilfe einer Dockerfile erstellt, einer textbasierten Skriptdatei, die die Schritte zur Erstellung des Images definiert.

Hier ist ein Beispiel für eine Dockerfile:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Diese Dockerfile erstellt ein neues Image basierend auf dem Ubuntu 22.04 Basis-Image, installiert den Nginx Webserver, kopiert eine index.html-Datei in den Container, exponiert Port 80 und setzt den Standardbefehl zum Starten des Nginx Servers.

Docker Container

Docker Container sind Instanzen von Docker Images. Sie sind die laufenden, isolierten Umgebungen, die Anwendungen ausführen. Container sind leichtgewichtig und portabel, da sie die Anwendung und ihre Abhängigkeiten in einer einzigen, selbstkonsistenten Einheit verpacken.

Sie können einen neuen Container mithilfe des Befehls docker run erstellen und ausführen:

docker run -d -p 80:80 --name my-nginx nginx

Dieser Befehl erstellt einen neuen Container basierend auf dem Nginx Image, ordnet Port 80 des Hosts Port 80 im Container zu und startet den Container im detachierten Modus.

Docker Registry

Der Docker Registry ist ein Repository zum Speichern und Verteilen von Docker Images. Er ermöglicht das Hochladen, Herunterladen und Teilen von Docker Images mit anderen. Der beliebteste öffentliche Docker Registry ist Docker Hub, aber Sie können auch Ihren eigenen privaten Registry einrichten.

Durch das Verständnis der Schlüsselkomponenten der Docker-Architektur können Sie Ihre containerisierten Anwendungen effektiv erstellen, bereitstellen und verwalten.

Installieren und Konfigurieren von Docker auf Ihrem System

Installieren von Docker unter Ubuntu 22.04

Um Docker auf einem Ubuntu 22.04 System zu installieren, folgen Sie diesen Schritten:

  1. Aktualisieren Sie das Paketindex und installieren Sie die notwendigen Abhängigkeiten:

    sudo apt-get update
    sudo apt-get install -y \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
  2. Fügen Sie den offiziellen Docker GPG-Schlüssel hinzu und fügen Sie das Docker Repository hinzu:

    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  3. Installieren Sie die Docker Engine, containerd und Docker Compose Pakete:

    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  4. Überprüfen Sie die Installation, indem Sie den Befehl docker version ausführen:

    sudo docker version

Konfigurieren von Docker

Nach der Installation von Docker können Sie es an Ihre Bedürfnisse anpassen. Hier sind einige gängige Konfigurationsschritte:

Verwalten von Docker als Nicht-Root-Benutzer

Standardmäßig läuft der Docker Daemon als Root-Benutzer. Um Nicht-Root-Benutzern das Ausführen von Docker-Befehlen zu ermöglichen, können Sie sie zur Gruppe docker hinzufügen:

sudo usermod -aG docker $USER
newgrp docker

Konfigurieren von Docker Daemon Optionen

Sie können das Verhalten des Docker Daemons anpassen, indem Sie die Datei /etc/docker/daemon.json bearbeiten. Beispielsweise, um den Standard-Log-Treiber zu ändern:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}

Aktivieren von Docker Compose

Docker Compose ist ein Werkzeug zum Definieren und Ausführen von Multi-Container-Anwendungen. Es ist als Teil der Docker-Installation installiert, aber möglicherweise müssen Sie es manuell aktivieren:

sudo systemctl enable docker-compose-plugin

Mit diesen Schritten können Sie Docker erfolgreich auf Ihrem Ubuntu 22.04 System installieren und konfigurieren und die Grundlage für die Arbeit mit Docker und Docker Compose legen.

Erste Schritte mit Docker Compose

Was ist Docker Compose?

Docker Compose ist ein Werkzeug zum Definieren und Ausführen von Multi-Container-Docker-Anwendungen. Es ermöglicht Ihnen, eine YAML-Datei zu erstellen, die die Services, Netzwerke und Volumes Ihrer Anwendung beschreibt, und dann mit einem einzigen Befehl alle Services zu starten, zu stoppen und zu verwalten.

Installieren von Docker Compose

Docker Compose ist Teil der Docker-Installation unter Ubuntu 22.04. Sie können die Installation mit folgendem Befehl überprüfen:

docker-compose version

Erstellen einer Docker Compose Datei

Eine Docker Compose Datei ist eine YAML-Datei, die die Services, Netzwerke und Volumes Ihrer Anwendung definiert. Hier ist ein Beispiel für eine docker-compose.yml-Datei, die eine einfache Webanwendung mit einem Nginx Webserver und einer MySQL Datenbank definiert:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

Diese Datei definiert zwei Services: web und db. Der web-Service verwendet das neueste Nginx-Image, exponiert Port 80 und mount einen lokalen html-Ordner auf den Nginx Dokumenten-Root. Der db-Service verwendet das MySQL 5.7-Image, setzt das Root-Passwort und mount ein benanntes Volume für die MySQL-Daten.

Verwalten von Docker Compose Anwendungen

Sie können den Befehl docker-compose verwenden, um Ihre Docker Compose Anwendung zu verwalten. Hier sind einige gängige Befehle:

  • docker-compose up -d: Starten Sie die Anwendung im detachierten Modus.
  • docker-compose down: Stoppen und entfernen Sie die Anwendung.
  • docker-compose ps: Listen Sie die laufenden Services auf.
  • docker-compose logs: Zeigen Sie die Logs der Anwendung an.
  • docker-compose scale web=3: Skalieren Sie den web-Service auf 3 Instanzen.

Mit Docker Compose können Sie Multi-Container-Anwendungen einfach definieren, bereitstellen und verwalten, was es zu einem leistungsstarken Werkzeug zur Optimierung Ihrer Docker-Workflows macht.

Definieren und Konfigurieren von Multi-Container-Anwendungen

Definieren von Services in Docker Compose

In einer Docker Compose Datei definieren Sie die Services Ihrer Anwendung, die die einzelnen Container darstellen, aus denen Ihre Anwendung besteht. Jeder Service verfügt über eine eigene Konfiguration, wie z. B. das zu verwendende Docker-Image, Umgebungsvariablen, zu exportierende Ports und zu mountende Volumes.

Hier ist ein Beispiel für eine Docker Compose Datei mit mehreren Services:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
volumes:
  mysql-data:

Diese Datei definiert drei Services: web, db und redis. Jeder Service hat seine eigene Konfiguration, wie z. B. das zu verwendende Docker-Image, die zu exportierenden Ports und die zu mountenden Volumes.

Konfigurieren von Service-Abhängigkeiten

Sie können Abhängigkeiten zwischen Services mithilfe der depends_on-Direktive in der Docker Compose Datei definieren. Dies stellt sicher, dass Services in der richtigen Reihenfolge gestartet werden und dass Abhängigkeiten erfüllt sind, bevor ein Service gestartet wird.

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

In diesem Beispiel ist der web-Service vom db-Service abhängig, sodass die Datenbank vor dem Webserver gestartet wird.

Konfigurieren von Netzwerken und Volumes

Neben der Definition von Services können Sie auch Netzwerke und Volumes in Ihrer Docker Compose Datei konfigurieren. Netzwerke ermöglichen die Kommunikation zwischen Ihren Services, während Volumes persistente Speichermöglichkeiten für Ihre Anwendungsdaten bieten.

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - backend
volumes:
  mysql-data:
networks:
  frontend:
  backend:

In diesem Beispiel ist der web-Service mit dem frontend-Netzwerk und der db-Service mit dem backend-Netzwerk verbunden. Dies ermöglicht die Kommunikation zwischen dem Webserver und der Datenbank, ohne die Datenbank direkt öffentlich zugänglich zu machen.

Durch das Verständnis der Definition und Konfiguration von Multi-Container-Anwendungen mit Docker Compose können Sie komplexe, skalierbare und wartungsfreundliche Anwendungen mühelos erstellen.

Bereitstellen und Verwalten von Docker Containern mit Compose

Bereitstellen einer Docker Compose Anwendung

Um eine Docker Compose Anwendung bereitzustellen, können Sie den Befehl docker-compose up verwenden. Dieser Befehl liest die Docker Compose Datei, erstellt die notwendigen Netzwerke und Volumes und startet die angegebenen Services.

docker-compose up -d

Das Flag -d führt die Container im detachierten Modus aus, d.h. sie laufen im Hintergrund.

Verwalten von Docker Compose Containern

Sobald Ihre Docker Compose Anwendung läuft, können Sie die folgenden Befehle verwenden, um die Container zu verwalten:

  • docker-compose ps: Listet die laufenden Container auf.
  • docker-compose logs: Zeigt die Logs der Container an.
  • docker-compose stop: Stoppt die laufenden Container.
  • docker-compose start: Startet die gestoppten Container.
  • docker-compose down: Stoppt und entfernt die Container, Netzwerke und Volumes.

Um beispielsweise die Logs für den Service web anzuzeigen:

docker-compose logs web

Skalieren von Docker Compose Services

Docker Compose vereinfacht das Skalieren Ihrer Services nach oben oder unten. Sie können den Befehl docker-compose scale verwenden, um die Anzahl der Instanzen für einen bestimmten Service zu ändern.

docker-compose scale web=3

Dieser Befehl skaliert den Service web auf 3 Instanzen.

Aktualisieren von Docker Compose Anwendungen

Wenn Sie Ihre Docker Compose Anwendung aktualisieren müssen, können Sie Änderungen an der Docker Compose Datei vornehmen und dann den Befehl docker-compose up verwenden, um die Änderungen anzuwenden.

## Aktualisieren Sie die Docker Compose Datei
vim docker-compose.yml

## Anwenden der Änderungen
docker-compose up -d

Docker Compose zieht automatisch die neuen Images, erstellt neue Container und aktualisiert die laufende Anwendung.

Durch die Nutzung der Leistungsfähigkeit von Docker Compose können Sie Ihre Multi-Container-Anwendungen einfach bereitstellen, verwalten und skalieren, wodurch der Entwicklungs- und Bereitstellungsprozess effizienter und zuverlässiger wird.

Skalieren und Vernetzen von Docker Containern

Skalieren von Docker Containern

Ein wichtiger Vorteil der Verwendung von Docker ist die einfache Skalierung Ihrer Anwendungen nach oben oder unten, um der sich ändernden Nachfrage gerecht zu werden. Docker Compose vereinfacht diesen Prozess durch den Befehl scale.

Um einen Service in Ihrer Docker Compose Anwendung zu skalieren, können Sie den folgenden Befehl verwenden:

docker-compose scale web=3

Dies skaliert den Service web auf 3 Instanzen. Sie können jeden Service in Ihrer Anwendung skalieren, indem Sie web durch den Namen des Services ersetzen, den Sie skalieren möchten.

Vernetzen von Docker Containern

Docker Compose erstellt automatisch ein Standardnetzwerk für Ihre Anwendung, aber Sie können auch benutzerdefinierte Netzwerke definieren, um die Kommunikation Ihrer Services untereinander zu steuern.

Hier ist ein Beispiel für eine Docker Compose Datei, die zwei benutzerdefinierte Netzwerke, frontend und backend, definiert:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - frontend
  app:
    image: myapp:latest
    networks:
      - frontend
      - backend
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    networks:
      - backend
networks:
  frontend:
  backend:

In diesem Beispiel sind die Services web und app mit dem Netzwerk frontend verbunden, während die Services app und db mit dem Netzwerk backend verbunden sind. Dies ermöglicht die Kommunikation des Webservers mit der Anwendung und der Anwendung mit der Datenbank, ohne die Datenbank direkt öffentlich zugänglich zu machen.

Sie können auch netzwerkbezogene Einstellungen wie IP-Adressbereiche und DNS-Einstellungen mithilfe des Abschnitts networks der Docker Compose Datei konfigurieren.

Durch das Verständnis des Skalierens und Vernetzens Ihrer Docker Container können Sie hochverfügbare, skalierbare und sichere Anwendungen erstellen, die sich an sich ändernde Anforderungen und Bedürfnisse anpassen können.

Best Practices für die Docker-Bereitstellung und -Wartung

Docker-Images optimieren

  • Verwenden Sie ein minimales Basis-Image (z. B. alpine oder scratch), um die Größe des Images und die Angriffsfläche zu reduzieren.
  • Nutzen Sie mehrstufige Builds, um die Größe des endgültigen Images zu optimieren.
  • Halten Sie die Images aktuell, indem Sie das Basis-Image und die Abhängigkeiten regelmäßig aktualisieren.
  • Verwenden Sie ein Werkzeug wie dive, um Ihre Docker-Images zu analysieren und zu optimieren.

Sichere Praktiken implementieren

  • Verwenden Sie einen vertrauenswürdigen, offiziellen Docker-Registry (z. B. Docker Hub), um Images herunterzuladen.
  • Scannen Sie Images auf Sicherheitslücken mit Tools wie Snyk oder Trivy.
  • Wenden Sie das Prinzip der geringstmöglichen Rechte an, indem Sie Container als Nicht-Root-Benutzer ausführen.
  • Aktivieren Sie Docker Content Trust, um die Integrität und Authentizität von Images zu überprüfen.
  • Konfigurieren Sie die Docker-Daemon- und Container-Sicherheitseinstellungen gemäß den Best Practices.

Den Build- und Deployment-Prozess automatisieren

  • Verwenden Sie ein Continuous-Integration (CI)-Tool wie LabEx, um den Build, die Tests und die Bereitstellung Ihrer Docker-Anwendungen zu automatisieren.
  • Implementieren Sie einen GitOps-Workflow, indem Sie Ihre Docker Compose-Dateien in einem Versionskontrollsystem speichern.
  • Verwenden Sie umgebungsspezifische Konfigurationsdateien oder Umgebungsvariablen, um verschiedene Bereitstellungsumgebungen zu verwalten.

Docker-Umgebungen überwachen und warten

  • Richten Sie Logging und Monitoring für Ihre Docker-Container und Hosts ein.
  • Verwenden Sie Tools wie Prometheus, Grafana oder LabEx, um Container- und Systemmetriken zu überwachen.
  • Überprüfen und aktualisieren Sie Ihre Docker Compose-Dateien und Containerkonfigurationen regelmäßig.
  • Implementieren Sie einen Prozess zur fehlertoleranten Behandlung von Container-Ausfällen und Neustarts.

Docker-Ökosystem-Tools nutzen

  • Verwenden Sie Docker Swarm oder Kubernetes, um Docker-Container im großen Maßstab zu orchestrieren und zu verwalten.
  • Entdecken Sie Tools wie Docker Secrets, Docker Volumes und Docker Networks, um Ihre Docker-Bereitstellungen zu verbessern.
  • Integrieren Sie LabEx oder andere DevOps-Plattformen, um Ihre Docker-basierten Workflows zu optimieren.

Durch die Einhaltung dieser Best Practices stellen Sie sicher, dass Ihre Docker-Bereitstellungen sicher, effizient und wartbar sind, und helfen Ihnen, die Docker-Plattform optimal zu nutzen.

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie Docker-Container mithilfe des Tools docker-compose schnell bereitstellen können. Sie haben die Docker-Architektur erkundet, Docker installiert und konfiguriert und die Kunst der Definition und Konfiguration von Multi-Container-Anwendungen gemeistert. Durch die Nutzung der Leistungsfähigkeit von "docker-compose up -d" können Sie nun Ihre Docker-Umgebungen einfach bereitstellen und verwalten, Ihre Anwendungen skalieren und eine optimale Netzwerkverbindung gewährleisten. Mit den in diesem Tutorial erlangten Kenntnissen sind Sie bestens gerüstet, Ihren Docker-Bereitstellungsprozess zu optimieren und Ihre Containerisierung weiterzuentwickeln.