Docker Grundlagen – Container verstehen und nutzen
Docker Grundlagen – Container verstehen und nutzen
Docker hat die Art, wie wir Software betreiben, revolutioniert. Dieses Guide erklärt dir von Grund auf, was Docker ist und wie du es nutzt.
Was ist Docker?
Stell dir vor, du entwickelst eine App auf deinem Laptop. Sie funktioniert perfekt. Dann willst du sie auf einen Server bringen – und plötzlich klappt nichts mehr. Andere Python-Version, fehlende Bibliotheken, falsche Konfiguration...
Docker löst dieses Problem.
Mit Docker packst du deine App zusammen mit allem, was sie braucht (Betriebssystem, Bibliotheken, Konfiguration) in einen Container. Dieser Container läuft überall gleich – auf deinem Laptop, auf dem Server, in der Cloud.
Die Analogie: Container sind wie Schiffscontainer
- Schiffscontainer: Egal was drin ist (Schuhe, Bananen, Autos) – der Container passt auf jedes Schiff, jeden Zug, jeden LKW
- Docker Container: Egal was drin ist (Python-App, Datenbank, Webserver) – der Container läuft auf jedem Linux-System
Die wichtigsten Begriffe
| Begriff | Erklärung | Analogie |
|---|---|---|
| Image | Vorlage/Bauplan für Container | Backrezept |
| Container | Laufende Instanz eines Images | Der fertige Kuchen |
| Docker Hub | Online-Bibliothek für Images | Rezepte-Website |
| Dockerfile | Anleitung zum Image-Erstellen | Eigenes Rezept schreiben |
| Volume | Dauerhafter Speicher | Kühlschrank (bleibt auch wenn Kuchen weg) |
Docker installieren
Ubuntu/Debian
# System aktualisieren
sudo apt update
# Docker installieren
sudo apt install docker.io docker-compose -y
# Docker beim Booten starten
sudo systemctl enable docker
# Deinen Benutzer zur Docker-Gruppe hinzufügen
sudo usermod -aG docker $USER
# Neu einloggen oder:
newgrp docker
# Testen
docker --version
docker run hello-world
Was passiert bei docker run hello-world?
- Docker sucht das Image
hello-worldlokal - Findet es nicht → lädt es von Docker Hub herunter
- Erstellt einen Container aus dem Image
- Startet den Container
- Container gibt Text aus und beendet sich
Dein erster Container
Einen Webserver starten
# Nginx Webserver starten
docker run -d -p 8080:80 --name mein-webserver nginx
Was bedeuten die Parameter?
| Parameter | Bedeutung |
|---|---|
-d |
Detached – läuft im Hintergrund |
-p 8080:80 |
Port-Mapping: Dein Port 8080 → Container Port 80 |
--name mein-webserver |
Gibt dem Container einen Namen |
nginx |
Das Image (wird von Docker Hub geladen) |
Öffne jetzt http://localhost:8080 im Browser – du siehst die Nginx-Startseite! 🎉
Container verwalten
# Laufende Container anzeigen
docker ps
# Alle Container (auch gestoppte)
docker ps -a
# Container stoppen
docker stop mein-webserver
# Container starten
docker start mein-webserver
# Container löschen (muss gestoppt sein)
docker rm mein-webserver
# Container stoppen UND löschen
docker rm -f mein-webserver
Mit Containern interagieren
In einen laufenden Container gehen
# Bash-Shell im Container öffnen
docker exec -it mein-webserver bash
# Jetzt bist du IM Container
ls /usr/share/nginx/html
exit # Wieder raus
Parameter erklärt:
- -i = Interactive (Eingabe möglich)
- -t = TTY (Terminal-Ansicht)
Logs eines Containers anzeigen
# Alle Logs
docker logs mein-webserver
# Live-Logs (wie tail -f)
docker logs -f mein-webserver
# Letzte 50 Zeilen
docker logs --tail 50 mein-webserver
Images verwalten
Images herunterladen
# Image von Docker Hub laden
docker pull ubuntu:22.04
docker pull mysql:8
docker pull python:3.11
# Geladene Images anzeigen
docker images
Image-Tags verstehen
docker pull nginx # Lädt nginx:latest (neueste Version)
docker pull nginx:1.24 # Lädt spezifische Version
docker pull nginx:alpine # Lädt Alpine-basierte Version (kleiner)
💡 Tipp: Alpine-Images sind viel kleiner (5-50 MB statt 100-500 MB).
Unbenutzte Images löschen
# Ein bestimmtes Image löschen
docker rmi nginx:latest
# Alle ungenutzten Images löschen
docker image prune
# ALLES aufräumen (Images, Container, Netzwerke)
docker system prune
Daten persistent speichern mit Volumes
Container sind vergänglich – wenn du sie löschst, sind alle Daten weg. Volumes lösen das Problem.
Volume erstellen und nutzen
# Volume erstellen
docker volume create meine-daten
# Container mit Volume starten
docker run -d \
--name mysql-db \
-v meine-daten:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=geheim \
mysql:8
Jetzt sind die Datenbank-Daten im Volume gespeichert. Selbst wenn du den Container löschst und neu erstellst – die Daten bleiben!
Lokalen Ordner einbinden
# Deinen Ordner in den Container einbinden
docker run -d \
--name webserver \
-p 8080:80 \
-v /home/max/website:/usr/share/nginx/html \
nginx
Jetzt werden Änderungen in /home/max/website sofort im Container sichtbar!
Docker Compose – Mehrere Container verwalten
Für komplexere Setups (z.B. Webserver + Datenbank) nutzt du Docker Compose.
Beispiel: WordPress mit MySQL
Erstelle eine Datei docker-compose.yml:
version: '3.8'
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: unless-stopped
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: geheim123
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:8
container_name: mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: geheim123
MYSQL_ROOT_PASSWORD: root_geheim
volumes:
- mysql_data:/var/lib/mysql
volumes:
wp_data:
mysql_data:
Docker Compose Befehle
# Alle Container starten
docker-compose up -d
# Status anzeigen
docker-compose ps
# Logs anzeigen
docker-compose logs -f
# Alle Container stoppen
docker-compose down
# Stoppen UND Volumes löschen
docker-compose down -v
Nützliche Docker Befehle
Schnellreferenz
| Befehl | Funktion |
|---|---|
docker run -d IMAGE |
Container im Hintergrund starten |
docker ps |
Laufende Container |
docker ps -a |
Alle Container |
docker stop NAME |
Container stoppen |
docker rm NAME |
Container löschen |
docker logs NAME |
Logs anzeigen |
docker exec -it NAME bash |
Shell im Container |
docker images |
Lokale Images |
docker pull IMAGE |
Image herunterladen |
docker rmi IMAGE |
Image löschen |
docker volume ls |
Volumes anzeigen |
docker system prune |
Aufräumen |
Praktische Einzeiler
# Alle gestoppten Container löschen
docker container prune
# Ressourcenverbrauch aller Container
docker stats
# Welche Ports nutzt ein Container?
docker port mein-container
# Detaillierte Container-Infos
docker inspect mein-container
Best Practices
1. Nutze spezifische Tags
# SCHLECHT – kann sich jederzeit ändern
docker pull mysql:latest
# GUT – reproduzierbar
docker pull mysql:8.0.35
2. Nutze Alpine-Images wenn möglich
# Groß (~ 140 MB)
docker pull python:3.11
# Klein (~ 50 MB)
docker pull python:3.11-alpine
3. Container immer mit Namen starten
# SCHLECHT – bekommt zufälligen Namen
docker run -d nginx
# GUT – leicht wiederzufinden
docker run -d --name webserver nginx
4. Volumes für wichtige Daten
Datenbanken, Uploads, Konfigurationen – alles was bleiben soll, gehört in Volumes!
Typische Probleme und Lösungen
"Port is already in use"
# Welcher Prozess nutzt Port 8080?
sudo lsof -i :8080
# Anderen Port wählen
docker run -d -p 8081:80 nginx
Container startet nicht
# Logs prüfen
docker logs container-name
# Container ohne -d starten um Fehler zu sehen
docker run --rm nginx
"Permission denied" bei Volumes
# Berechtigungen im Container-Ordner setzen
docker exec container-name chown -R 1000:1000 /data
Zusammenfassung
Docker macht es einfach, Software zu verpacken und überall gleich laufen zu lassen:
- Images sind Baupläne/Vorlagen
- Container sind laufende Instanzen von Images
- Volumes speichern Daten dauerhaft
- Docker Compose verwaltet mehrere Container
Mit diesem Wissen kannst du: - Fertige Images von Docker Hub nutzen - Container starten, stoppen und verwalten - Daten persistent speichern - Multi-Container-Setups mit Docker Compose erstellen
Nächste Schritte
- Dockerfile schreiben – Eigene Images erstellen
- Nginx Reverse Proxy – Container hinter Nginx
- Docker Netzwerke – Container miteinander verbinden
- Container-Monitoring – Portainer, ctop