EMZETT.
Login

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