EMZETT.
Login

Container unter Linux: Namespaces und cgroups

Kurz: Ein Container ist kein kleiner Rechner, sondern ein normaler Linux-Prozess mit Scheuklappen: Namespaces begrenzen, was er sieht, cgroups, wie viel er verbrauchen darf.

Genauer: Container teilen sich den Kernel des Hosts. Das macht sie leichtgewichtig und schnell, aber weniger stark isoliert als virtuelle Maschinen.

Im Detail

  • Namespaces: Eigene Sicht auf Prozesse (PID), Netzwerk (net), Dateisysteme (mnt), Benutzer (user), Hostnamen (uts), IPC, cgroup.
  • cgroups: Begrenzen und messen CPU, Speicher, I/O, Anzahl der Prozesse.
  • Overlay-Dateisystem: Ein Image besteht aus Schichten, der Container fügt oben eine beschreibbare hinzu.
  • Image und Container: Image = unveränderliche Vorlage, Container = laufende Instanz.
  • Laufzeiten: containerd, CRI-O, runc, crun. Werkzeuge: docker, Podman, nerdctl.
  • Sicherheit: Rootless-Container, seccomp-Filter, Capabilities, AppArmor/SELinux (SELinux und AppArmor). Ein Container-Ausbruch gibt Zugriff auf den Kernel des Hosts.
  • Orchestrierung: Kubernetes verwaltet viele Container auf vielen Rechnern.
  • Unterschied zur VM: Keine eigene Kernel-Instanz, keine eigene Hardware-Emulation.

Siehe auch: Virtualisierung mit KVM und QEMU, Podman und Docker im Vergleich