Schnelles Einrichten eines Docker-Container-Servers

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses Tutorial führt Sie durch den Prozess der schnellen Einrichtung eines besten Docker-Containers und eines laufenden Servers. Sie erfahren, wie Sie Docker installieren, Docker-Container erstellen und verwalten, Netzwerke und Skalierung konfigurieren und Probleme in Ihrer Docker-Umgebung beheben. Am Ende dieses Tutorials werden Sie Docker gut verstehen und in der Lage sein, einen robusten und skalierbaren Docker-Container-Server einzurichten.

Docker verstehen und seine Vorteile kennen

Docker ist eine leistungsstarke Containerisierungstechnologie (Containerisierungsportal), die die Art und Weise revolutioniert hat, wie Anwendungen entwickelt, bereitgestellt und verwaltet werden. Es bietet eine standardisierte und konsistente Methode zur Verpackung und Verteilung von Software, was es einfacher macht, Anwendungen in verschiedenen Umgebungen zu entwickeln, zu verteilen und auszuführen.

Was ist Docker?

Docker ist eine Open-Source-Softwareplattform, die es Entwicklern ermöglicht, Anwendungen in Containern zu entwickeln, bereitzustellen und auszuführen. Ein Container ist ein leichtgewichtiges, eigenständiges und ausführbares Paket, das alles enthält, was zur Ausführung einer Anwendung erforderlich ist, einschließlich des Codes, der Laufzeitumgebung, der Systemwerkzeuge und der Bibliotheken.

Vorteile von Docker

  1. Konsistenz: Docker-Container stellen sicher, dass Anwendungen unabhängig von der zugrunde liegenden Infrastruktur auf die gleiche Weise ausgeführt werden, was eine konsistente und vorhersagbare Umgebung bietet.
  2. Portabilität: Docker-Container können problemlos zwischen verschiedenen Plattformen verschoben und bereitgestellt werden, von einem Entwicklerlaptop bis hin zu einem Produktionsserver, ohne dass komplexe Konfigurationsänderungen erforderlich sind.
  3. Skalierbarkeit: Docker erleichtert die Skalierung von Anwendungen nach oben oder unten, indem Container bei Bedarf schnell erstellt und zerstört werden, was eine effiziente Ressourcennutzung ermöglicht.
  4. Isolation: Docker-Container bieten ein hohes Maß an Isolation, wodurch sichergestellt wird, dass Anwendungen und ihre Abhängigkeiten vom Hostsystem und voneinander isoliert sind, was das Risiko von Konflikten und Sicherheitslücken verringert.
  5. Effizienz: Docker-Container sind leichtgewichtig und verbrauchen weniger Ressourcen als traditionelle virtuelle Maschinen, was eine effizientere Nutzung der Hardware und schnellere Startzeiten ermöglicht.

Docker-Architektur

Docker verwendet eine Client-Server-Architektur, bei der der Docker-Client mit dem Docker-Daemon kommuniziert, der für die Verwaltung von Containern, Images und anderen Docker-Ressourcen verantwortlich ist. Der Docker-Daemon kann auf demselben Computer wie der Client oder auf einem Remote-Computer ausgeführt werden.

graph LR A[Docker Client] -- Commands --> B[Docker Daemon] B -- Manages --> C[Docker Images] B -- Manages --> D[Docker Containers] B -- Manages --> E[Docker Volumes] B -- Manages --> F[Docker Networks]

Anwendungsfälle für Docker

Docker wird in verschiedenen Branchen und Szenarien weit verbreitet eingesetzt, darunter:

  1. Microservices: Docker eignet sich besonders gut für die Entwicklung und Bereitstellung von Anwendungen auf Microservices-Basis, bei denen jeder Dienst als separater Container verpackt und bereitgestellt werden kann.
  2. Kontinuierliche Integration und Bereitstellung: Docker ermöglicht eine nahtlose Integration in CI/CD-Pipelines, was die automatisierte Entwicklung, das Testen und die Bereitstellung von Anwendungen ermöglicht.
  3. Cloud- und serverlose Computing: Docker-Container können einfach auf Cloud-Plattformen bereitgestellt und skaliert werden, was effiziente und kostengünstige cloudbasierte Anwendungen ermöglicht.
  4. Entwicklerproduktivität: Docker vereinfacht den Entwicklungsprozess und das Testen, indem es eine konsistente und reproduzierbare Umgebung bietet, wodurch das Problem „Es funktioniert auf meinem Rechner“ verringert wird.

