Effiziente Erstellung und Verwaltung von Docker Containern

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses umfassende Docker-Tutorial bietet Entwicklern und IT-Experten einen tiefen Einblick in die Containerisierungstechnologie. Durch die Erkundung der Kernkonzepte, der Architektur und der praktischen Implementierungsstrategien von Docker erwerben die Lernenden praktische Fähigkeiten im Packen, Bereitstellen und Verwalten von Anwendungen in verschiedenen Computing-Umgebungen.

Docker-Grundlagen

Was ist Docker?

Docker ist eine leistungsstarke Containerisierungsplattform, die die Anwendungsbereitstellung und -entwicklung revolutioniert. Als Open-Source-Technologie ermöglicht Docker Entwicklern das konsistente Packen, Verteilen und Ausführen von Anwendungen in verschiedenen Computing-Umgebungen.

Kernkonzepte von Docker

Container vs. virtuelle Maschinen

graph TD A[Physische Hardware] --> B[Docker-Container] A --> C[Virtuelle Maschinen] B --> D[Leichtgewichtig] B --> E[Gemeinsamer Betriebssystemkern] C --> F[Schwergewichtig] C --> G[Vollständiger Betriebssystem-Overhead]
Merkmal Docker-Container Virtuelle Maschinen
Ressourcenverbrauch Leichtgewichtig Ressourcenintensiv
Startzeit Sekunden Minuten
Isolierungsebene Prozessebene Vollständiges System

Docker-Architektur

Docker verwendet eine Client-Server-Architektur mit folgenden Schlüsselkomponenten:

  • Docker-Daemon
  • Docker-Client
  • Docker-Registry
  • Docker-Images
  • Docker-Container

Grundlegende Docker-Befehle

Docker auf Ubuntu 22.04 installieren:

## Systempakete aktualisieren
sudo apt update

## Docker-Abhängigkeiten installieren
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Offiziellen GPG-Schlüssel von Docker hinzufügen
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Docker-Repository einrichten
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Docker Engine installieren
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

## Docker-Installation überprüfen
sudo docker --version

Ausführen Ihres ersten Containers

## Ubuntu-Image herunterladen
sudo docker pull ubuntu:latest

## Interaktiven Container starten
sudo docker run -it ubuntu:latest /bin/bash

## Laufende Container auflisten
sudo docker ps

## Alle Container auflisten
sudo docker ps -a

Imageverwaltung

## Nach Images suchen
sudo docker search nginx

## Image herunterladen
sudo docker pull nginx

## Lokale Images auflisten
sudo docker images

Container-Netzwerke

Docker-Netzwerktypen

graph TD A[Docker-Netzwerktypen] --> B[Bridge-Netzwerk] A --> C[Host-Netzwerk] A --> D[Kein Netzwerk] A --> E[Overlay-Netzwerk]
Netzwerktyp Beschreibung Anwendungsfall
Bridge Standardnetzwerk Isolierte Containerkommunikation
Host Direktes Host-Netzwerk Performance-kritische Anwendungen
None Kein Netzwerkzugriff Vollständig isolierte Container
Overlay Multi-Host-Netzwerk Verteilte Containersysteme

Port-Mapping-Techniken

Grundlegendes Port-Mapping

## Container-Port 80 auf Host-Port 8080 mappen
sudo docker run -p 8080:80 nginx

## Mehrere Ports mappen
sudo docker run -p 8080:80 -p 3306:3306 myapp

Netzwerkverwaltungskommandos

## Docker-Netzwerke auflisten
sudo docker network ls

## Benutzerdefiniertes Netzwerk erstellen
sudo docker network create mynetwork

## Container mit Netzwerk verbinden
sudo docker network connect mynetwork mycontainer

## Netzwerkdetails anzeigen
sudo docker network inspect bridge

Fortgeschrittenes Netzwerk-Szenario

## Benutzerdefiniertes Bridge-Netzwerk erstellen
sudo docker network create --driver bridge isolated_network

## Container im benutzerdefinierten Netzwerk ausführen
sudo docker run -d --name web1 --network isolated_network nginx
sudo docker run -d --name web2 --network isolated_network httpd

Netzwerkisolierungsstrategien

## Zugriff auf externes Netzwerk deaktivieren
sudo docker run --network none mycontainer

## Host-Netzwerk direkt verwenden
sudo docker run --network host mycontainer

Container-DNS-Auflösung

## Automatische DNS-Auflösung zwischen Containern aktivieren
sudo docker run --name db-container mysql
sudo docker run --name app-container --link db-container:database myapp

Erweiterte Docker-Techniken

Container-Ressourcenverwaltung

graph TD A[Ressourcenverwaltung] --> B[CPU-Limits] A --> C[Speicherbeschränkungen] A --> D[Speicherkontingente]

Beispiel für die Ressourcenallokation

## Container auf 1 CPU-Kern und 512 MB Speicher begrenzen
sudo docker run -it --cpus=1 --memory=512m ubuntu /bin/bash

## Speicher- und Swap-Limits festlegen
sudo docker run -it --memory=1g --memory-swap=2g ubuntu /bin/bash

Docker Compose für die Bereitstellung mehrerer Container

version: "3"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  database:
    image: postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Sicherheitsbest Practices

Sicherheitstechnik Implementierung
Container ohne Root-Rechte Verwenden Sie die USER-Direktive in der Dockerfile
Schreibgeschütztes Dateisystem Fügen Sie das :ro-Flag zu Volume-Mounts hinzu
Begrenzung der Container-Berechtigungen Verwenden Sie --cap-drop und --cap-add

Container-Orchestrierung mit Docker Swarm

## Swarm-Cluster initialisieren
sudo docker swarm init

## Dienst mit Replikaten erstellen
sudo docker service create --replicas 3 --name web nginx

## Dienst dynamisch skalieren
sudo docker service scale web=5

Erweiterte Netzwerkkonfigurationen

## Benutzerdefiniertes Netzwerk mit Subnetz erstellen
sudo docker network create \
  --driver bridge \
  --subnet 192.168.0.0/24 \
  --gateway 192.168.0.1 \
  custom_network

Container-Überwachung und Logging

## Container-Logs in Echtzeit anzeigen
sudo docker logs -f container_name

## Container-Metriken anzeigen
sudo docker stats container_name

## Größe der Logdatei begrenzen
sudo docker run --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx

Dockerfile-Optimierungsmethoden

## Mehrstufiger Build
FROM maven:3.8.1-openjdk-11 AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package

FROM openjdk:11-jre-slim
COPY --from=build /home/app/target/app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Zusammenfassung

Docker stellt einen bahnbrechenden Ansatz für die Softwarebereitstellung dar und bietet leichte, portablen und effiziente Containerisierungslösungen. Durch das Beherrschen der grundlegenden Konzepte, der Architektur und der Befehlszeilentechniken von Docker können Entwickler die Anwendungsentwicklung optimieren, die Systemkonsistenz verbessern und die Skalierbarkeit und Leistung der gesamten Infrastruktur steigern.