Docker
Docker ist eine Software, mit der Anwendungen in Container verpackt und auf jedem Rechner gleich gestartet werden. Sie erschien im März 2013 als Open Source, entwickelt bei dem Unternehmen dotCloud, das sich kurz darauf in Docker, Inc. umbenannte. Container gab es schon vorher; Docker machte sie mit einem einfachen Befehlszeilenwerkzeug, einem Format für Images und einem öffentlichen Verzeichnis dafür massentauglich.
Die Grundlagen beschreibt das Lemma Container-Virtualisierung. Hier geht es um Docker selbst.
Bestandteile
| Bestandteil | Aufgabe |
|---|---|
| Docker Engine | der Hintergrunddienst (dockerd), der Images baut und Container startet |
| docker | das Befehlszeilenwerkzeug, mit dem man die Engine steuert |
| Dockerfile | Textdatei mit der Bauanleitung für ein Image |
| Docker Hub | öffentliche Registry, aus der Docker Images standardmäßig lädt |
| Docker Compose | startet mehrere zusammengehörige Container aus einer Beschreibung in YAML |
| Docker Desktop | Paket für Windows und macOS, mit einer Linux-VM im Hintergrund und grafischer Oberfläche |
Dockerfile
Ein Image entsteht aus einem Dockerfile: Schritt für Schritt, ausgehend von einem Basis-Image. Jeder Schritt erzeugt eine Schicht.
FROM debian:12-slim RUN apt-get update && apt-get install -y nginx COPY website/ /var/www/html/ EXPOSE 80 CMD nginx -g 'daemon off;'
Das Beispiel nimmt ein schlankes Debian, installiert einen Webserver, kopiert die eigenen Dateien hinein und legt fest, was beim Start des Containers läuft.
Docker Compose
Eine Anwendung besteht oft aus mehreren Diensten, etwa Webserver, Anwendung und Datenbank. Docker Compose beschreibt sie in einer Datei und startet sie gemeinsam, samt Netz zwischen ihnen und dauerhaftem Speicher für die Datenbank:
services:
web:
image: nginx
ports:
- 80:80
db:
image: postgres:16
volumes:
- daten:/var/lib/postgresql/data
volumes:
daten:Für einzelne Server und Entwicklungsumgebungen ist Compose oft alles, was man braucht.
Grundbefehle
| Befehl | Wirkung |
|---|---|
docker run | Container aus einem Image starten, das Image bei Bedarf herunterladen |
docker ps | laufende Container anzeigen |
docker build | Image aus einem Dockerfile bauen |
docker pull, docker push | Image aus einer Registry laden oder dorthin hochladen |
docker logs | Ausgaben eines Containers anzeigen |
docker compose up | alle Dienste aus der Compose-Datei starten |
Docker und Kubernetes
Die beiden werden oft verglichen, lösen aber verschiedene Aufgaben:
| Docker | Kubernetes | |
|---|---|---|
| Aufgabe | Container bauen und auf einem Rechner starten | viele Container auf vielen Rechnern verteilen und am Laufen halten |
| Maßstab | ein Server, ein Entwicklerrechner | ein Verbund aus vielen Servern (Cluster) |
| Ausfall eines Servers | Container sind weg | werden auf anderen Servern neu gestartet |
Kubernetes nutzte früher Docker als Laufzeitumgebung. Seit Version 1.24 im Mai 2022 spricht Kubernetes direkt mit Laufzeitumgebungen wie containerd. Mit Docker gebaute Images laufen dort weiterhin, weil sie dem gemeinsamen Format der Open Container Initiative entsprechen.
Docker hat mit Docker Swarm eine eigene, einfachere Orchestrierung. Gegen Kubernetes hat sie sich nicht durchgesetzt.
Sicherheit
Root-Rechte. Der Docker-Dienst läuft standardmäßig mit Administratorrechten. Wer Docker-Befehle ausführen darf, hat damit faktisch Root-Zugriff auf den Host. Die Mitgliedschaft in der Gruppe docker ist entsprechend zu vergeben. Docker kennt inzwischen einen Betrieb ohne Root-Rechte; Podman setzt von vornherein darauf.
Images aus fremder Hand. Ein Image aus dem Docker Hub enthält, was sein Ersteller hineingelegt hat. Offizielle und verifizierte Images sind gekennzeichnet; bei allen anderen ist Vorsicht angebracht.
Ports und Firewall. Unter Linux trägt Docker eigene Regeln in die Paketfilter des Systems ein. Freigegebene Ports eines Containers sind dadurch auch dann erreichbar, wenn die Firewall des Hosts sie eigentlich sperrt — eine häufige Überraschung auf Servern im Internet.
Verwandte Werkzeuge
| Werkzeug | Verhältnis zu Docker |
|---|---|
| Podman | weitgehend befehlskompatibel, ohne zentralen Dienst, startet Container ohne Root-Rechte |
| Portainer | grafische Weboberfläche zur Verwaltung von Docker- und Kubernetes-Umgebungen |
| containerd | Laufzeitumgebung, die auch in Docker selbst steckt |