Container-Interna: Namespaces und cgroups
Kurz: Ein Container ist kein Mini-Computer, sondern ein normaler Linux-Prozess, der mit Namespaces vom Rest abgeschottet und mit cgroups in seinen Ressourcen begrenzt wird.
Genauer: Namespaces geben dem Prozess eine eigene Sicht auf System-Ressourcen: eigene Prozess-IDs, Netzwerk, Dateisystem, Hostname, Benutzer. Cgroups begrenzen CPU, Speicher und I/O. Ein Overlay-Dateisystem schichtet das Image aus nur lesbaren Ebenen und einer beschreibbaren obersten Ebene.
Im Detail
- Namespaces: pid, net, mnt, uts, ipc, user, cgroup.
- cgroups: Obergrenzen, Gewichtung, Abrechnung. Überschreitet ein Container den Speicher, beendet ihn der Kernel (OOM).
- Image: Ebenen (Layer), per Hash adressiert, geteilt zwischen Containern.
- Isolation: Alle Container teilen sich den Kernel. Schwächer als eine VM; Sicherheit durch Capabilities, seccomp, rootless.
- VM vs. Container: VM bringt eigenes Betriebssystem mit, Container nur Prozess und Bibliotheken.
- Runtimes: runc, containerd, Podman; Orchestrierung mit Kubernetes.
Siehe auch: Systemaufrufe und Kernel-Modus, Container-Sicherheit