Indem Sie die Grundlagen von Docker und seine Vorteile verstehen, können Sie die Macht der Containerisierung nutzen, um Ihre Anwendungsentwicklung und -bereitstellungsprozesse zu optimieren.

Installation von Docker auf Ihrem Betriebssystem

Installation von Docker auf Ubuntu 22.04

Um Docker auf Ubuntu 22.04 zu installieren, befolgen Sie diese Schritte:

  1. Aktualisieren Sie den Paketindex und installieren Sie die erforderlichen Abhängigkeiten:
sudo apt-get update
sudo apt-get install -y \
  ca-certificates \
  curl \
  gnupg \
  lsb-release
  1. Fügen Sie den offiziellen Docker-GPG-Schlüssel 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
  1. Richten Sie das Docker-Repository ein:
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
  1. Installieren Sie die Docker Engine, containerd und die Docker Compose-Pakete:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Überprüfen Sie die Installation, indem Sie den folgenden Befehl ausführen:
sudo docker run hello-world

Dieser Befehl lädt ein Testimage herunter und führt es in einem Container aus, um zu überprüfen, ob Ihre Docker-Installation ordnungsgemäß funktioniert.

Verwaltung von Docker als Nicht-Root-Benutzer

Standardmäßig wird der Docker-Daemon als Root-Benutzer ausgeführt, was ein Sicherheitsrisiko darstellen kann. Um Docker als Nicht-Root-Benutzer zu verwalten, befolgen Sie diese Schritte:

  1. Erstellen Sie die Docker-Gruppe:
sudo groupadd docker
  1. Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu:
sudo usermod -aG docker $USER
  1. Melden Sie sich ab und wieder an, damit die Änderungen wirksam werden.

  2. Überprüfen Sie, dass Sie Docker-Befehle ohne sudo ausführen können:

docker run hello-world

Nun können Sie Docker als Nicht-Root-Benutzer verwalten, was die Gesamt-Sicherheit Ihres Systems verbessert.

Erstellen und Ausführen eines Docker-Containers

Docker-Images und -Container verstehen

Docker-Images sind die Grundlage für die Erstellung von Docker-Containern. Ein Image ist eine schreibgeschützte Vorlage, die die Anweisungen zur Erstellung eines Docker-Containers enthält. Wenn Sie ein Docker-Image ausführen, wird ein Container erstellt, der eine ausführbare Instanz des Images ist.

Erstellen eines Docker-Containers

Um einen Docker-Container zu erstellen, können Sie den Befehl docker run verwenden. Die grundlegende Syntax lautet:

docker run [options] image [command] [arguments]

Hier ist ein Beispiel für die Erstellung eines Containers basierend auf dem nginx:latest-Image und das Ausführen des Nginx-Webservers:

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

Lassen Sie uns den Befehl analysieren:

  • -d: Führt den Container im detached-Modus (im Hintergrund) aus.
  • -p 80:80: Ordnet den Port 80 des Hosts dem Port 80 des Containers zu.
  • --name my-nginx: Weist dem Container den Namen "my-nginx" zu.
  • nginx:latest: Das Image, das zur Erstellung des Containers verwendet werden soll.

Interaktion mit Docker-Containern

Sobald der Container läuft, können Sie mit ihm mithilfe verschiedener Docker-Befehle interagieren:

  • docker ps: Listet alle laufenden Container auf.
  • docker stop my-nginx: Stoppt den Container "my-nginx".
  • docker start my-nginx: Startet den Container "my-nginx".
  • docker logs my-nginx: Zeigt die Logs des Containers "my-nginx" an.
  • docker exec -it my-nginx bash: Greift in den Container "my-nginx" ein und öffnet eine Bash-Shell.

