Einführung
Dieses umfassende Docker-Tutorial bietet Entwicklern und Systemadministratoren eine praktische Anleitung zum Verständnis und zur Implementierung der Containerisierungstechnologie. Durch die Erkundung der Kernkonzepte von Docker, der Installationsverfahren und grundlegender Befehle erwerben die Lernenden essentielle Fähigkeiten zur Erstellung leichter, portabler Anwendungsumgebungen.
Docker-Grundlagen
Einführung in die Containerisierungstechnologie
Docker ist eine leistungsstarke Containerisierungsplattform, die die Softwareentwicklung und -bereitstellung 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 von Docker
Was ist Docker?
Docker ist eine Open-Source-Plattform für Containerisierungstechnologie, die es Entwicklern ermöglicht, die Bereitstellung, Skalierung und Verwaltung von Anwendungen zu automatisieren. Im Gegensatz zu traditionellen virtuellen Maschinen teilen Docker-Container den Kernel des Hostsystems, was sie leicht und effizient macht.
graph TD
A[Anwendungscode] --> B[Docker-Container]
B --> C[Konsistente Bereitstellung]
B --> D[Isolierte Umgebung]
Wichtige Docker-Komponenten
| Komponente | Beschreibung | Zweck |
|---|---|---|
| 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 überprüfen
docker --version
## Ein Image ziehen
docker pull ubuntu:latest
## Images auflisten
docker images
## Einen Container starten
docker run -it ubuntu:latest /bin/bash
Anwendungsfälle für Docker-Containerisierung
Docker wird häufig in folgenden Bereichen eingesetzt:
- Microservices-Architektur
- Continuous Integration/Continuous Deployment (CI/CD)
- Cloud-native Anwendungsentwicklung
- Konsistente Entwicklungs- und Produktionsumgebungen
Docker-Images erstellen
Docker-Images verstehen
Docker-Images sind schreibgeschützte Vorlagen, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird: Code, Laufzeitumgebung, Bibliotheken, Umgebungsvariablen und Konfigurationsdateien. Sie dienen als Blaupausen für die Erstellung von Containern.
graph LR
A[Dockerfile] --> B[Docker-Image]
B --> C[Docker-Container]
Dockerfile-Grundlagen
Ein Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker-Images enthält. Jede Anweisung erstellt eine neue Schicht im Image.
Dockerfile-Anweisungstypen
| Anweisung | Zweck | Beispiel |
|---|---|---|
| FROM | Basis-Image festlegen | FROM ubuntu:22.04 |
| RUN | Befehle ausführen | RUN apt-get update |
| COPY | Dateien kopieren | COPY app.py /app/ |
| WORKDIR | Arbeitsverzeichnis festlegen | WORKDIR /app |
| CMD | Standardbefehl | CMD ["python", "app.py"] |
Erstellen eines Beispiel-Python-Anwendungsimage
Projektstruktur
/project
├── Dockerfile
└── app.py
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile
## Verwendung des offiziellen Python-Laufzeitumgebungs-Basis-Images
FROM python:3.9-slim
## Arbeitsverzeichnis festlegen
WORKDIR /app
## Projektdateien kopieren
COPY app.py requirements.txt ./
## Abhängigkeiten installieren
RUN pip install --no-cache-dir -r requirements.txt
## Port freigeben
EXPOSE 5000
## Standardbefehl definieren
CMD ["python", "app.py"]
Docker-Images erstellen und verwalten
## requirements.txt erstellen
echo "flask" > requirements.txt
## Docker-Image erstellen
docker build -t my-flask-app .
## Images auflisten
docker images
## Container aus dem Image starten
docker run -p 5000:5000 my-flask-app
Optimierungsstrategien für Images
- Verwendung von mehrstufigen Builds
- Minimierung der Schichtanzahl
- Nutzung des Build-Cache
- Verwendung spezifischer Image-Tags
- Entfernen unnötiger Dateien
Container-Management
Überblick über den Container-Lebenszyklus
Docker-Container haben einen komplexen Lebenszyklus mit mehreren Zuständen, von der Erstellung bis zur Beendigung. Das Verständnis dieser Zustände ist entscheidend für ein effektives Container-Management und die Orchestrierung.
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
Wesentliche Docker-Container-Befehle
| Befehl | Funktion | Beispiel |
|---|---|---|
| docker create | Container erstellen | docker create nginx |
| docker start | 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 |
Container-Inspektion und -Überwachung
## Laufende Container auflisten
docker ps
## Alle Container auflisten
docker ps -a
## Containerdetails inspizieren
docker inspect container_id
## Container-Logs anzeigen
docker logs container_id
## Container-Ressourcenverbrauch überwachen
docker stats
Container-Ressourcenverwaltung
## Container mit CPU- und Speicherlimits ausführen
docker run -d \
--cpus="1.5" \
--memory="512m" \
--name limited-container \
nginx
Erweiterte Container-Netzwerkfunktionen
## Benutzerdefiniertes Netzwerk erstellen
docker network create mynetwork
## Container in einem bestimmten Netzwerk ausführen
docker run -d \
--network=mynetwork \
--name web-container \
nginx
Container-Skalierungsstrategien
## Skalieren Sie mehrere Container-Instanzen
docker-compose up -d --scale web=3
Verwaltung persistenter Daten
## Volume erstellen
docker volume create myvolume
## Volume an Container mounten
docker run -v myvolume:/app/data \
--name data-container \
ubuntu
Best Practices
- Verwenden Sie leichte Basis-Images.
- Implementieren Sie Health Checks.
- Minimieren Sie die Containergröße.
- Verwenden Sie mehrstufige Builds.
- Implementieren Sie eine angemessene Protokollierung.
- Sichern Sie Containerkonfigurationen.
Zusammenfassung
Docker stellt einen revolutionären Ansatz für die Softwarebereitstellung dar und bietet Entwicklern eine leistungsstarke Plattform zur Erstellung konsistenter, isolierter und skalierbarer Anwendungscontainer. Durch die Beherrschung der grundlegenden Docker-Techniken können Fachkräfte die Entwicklungsworkflows optimieren, die Systemeffizienz verbessern und die Verwaltung komplexer Anwendungen über verschiedene Computing-Infrastrukturen hinweg vereinfachen.



