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.