Erstellen benutzerdefinierter Docker-Images

Sie können auch Ihre eigenen benutzerdefinierten Docker-Images mithilfe einer Dockerfile erstellen. Eine Dockerfile ist eine Textdatei, die die Anweisungen zur Erstellung eines Docker-Images enthält. Hier ist ein Beispiel für eine Dockerfile, die ein benutzerdefiniertes Nginx-Image mit einer benutzerdefinierten HTML-Seite erstellt:

FROM nginx:latest
COPY index.html /usr/share/nginx/html/

Sie können dann das Image erstellen und einen Container basierend auf ihm ausführen:

docker build -t my-custom-nginx .
docker run -d -p 80:80 --name my-custom-nginx my-custom-nginx

Indem Sie die Grundlagen der Erstellung und des Ausführens von Docker-Containern verstehen, können Sie beginnen, Ihre eigenen Anwendungen mithilfe der Macht der Containerisierung zu entwickeln und bereitzustellen.

Konfigurieren und Verwalten von Docker-Containern

Konfigurieren von Docker-Containern

Beim Erstellen eines Docker-Containers können Sie verschiedene Konfigurationsoptionen angeben, um sein Verhalten anzupassen. Einige häufige Konfigurationsoptionen sind:

  • Ports: Zuordnung von Host-Ports zu Container-Ports mit der Option -p oder --publish.
  • Umgebungsvariablen: Festlegen von Umgebungsvariablen mit der Option -e oder --env.
  • Volumes: Einbinden von Host-Verzeichnissen oder -Dateien in den Container mit der Option -v oder --volume.
  • Netzwerk: Verbinden des Containers mit einem bestimmten Netzwerk mit der Option --network.
  • Ressourcenbeschränkungen: Begrenzen der Menge an Ressourcen (CPU, Arbeitsspeicher usw.), die ein Container nutzen kann.

Hier ist ein Beispiel für die Erstellung eines Containers mit einigen Konfigurationsoptionen:

docker run -d -p 8080:80 -e DB_HOST=192.168.1.100 -v /host/path:/container/path --network my-network nginx:latest

Verwalten von Docker-Containern

Sobald ein Container läuft, können Sie verschiedene Docker-Befehle verwenden, um ihn zu verwalten:

  • docker ps: Listet alle laufenden Container auf.
  • docker stop <container_name>: Stoppt einen laufenden Container.
  • docker start <container_name>: Startet einen gestoppten Container.
  • docker restart <container_name>: Startet einen laufenden Container neu.
  • docker rm <container_name>: Entfernt einen gestoppten Container.
  • docker logs <container_name>: Zeigt die Logs eines Containers an.
  • docker exec -it <container_name> <command>: Führt einen Befehl innerhalb eines laufenden Containers aus.

Verwaltung des Container-Lebenszyklus

Docker-Container haben einen Lebenszyklus, der die folgenden Zustände umfasst:

  1. Erstellt: Der Container wurde erstellt, aber noch nicht gestartet.
  2. Läuft: Der Container ist derzeit aktiv.
  3. Angehalten: Die Prozesse des Containers wurden angehalten.
  4. Gestoppt: Der Container wurde beendet.
  5. Gelöscht: Der Container wurde entfernt.

Sie können verschiedene Docker-Befehle verwenden, um den Lebenszyklus Ihrer Container zu verwalten, wie z. B. docker start, docker stop, docker pause und docker rm.

Container-Netzwerk

Docker bietet mehrere Netzwerkoptionen für die Verbindung von Containern, darunter:

  • Bridge-Netzwerk: Der Standard-Netzwerkmodus, bei dem Container an ein virtuelles Bridge-Netzwerk angeschlossen werden.
  • Host-Netzwerk: Container teilen sich den gleichen Netzwerkstapel wie das Host-System.
  • Overlay-Netzwerk: Ein Multi-Host-Netzwerk, das es Containern ermöglicht, die auf verschiedenen Docker-Hosts laufen, miteinander zu kommunizieren.

Sie können Docker-Netzwerke mit dem Befehl docker network erstellen und verwalten.

