Einführung
Dieses Tutorial bietet eine umfassende Anleitung zum Ausführen eines Docker-Images und zur Verwaltung von Docker-Containern. Sie lernen die Grundlagen von Docker kennen, erkunden Docker-Images und deren Anwendungsfälle und entdecken Techniken zum Ziehen, Verwalten und Interagieren mit Docker-Containern. Darüber hinaus behandelt das Tutorial erweiterte Themen der Containerverwaltung, wie Docker-Volumes, Netzwerke, Compose und Swarm, um Ihnen zu helfen, Ihre Anwendungen effektiv mit Docker zu deployen und zu verwalten.
Docker-Grundlagen
Was ist Docker?
Docker ist eine leistungsstarke Containerisierungstechnologie, die die Anwendungsbereitstellung und -entwicklung revolutioniert. Sie ermöglicht es Entwicklern, Anwendungen mit allen Abhängigkeiten in standardisierte Einheiten, sogenannte Container, zu verpacken, um eine konsistente Leistung in verschiedenen Computing-Umgebungen sicherzustellen.
Kernkonzepte von Docker
Containerisierungstechnologie
Die Containerisierung ermöglicht es Anwendungen, in isolierten Umgebungen zu laufen und bietet mehrere entscheidende Vorteile:
| Merkmal | Beschreibung |
|---|---|
| Isolation | Jeder Container läuft unabhängig |
| Portabilität | Container können auf jedem Docker-fähigen System laufen |
| Effizienz | Leichter als herkömmliche virtuelle Maschinen |
graph TD
A[Anwendungskode] --> B[Docker-Container]
B --> C[Host-Betriebssystem]
C --> D[Infrastruktur]
Docker-Architektur
Docker verwendet eine Client-Server-Architektur mit folgenden Schlüsselkomponenten:
- Docker-Daemon
- Docker-Client
- Docker-Registry
- Docker-Images
- Docker-Container
Installation unter Ubuntu 22.04
## Paketindex aktualisieren
sudo apt update
## 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
## Stable-Repository einrichten
echo "deb [arch=$(dpkg --print-architecture)] $(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
Grundlegende Docker-Befehle
## Docker-Version prüfen
docker --version
## Ein Image ziehen
docker pull ubuntu:latest
## Images auflisten
docker images
## Einen Container starten
docker run -it ubuntu:latest /bin/bash
Hauptvorteile von Docker
- Konsistente Entwicklungsumgebungen
- Schnellere Bereitstellung
- Ressourceneffizienz
- Skalierbarkeit
- Vereinfachte Konfigurationsverwaltung
Arbeiten mit Docker-Images
Docker-Images verstehen
Docker-Images sind schreibgeschützte Vorlagen, die zum Erstellen von Containern verwendet werden. Sie enthalten den Anwendungscode, die Laufzeitumgebung, Bibliotheken und Systemtools, die zum Ausführen einer Anwendung erforderlich sind.
graph LR
A[Dockerfile] --> B[Docker-Image]
B --> C[Docker-Container]
Befehle zur Imageverwaltung
| Befehl | Beschreibung |
|---|---|
| docker images | Lokale Images auflisten |
| docker pull | Images aus dem Registry ziehen |
| docker rmi | Images entfernen |
| docker tag | Images für die Versionsverwaltung versehen |
Erstellen eines Dockerfiles
## Basis-Image
FROM ubuntu:22.04
## Metadaten
LABEL maintainer="your-email@example.com"
## System aktualisieren
RUN apt-get update && apt-get install -y \
python3 \
pip
## Arbeitsverzeichnis setzen
WORKDIR /app
## Anwendungsdateien kopieren
COPY . /app
## Abhängigkeiten installieren
RUN pip install -r requirements.txt
## Port freigeben
EXPOSE 5000
## Anwendung ausführen
CMD ["python3", "app.py"]
Erstellen von Docker-Images
## Image erstellen
docker build -t myapp:v1 .
## Image mit spezifischem Tag erstellen
docker build -t myapp:latest .
## Image mit Build-Argumenten erstellen
docker build --build-arg VERSION=1.0 -t myapp:v1 .
Docker-Image-Layers
graph TD
A[Basis-Image] --> B[System-Updates]
B --> C[Abhängigkeiten installieren]
C --> D[Anwendungscode kopieren]
D --> E[Startbefehl definieren]
Speichern und Freigeben von Images
## Anmeldung bei Docker Hub
docker login
## Image in das Registry pushen
docker push username/myapp:v1
## Image aus dem Registry ziehen
docker pull username/myapp:v1
Best Practices
- Minimieren Sie die Größe des Images
- Verwenden Sie mehrstufige Builds
- Nutzen Sie Caching
- Vermeiden Sie die Installation unnötiger Pakete
Docker in der Praxis
Container-Networking
Docker bietet verschiedene Netzwerkmodi für die Kommunikation zwischen Containern:
| Netzwerkmodus | Beschreibung |
|---|---|
| Bridge | Standard-Netzwerkmodus |
| Host | Direkter Host-Netzwerkzugriff |
| None | Keine Netzwerkverbindung |
## Benutzerdefiniertes Netzwerk erstellen
docker network create mynetwork
## Container auf einem bestimmten Netzwerk ausführen
docker run --network=mynetwork ubuntu
Docker Compose
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: secret
Workflow der Container-Orchestrierung
graph TD
A[Entwicklung] --> B[Containerisierung]
B --> C[Tests]
C --> D[Staging]
D --> E[Produktive Bereitstellung]
Skalieren von Anwendungen
## Skalieren von Diensten
docker-compose up -d --scale web=3
## Überwachen der Containerressourcen
docker stats
Strategien für die Produktionsbereitstellung
## Rollout-Aktualisierung
docker service update \
--image myapp:v2 \
--update-parallelism 2 \
--update-delay 10s \
myservice
Container-Monitoring
## Container-Logs anzeigen
docker logs mycontainer
## Echtzeit-Ressourcenverbrauch
docker top mycontainer
Erweiterte Networking
## Overlay-Netzwerk erstellen
docker network create \
-d overlay \
--subnet 10.0.0.0/24 \
my_overlay_network
Sicherheitsrichtlinien
| Richtlinie | Beschreibung |
|---|---|
| Ressourcenlimits | CPU/Speicher begrenzen |
| Schreibgeschütztes Filesystem | Änderungen verhindern |
| Nicht-Root-Benutzer | Reduzierung der Containerrechte |
Zusammenfassung
Am Ende dieses Tutorials verfügen Sie über ein fundiertes Verständnis der Ausführung von Docker-Images, der Verwaltung von Docker-Containern und der Nutzung fortgeschrittener Containerverwaltungstechniken, um Ihre Anwendungen effizienter bereitzustellen und zu verwalten. Die in diesem Tutorial erworbenen Kenntnisse ermöglichen es Ihnen, die Vorteile von Docker wie Konsistenz, Skalierbarkeit und Portabilität in Ihren Softwareentwicklungs- und Bereitstellungsprozessen zu nutzen.



