Docker Container-Runtimes
Was dieser Artikel über Container-Runtimes behandelt
- Was eine Container-Runtime ist.
- Welche Runtimes Docker verwendet.
- Unterschiede zwischen runc und crun.
- Was containerd und shim sind.
- Wie man die Runtime wechselt und prüft.
Einleitung: Docker Container-Runtimes
Docker ist für viele die erste Anlaufstelle für Container. Wer aber produktiv mit Containern arbeitet, sollte verstehen, was unter der Haube passiert. Docker setzt auf containerd, eine leichte Container-Verwaltung, und auf eine Low-Level-Runtime wie runc oder crun. Diese Runtime startet und isoliert die eigentlichen Container-Prozesse. Die Wahl der Runtime kann Auswirkungen auf Geschwindigkeit, Ressourcenverbrauch und Sicherheit haben.
Dieser Artikel erklärt die wichtigsten Docker-Runtimes und zeigt, wie man sie wechselt.
Wichtige Begriffe
- Container-Runtime: Software, die Container-Prozesse ausführt und isoliert.
- containerd: High-Level-Container-Verwaltung.
- runc: Standard-Runtime für Docker, geschrieben in Go.
- crun: Alternative Runtime in C, schneller und ressourcenschonender.
- shim: Verbindung zwischen containerd und laufendem Container.
- CRI: Container Runtime Interface.
- cgroups: Control Groups zur Ressourcenverwaltung.
- Namespaces: Isolation von Prozessen, Netzwerk und Dateisystem.
Docker-Architektur
Docker arbeitet in mehreren Schichten:
- Docker Engine: API, CLI und Daemon.
- containerd: Verwaltet Container-Lebenszyklus.
- Runtime: Startet und isoliert Container-Prozesse.
EIN Container-Start sieht typischerweise so aus:
docker run → Docker Engine → containerd → runc/crun → Container
runc
runc ist die Standard-Runtime von Docker. Es ist stabil, weit verbreitet und unterstützt viele Features:
- OCI-Spezifikation.
- Cgroups v1 und v2.
- Namespaces.
- Seccomp, AppArmor, SELinux.
Nachteile:
- Geschrieben in Go, daher grössere Binärdateien und mehr Speicherverbrauch.
- Start kann langsamer sein als bei crun.
crun
crun ist eine in C geschriebene Alternative zu runc. Vorteile:
- Kleinere Binärdatei.
- Schnellerer Start.
- Weniger Speicherverbrauch.
- Bessere Unterstützung für cgroups v2.
- Unterstützung für WebAssembly-Komponenten.
Nachteile:
- Weniger verbreitet.
- Einige Tools oder Kubernetes-Integrationen müssen crun testen.
- Manchmal neuere Bugs.
crun installieren
Unter Debian/Ubuntu:
sudo apt-get install -y crun
Runtime in Docker wechseln
Docker kann über daemon.json eine Runtime konfigurieren:
{
"runtimes": {
"crun": {
"path": "/usr/bin/crun"
}
},
"default-runtime": "crun"
}
Danach:
sudo systemctl restart docker
Prüfung:
docker info | grep "Default Runtime"
Einzelne Container mit crun starten
docker run --runtime=crun hello-world
containerd
containerd ist eine Industriestandard-Runtime, die nicht nur Docker, sondern auch Kubernetes und viele andere Tools nutzen. Es verwaltet:
- Images.
- Container-Prozesse.
- Speicher.
- Netzwerk-Plugins.
containerd allein startet keine Container für den Endnutzer, sondern stellt eine API bereit, die von Docker, Kubernetes oder der crictl-CLI genutzt wird.
Unterschiede im Alltag
| Aspekt | runc | crun |
|---|---|---|
| Sprache | Go | C |
| Grösse | grösser | kleiner |
| Startzeit | schnell | oft schneller |
| Speicher | etwas mehr | etwas weniger |
| cgroups v2 | unterstützt | optimiert |
| Verbreitung | sehr hoch | wachsend |
Für die meisten Homelabs spielt die Wahl kaum eine Rolle. Bei vielen Containern oder schwacher Hardware kann crun Vorteile bringen.
Sicherheit
- Runtime muss regelmässig aktualisiert werden.
- Sicherheitsfeatures wie Seccomp, AppArmor und cgroups sollten aktiv bleiben.
- Rootless Docker kann ebenfalls eine Runtime erfordern, die Rootless-Namespaces unterstützt.
Typische Stolpersteine
- crun nicht installiert: Container startet nicht.
- Falsche Pfade:
daemon.jsonzeigt auf nicht existierende Datei. - Inkompatibilitäten: Einige Tools erwarten runc.
- Kubernetes: crun muss in der CRI-Konfiguration eingetragen werden.
- Updates vergessen: Runtime bleibt auf alter Version.
Weiterführende Links und Infos
- BotServ.de Docker Befehle
- BotServ.de Docker Sicherheit
- BotServ.de Docker Rootless
- BotServ.de Docker Monitoring
FAQ: Container-Runtimes
Soll ich crun statt runc verwenden? Bei vielen Containern oder limitierter Hardware lohnt es sich. Sonst reicht runc.
Muss ich containerd manuell verwalten? Nein, Docker übernimmt das.
Ist crun sicher? Ja, es nutzt dieselben Linux-Sicherheitsmechanismen wie runc.
Wie wechsle ich die Runtime?
In /etc/docker/daemon.json die Runtime eintragen und Docker neu starten.
Was ist OCI? Open Container Initiative, der Standard, dem runc und crun folgen.
Quellen und weiterführende Literatur
- runc: https://github.com/opencontainers/runc
- crun: https://github.com/containers/crun
- containerd: https://containerd.io/
- OCI: https://opencontainers.org/
Zusammenfassung: Docker Container-Runtimes
Docker setzt auf containerd und eine Low-Level-Runtime wie runc oder crun. runc ist der bewährte Standard, crun bietet Vorteile in Geschwindigkeit und Ressourcenverbrauch. Für die meisten Homelabs reicht runc, aber crun ist bei vielen Containern oder limitierter Hardware eine gute Alternative. Das Wechseln der Runtime ist über daemon.json einfach. Wer die Architektur versteht, kann Docker besser debuggen, optimieren und sicherer betreiben.