Indem Sie verstehen, wie Sie Docker-Container konfigurieren und verwalten, können Sie Ihre Anwendungen effektiv in einer containerisierten Umgebung bereitstellen und warten.

Erstellen und Teilen von Docker-Images

Erstellen von Docker-Images

Um ein benutzerdefiniertes Docker-Image zu erstellen, können Sie den Befehl docker build und eine Dockerfile verwenden. Eine Dockerfile ist eine Textdatei, die die Anweisungen zur Erstellung eines Docker-Images enthält.

Hier ist ein Beispiel für eine Dockerfile, die ein benutzerdefiniertes Nginx-Image mit einer benutzerdefinierten HTML-Seite erstellt:

FROM nginx:latest
COPY index.html /usr/share/nginx/html/

Sie können dann das Image mit dem folgenden Befehl erstellen:

docker build -t my-custom-nginx .

Dieser Befehl erstellt ein neues Docker-Image mit dem Namen "my-custom-nginx" basierend auf den Anweisungen in der Dockerfile.

Taggen und Pushen von Docker-Images

Sobald Sie ein Docker-Image erstellt haben, können Sie es mit einer bestimmten Version oder einem Label taggen. Dies ermöglicht es Ihnen, verschiedene Versionen Ihrer Images zu verwalten und zu verfolgen.

Um ein Image zu taggen, verwenden Sie den Befehl docker tag:

docker tag my-custom-nginx:latest my-custom-nginx:v1.0

Dadurch wird ein neues Tag "v1.0" für das "my-custom-nginx"-Image erstellt.

Um Ihr Docker-Image mit anderen zu teilen, können Sie es in eine Docker-Registrierung (Registry), wie z. B. Docker Hub oder eine private Registrierung, pushen. Bevor Sie pushen, müssen Sie sich mit der Registrierung mithilfe des Befehls docker login authentifizieren.

docker login
docker push my-custom-nginx:v1.0

Dadurch wird das "my-custom-nginx:v1.0"-Image in die Docker-Registrierung gepusht.

Verwenden von Docker Hub

Docker Hub ist die offizielle öffentliche Registrierung für Docker-Images. Sie können Docker Hub verwenden, um vorhandene Images zu finden und herunterzuladen (pullen), sowie um Ihre eigenen benutzerdefinierten Images zu hosten und zu teilen.

Um nach einem Image auf Docker Hub zu suchen, können Sie den Befehl docker search verwenden:

docker search nginx

Um ein Image von Docker Hub herunterzuladen, verwenden Sie den Befehl docker pull:

docker pull nginx:latest

Wenn Sie Ihre eigenen Docker-Images haben, können Sie ein Docker Hub-Konto erstellen und Ihre Images in die Registrierung pushen, damit andere sie verwenden können.

Indem Sie verstehen, wie Sie Docker-Images erstellen, taggen und teilen, können Sie Ihre eigenen benutzerdefinierten Anwendungen und Dienste mithilfe der Macht der Containerisierung erstellen und verteilen.

Netzwerke und Verbinden von Docker-Containern

Docker-Netzwerk-Treiber

Docker bietet mehrere Netzwerk-Treiber (Network Driver), um Container zu verbinden:

  1. Bridge-Netzwerk: Der Standard-Netzwerk-Treiber, der eine virtuelle Brücke auf dem Host erstellt und Container damit verbindet.
  2. Host-Netzwerk: Container teilen sich den gleichen Netzwerkstapel wie das Host-System.
  3. Overlay-Netzwerk: Ein Multi-Host-Netzwerk, das es Containern ermöglicht, die auf verschiedenen Docker-Hosts laufen, miteinander zu kommunizieren.
  4. Macvlan-Netzwerk: Containern wird eine MAC-Adresse zugewiesen und sie können direkt im Netzwerk angesprochen werden.
  5. Netzwerk-Plugin: Dritte Netzwerk-Plugins, wie z. B. Calico, Flannel oder Weave, können verwendet werden, um erweiterte Netzwerkfunktionen bereitzustellen.

Verbinden von Containern

