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