Einführung
Dieses umfassende Docker-Tutorial bietet Entwicklern und IT-Experten einen grundlegenden Einblick in die Containertechnologie. Durch die Erkundung der Kernkonzepte von Docker, der Installationsverfahren und praktischer Befehlszeilentechniken erwerben die Lernenden praktische Fähigkeiten zum Packen, Bereitstellen und Verwalten von Anwendungen in verschiedenen Computing-Umgebungen.
Docker-Grundlagen
Einführung in Docker und Containertechnologie
Docker ist eine leistungsstarke Plattform für die Containerisierung, die es Entwicklern ermöglicht, Anwendungen konsistent in verschiedenen Computing-Umgebungen zu verpacken, zu verteilen und auszuführen. Als wichtiges Werkzeug in der modernen Softwarebereitstellung vereinfacht Docker den Prozess der Erstellung, Verwaltung und Skalierung von Anwendungen.
Kernkonzepte von Docker
graph TD
A[Docker Image] --> B[Docker Container]
A --> C[Dockerfile]
B --> D[Container Runtime]
Docker führt mehrere grundlegende Konzepte ein:
| Konzept | Beschreibung |
|---|---|
| Docker Image | Nur-Leseversion, die Anwendungscode und Abhängigkeiten enthält |
| Docker Container | Ausführbare Instanz eines Images |
| Dockerfile | Textdatei, die Anweisungen zur Erstellung des Images enthält |
| Docker Registry | Repository zum Speichern und Teilen von Images |
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=amd64 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
Grundlegende Docker-Befehle
## Docker-Version überprüfen
## Image von Docker Hub ziehen
## Verfügbare Images auflisten
## Container starten
## Laufende Container auflisten
## Container stoppen
Praktisches Beispiel: Ausführung einer einfachen Webanwendung
## Nginx-Image ziehen
docker pull nginx:latest
## Nginx-Container starten
docker run -d -p 8080:80 nginx:latest
## Container-Status überprüfen
docker ps
Dieses Beispiel zeigt, wie man mit Docker schnell einen Webserver bereitstellt und verdeutlicht die Einfachheit und Effizienz der Softwarebereitstellung.
Containerverwaltung
Container-Lebenszyklusoperationen
Docker bietet umfassende Werkzeuge zur Verwaltung des Container-Lebenszyklus, die Entwicklern ermöglichen, Container effizient zu steuern und zu manipulieren.
graph LR
A[Erstellt] --> B[Läuft]
B --> C[Angehalten]
C --> D[Entfernt]
D --> E[Neu gestartet]
Containerverwaltungsbefehle
| Befehl | Funktion | Beispiel |
|---|---|---|
| docker create | Container erstellen | docker create nginx |
| docker start | Angehaltenen Container starten | docker start <container_id> |
| docker stop | Laufenden Container stoppen | docker stop <container_id> |
| docker restart | Container neu starten | docker restart <container_id> |
| docker rm | Container entfernen | docker rm <container_id> |
Erweiterte Containerkontrolle
## Container mit benutzerdefiniertem Namen starten
docker run --name web-server -d nginx:latest
## Containerdetails anzeigen
docker inspect web-server
## Container-Logs anzeigen
docker logs web-server
## Befehle im laufenden Container ausführen
docker exec -it web-server /bin/bash
Containerressourcenverwaltung
## Container-CPU und -Speicher begrenzen
docker run -d --cpus=0.5 --memory=512m nginx:latest
## Laufende Container mit Ressourcenverbrauch auflisten
docker stats
Imageverwaltungsoperationen
## Lokale Images auflisten
docker images
## Bestimmtes Image entfernen
docker rmi nginx:latest
## Nicht verwendete Images entfernen
docker image prune
## Bestimmte Imageversion ziehen
docker pull ubuntu:20.04
Containernetzwerkverwaltung
## Benutzerdefiniertes Netzwerk erstellen
docker network create mynetwork
## Container in einem bestimmten Netzwerk ausführen
docker run --network=mynetwork nginx:latest
Erweiterte Docker-Techniken
Mehrstufige Builds
Mehrstufige Builds optimieren die Komplexität von Dockerfiles und reduzieren die Größe des endgültigen Images.
## Build-Phase
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
## Produktions-Phase
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
Docker Compose-Workflow
graph LR
A[Docker Compose-Datei] --> B[Dienstdefinition]
B --> C[Container-Orchestrierung]
C --> D[Vernetzte Anwendungen]
Beispiel für die Compose-Konfiguration
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
database:
image: postgres:12
environment:
POSTGRES_PASSWORD: secret
Techniken zur Leistungssteigerung
| Technik | Beschreibung |
|---|---|
| Layer-Caching | Minimierung von Layer-Neukompilierungen |
| .dockerignore | Ausschließen unnötiger Dateien |
| Alpine-Images | Verwendung minimaler Basis-Images |
Erweiterte Netzwerkfunktionen
## Benutzerdefiniertes Bridge-Netzwerk erstellen
docker network create --driver bridge isolated_network
## Container mit spezifischem Netzwerk verbinden
docker run --network=isolated_network nginx:latest
Strategien zur Volumenverwaltung
## Benannte Volumes erstellen
docker volume create app-data
## Volumen an Container mounten
docker run -v app-data:/var/lib/data nginx:latest
Containerüberwachung
## Echtzeit-Metriken für Container
## Container-Logs anzeigen
Sicherheitsrichtlinien
## Container als Nicht-Root-Benutzer ausführen
docker run --user 1000 nginx:latest
## Schreibgeschütztes Dateisystem festlegen
docker run --read-only nginx:latest
Zusammenfassung
Docker revolutioniert die Softwarebereitstellung, indem es eine konsistente und effiziente Plattform für die Containerisierung bietet. In diesem Tutorial haben die Leser grundlegende Konzepte wie Docker-Images, -Container und Dockerfile-Grundlagen kennengelernt, sowie praktische Fähigkeiten zur Installation von Docker, zur Verwaltung von Containern und zum Ausführen von Webanwendungen. Diese Fähigkeiten bilden eine wichtige Grundlage für die moderne Softwareentwicklung und die Infrastrukturverwaltung.