Um Container zu verbinden, können Sie die folgenden Methoden verwenden:

  1. Verknüpfen von Containern: Die veraltete Option --link kann verwendet werden, um Container anhand ihres Namens zu verbinden, sodass ein Container auf die Umgebungsvariablen eines anderen zugreifen kann.
  2. Benutzerdefinierte Netzwerke: Erstellen Sie ein benutzerdefiniertes Netzwerk mit dem Befehl docker network create und verbinden Sie dann Container damit mithilfe der Option --network.
  3. Service Discovery: Wenn Sie Docker Swarm oder Kubernetes verwenden, können Container sich mithilfe integrierter Service Discovery-Mechanismen finden und miteinander kommunizieren.

Hier ist ein Beispiel für die Erstellung eines benutzerdefinierten Bridge-Netzwerks und das Verbinden von zwei Containern:

## Create a custom network
docker network create my-network

## Run two containers and connect them to the custom network
docker run -d --name web --network my-network nginx:latest
docker run -d --name app --network my-network my-custom-app:latest

Nun können die Container "web" und "app" innerhalb des Netzwerks "my-network" über ihre Containernamen miteinander kommunizieren.

Netzwerkkonfiguration

Sie können verschiedene Netzwerkeinstellungen für Ihre Container konfigurieren, wie z. B.:

  • IP-Adressen: Weisen Sie einem Container eine bestimmte IP-Adresse mit den Optionen --ip oder --ip6 zu.
  • DNS-Server: Legen Sie die DNS-Server für einen Container mit der Option --dns fest.
  • Portzuordnung: Ordnen Sie Host-Ports zu Container-Ports mit den Optionen -p oder --publish zu.

Indem Sie die Netzwerkfunktionen von Docker verstehen, können Sie Ihre containerisierten Anwendungen effektiv verbinden und miteinander kommunizieren, was komplexere und skalierbare Bereitstellungen ermöglicht.

Skalieren und Lastenausgleich bei Docker-Bereitstellungen

Skalieren von Docker-Containern

Mit Docker können Sie Ihre Anwendungen einfach skalieren, indem Sie bei Bedarf Container hinzufügen oder entfernen. Es gibt mehrere Möglichkeiten, Docker-Container zu skalieren:

  1. Manuelles Skalieren: Sie können Container manuell mit den Befehlen docker run und docker rm erstellen oder entfernen.
  2. Automatisiertes Skalieren: Tools wie Docker Swarm, Kubernetes oder Drittanbieter-Orchestrierungsplattformen können Ihre Container automatisch basierend auf vordefinierten Regeln oder Metriken skalieren.
  3. Horizontales Skalieren: Sie können Ihre Anwendung skalieren, indem Sie mehr Container-Instanzen hinzufügen und die Last auf mehrere Hosts verteilen.
  4. Vertikales Skalieren: Sie können Ihre Anwendung skalieren, indem Sie die Ressourcen (CPU, Arbeitsspeicher usw.), die jedem Container zugewiesen sind, erhöhen.

Lastenausgleich bei Docker-Containern

Um den eingehenden Datenverkehr auf mehrere Docker-Container zu verteilen, können Sie Lastenausgleichslösungen verwenden. Hier sind einige Optionen:

  1. Lastenausgleich in Docker Swarm: Docker Swarm verfügt über integrierte Lastenausgleichsfunktionen, die es Ihnen ermöglichen, einen Dienst zu erstellen, der den Datenverkehr automatisch auf mehrere Container-Instanzen verteilt.
graph LR A[Docker Swarm] -- Lastenausgleich --> B[Container 1] A -- Lastenausgleich --> C[Container 2] A -- Lastenausgleich --> D[Container 3]
  1. Lastenausgleich in Kubernetes: Kubernetes bietet verschiedene Lastenausgleichsoptionen, wie z. B. das integrierte Service-Objekt, das den Datenverkehr auf mehrere Container-Pods verteilen kann.

  2. Drittanbieter-Lastenausgleicher: Sie können externe Lastenausgleicher wie Nginx, HAProxy oder cloudbasierte Lastenausgleicher (z. B. AWS Elastic Load Balancing, Azure Load Balancer) verwenden, um den Datenverkehr auf Ihre Docker-Container zu verteilen.

