Einführung
Dieses umfassende Docker-Training bietet Entwicklern und IT-Profis einen strukturierten Ansatz zum Verständnis und zur Implementierung von Containerisierungstechnologien. Durch die Erkundung der Kernkonzepte von Docker, der Installationsverfahren und praktischer Bereitstellungsstrategien erwerben die Lernenden praktische Fähigkeiten, um ihre Softwareentwicklungs- und Bereitstellungsabläufe zu revolutionieren.
Docker-Grundlagen
Einführung in Docker-Grundlagen
Docker ist eine leistungsstarke Containerisierungsplattform, die die Softwarebereitstellung 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 Computernumgebungen sicherzustellen.
Kernkonzepte der Containertechnologie
Was ist Docker?
Docker ist eine Open-Source-Plattform, die die Bereitstellung, Skalierung und Verwaltung von Anwendungen durch Containerisierung automatisiert. Sie bietet leichte, portable und autarke Container, die nahezu überall ausgeführt werden können.
graph TD
A[Docker Engine] --> B[Container Runtime]
A --> C[Image Repository]
B --> D[Anwendungskontaner]
C --> D
Wichtige Docker-Komponenten
| Komponente | Beschreibung | Funktion |
|---|---|---|
| Docker Engine | Kerndienstprogramm | Erstellt und führt Container aus |
| Docker Image | Nur-Leseversion | Definiert die Containerkonfiguration |
| Docker Container | Ausführbare Instanz | Führt die Anwendung aus |
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 Docker GPG-Schlüssel 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 anzeigen
docker --version
## Ein Image herunterladen
docker pull ubuntu:latest
## Lokale Images auflisten
docker images
## Einen Container starten
docker run -it ubuntu:latest /bin/bash
Vorteile der Containerisierung
Docker bietet erhebliche Vorteile in der modernen Softwareentwicklung:
- Konsistente Umgebung zwischen Entwicklung und Produktion
- Schnelle Anwendungsbereitstellung
- Effiziente Ressourcennutzung
- Vereinfachte Abhängigkeitsverwaltung
- Verbesserte Skalierbarkeit und Portabilität
Docker-Image- und -Containerverwaltung
Verständnis von Docker-Images
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 | Beispiel |
|---|---|---|
| docker images | Lokale Images auflisten | docker images |
| docker pull | Image aus dem Registry herunterladen | docker pull ubuntu:20.04 |
| docker rmi | Lokales Image entfernen | docker rmi ubuntu:20.04 |
Erstellen benutzerdefinierter Docker-Images
Dockerfile-Grundlagen
## Basis-Image
FROM ubuntu:22.04
## Metadaten
LABEL maintainer="your-email@example.com"
## Systempakete aktualisieren
RUN apt-get update && apt-get upgrade -y
## Abhängigkeiten installieren
RUN apt-get install -y python3 python3-pip
## Arbeitsverzeichnis setzen
WORKDIR /app
## Anwendungsdateien kopieren
COPY . /app
## Python-Abhängigkeiten installieren
RUN pip3 install -r requirements.txt
## Anwendungsport freigeben
EXPOSE 8000
## Startbefehl definieren
CMD ["python3", "app.py"]
Container-Lebenszyklusverwaltung
Container-Operationen
## Container erstellen und starten
docker run -d --name myapp ubuntu:22.04
## Laufende Container auflisten
docker ps
## Container stoppen
docker stop myapp
## Container entfernen
docker rm myapp
## Containerdetails anzeigen
docker inspect myapp
Interaktion mit dem Docker Registry
## Anmeldung bei Docker Hub
docker login
## Lokales Image taggen
docker tag myimage:latest username/myimage:v1.0
## Image in das Registry pushen
docker push username/myimage:v1.0
## Image aus dem Registry ziehen
docker pull username/myimage:v1.0
Konfigurationstechniken für Container
Umgebungsvariablen
## Container mit Umgebungsvariablen starten
docker run -e DATABASE_URL=postgres://localhost \
-e API_KEY=secret \
myapp:latest
Volume-Mounts
## Lokalen Verzeichnis in den Container mounten
docker run -v /local/path:/container/path myapp:latest
Docker Erweiterte Bereitstellung
Docker Netzwerk Grundlagen
Docker bietet ausgereifte Netzwerkfunktionen, um Container zu verbinden und die Kommunikation zwischen ihnen zu verwalten.
graph TD
A[Docker Host] --> B[Bridge Netzwerk]
B --> C[Container 1]
B --> D[Container 2]
B --> E[Container 3]
Netzwerktypen
| Netzwerktyp | Beschreibung | Anwendungsfall |
|---|---|---|
| Bridge | Standardnetzwerk | Isolierte Containerkommunikation |
| Host | Direktes Host-Netzwerk | Hochleistungs-Szenarien |
| Overlay | Multi-Host-Netzwerk | Verteilte Systeme |
| Macvlan | Integration in physisches Netzwerk | Container-Exposition auf Netzwerkebene |
Container Orchestrierung mit Docker Compose
Docker Compose Konfiguration
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- app_network
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- app_network
networks:
app_network:
driver: bridge
volumes:
postgres_data:
Bereitstellungsbefehle
## Dienste erstellen und starten
docker-compose up -d
## Laufende Dienste anzeigen
docker-compose ps
## Container stoppen und entfernen
docker-compose down
Skalierungsstrategien für Container
## Skalierung eines bestimmten Dienstes
docker-compose up -d --scale web=3
Best Practices für die Containersicherheit
Sicherheits-Scanning
## Docker-Image auf Sicherheitslücken prüfen
docker scan myimage:latest
## Verwendung von offiziellen, sicherheitsorientierten Basis-Images
FROM alpine:latest
Sicherheitskonfiguration zur Laufzeit
## Container mit eingeschränkten Rechten ausführen
docker run --read-only \
--tmpfs /tmp \
--security-opt=no-new-privileges:true \
myapp:latest
Erweiterte Netzwerktechniken
Erstellung benutzerdefinierter Netzwerke
## Isoliertes Netzwerk erstellen
docker network create \
--driver bridge \
--subnet 192.168.0.0/24 \
--gateway 192.168.0.1 \
custom_network
## Container mit benutzerdefiniertem Netzwerk verbinden
docker run --network=custom_network myapp:latest
Bereitstellung auf mehreren Hosts
graph TD
A[Docker Swarm Manager] --> B[Worker Node 1]
A --> C[Worker Node 2]
A --> D[Worker Node 3]
Swarm Initialisierung
## Docker Swarm initialisieren
docker swarm init
## Dienst über den Cluster bereitstellen
docker service create \
--replicas 3 \
--network swarm_network \
myapp:latest
Zusammenfassung
Docker stellt eine bahnbrechende Technologie in der modernen Softwareentwicklung dar und bietet beispiellose Flexibilität, Portabilität und Effizienz. Durch die Beherrschung der Containerisierungstechniken können Entwickler konsistente, skalierbare Anwendungen erstellen, die nahtlos auf verschiedenen Computerebenen ausgeführt werden können, was letztendlich die Produktivität steigert und die Infrastrukturkomplexität reduziert.