graph LR A[Lastenausgleicher] -- Lastenausgleich --> B[Container 1] A -- Lastenausgleich --> C[Container 2] A -- Lastenausgleich --> D[Container 3]

Indem Sie verstehen, wie Sie Ihre Docker-Bereitstellungen skalieren und den Lastenausgleich durchführen, können Sie sicherstellen, dass Ihre Anwendungen zunehmenden Datenverkehr bewältigen können und eine hohe Verfügbarkeit aufrechterhalten.

Überwachen und Problembehandlung in Docker-Umgebungen

Überwachen von Docker-Containern

Die Überwachung Ihrer Docker-Umgebung ist von entscheidender Bedeutung, um die Gesundheit und Leistung Ihrer Anwendungen sicherzustellen. Hier sind einige Tools und Techniken zur Überwachung von Docker-Containern:

  1. Docker CLI-Befehle: Sie können verschiedene Docker CLI-Befehle verwenden, um Ihre Container zu überwachen, wie z. B. docker ps, docker logs und docker stats.
  2. Docker-Metriken: Docker bietet integrierte Metriken, auf die Sie über die Docker-API oder Drittanbieter-Überwachungstools zugreifen können, wie z. B. CPU-, Arbeitsspeicher- und Netzwerkauslastung.
  3. Drittanbieter-Überwachungstools: Tools wie Prometheus, Grafana und LabEx Monitoring können mit Docker integriert werden, um eine umfassende Überwachung und Visualisierung Ihrer Docker-Umgebung bereitzustellen.
graph LR A[Docker Containers] -- Metrics --> B[Monitoring Tools] B -- Visualize --> C[Dashboards]

Problembehandlung bei Docker-Containern

Wenn Probleme in Ihrer Docker-Umgebung auftreten, können Sie die folgenden Techniken verwenden, um diese zu diagnostizieren und zu beheben:

  1. Container-Logs: Untersuchen Sie die Logs Ihrer Container mit dem Befehl docker logs, um etwaige Fehler oder Probleme zu identifizieren.
  2. Container-Inspektion: Verwenden Sie den Befehl docker inspect, um detaillierte Informationen zu einem Container zu erhalten, einschließlich seiner Konfiguration, Netzwerkeinstellungen und Ressourcenauslastung.
  3. Container-Netzwerke: Beheben Sie netzwerkbezogene Probleme, indem Sie die Docker-Netzwerkkonfiguration überprüfen, die Container-IP-Adressen prüfen und die Netzwerkverbindung überprüfen.
  4. Ressourcenauslastung: Überwachen Sie die Ressourcenauslastung Ihrer Container mit dem Befehl docker stats oder Drittanbieter-Überwachungstools, um etwaige ressourcenbezogene Probleme zu identifizieren.
  5. Container-Neustart: Wenn ein Container nicht wie erwartet funktioniert, versuchen Sie, ihn mit dem Befehl docker restart neu zu starten.
graph LR A[Docker Containers] -- Troubleshoot --> B[Logs] A -- Troubleshoot --> C[Inspection] A -- Troubleshoot --> D[Networking] A -- Troubleshoot --> E[Resource Utilization] A -- Troubleshoot --> F[Restart]

Indem Sie die von Docker bereitgestellten Überwachungs- und Problembehandlungstools und -Techniken nutzen, können Sie Ihre auf Docker basierenden Anwendungen effektiv verwalten und warten, um deren Zuverlässigkeit und Leistung sicherzustellen.

Zusammenfassung

In diesem Tutorial "Schnelles Einrichten eines Docker-Container-Servers" haben Sie gelernt, wie Sie Docker installieren, Docker-Container erstellen und verwalten, Docker-Images erstellen und teilen sowie Ihre Docker-Bereitstellungen skalieren und überwachen. Mit diesen Fähigkeiten können Sie jetzt schnell einen besten Docker-Container-Server einrichten und in Betrieb nehmen und die Macht von Docker nutzen, um Ihre Anwendungsentwicklung und -bereitstellungsprozesse zu rationalisieren.