Unterschied LXC zu VM
Version vom 12. Februar 2026, 09:00 Uhr von Maximilian.pottgiesser (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<pre> # LXC Container Architektur – Userspace, Namespaces & Kernel ``` ╔═══════════════════════════…“)
# LXC Container Architektur – Userspace, Namespaces & Kernel
```
╔══════════════════════════════════════════════════════════════════════════════╗
║ USERSPACE ║
║ ║
║ ┌─── Container A ──────────────┐ ┌─── Container B ──────────────┐ ║
║ │ │ │ │ ║
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║
║ │ │ Anwendungen & Dienste │ │ │ │ Anwendungen & Dienste │ │ ║
║ │ │ Apache, SSH, DB, ... │ │ │ │ Pi-hole, Nginx, ... │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Systembibliotheken │ │ │ │ Systembibliotheken │ │ ║
║ │ │ glibc, openssl, ... │ │ │ │ glibc, openssl, ... │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Paketverwaltung │ │ │ │ Paketverwaltung │ │ ║
║ │ │ apt, dpkg │ │ │ │ apt, dpkg │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Init-System (systemd) │ │ │ │ Init-System (systemd) │ │ ║
║ │ ├────────────────────────┤ │ │ ├────────────────────────┤ │ ║
║ │ │ Root-Dateisystem │ │ │ │ Root-Dateisystem │ │ ║
║ │ │ /bin /etc /usr /var │ │ │ │ /bin /etc /usr /var │ │ ║
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║
║ │ │ │ │ ║
║ │ Eigene User, Hostname, │ │ Eigene User, Hostname, │ ║
║ │ IP-Adresse, Prozesse │ │ IP-Adresse, Prozesse │ ║
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║
║ │ │ ║
╠═════════════════╪═══════════════════════════════════╪══════════════════════╣
║ │ NAMESPACES & CGROUPS │ ║
║ │ (Isolation & Begrenzung) │ ║
║ ▼ ▼ ║
║ ┌─── Namespaces CT-A ─────────┐ ┌─── Namespaces CT-B ─────────┐ ║
║ │ │ │ │ ║
║ │ PID → Eigene Prozesse │ │ PID → Eigene Prozesse │ ║
║ │ NET → Eigenes Netzwerk │ │ NET → Eigenes Netzwerk │ ║
║ │ MNT → Eigenes Dateisys. │ │ MNT → Eigenes Dateisys. │ ║
║ │ USER → Eigene User/Root │ │ USER → Eigene User/Root │ ║
║ │ UTS → Eigener Hostname │ │ UTS → Eigener Hostname │ ║
║ │ IPC → Eigene IPC-Kanäle │ │ IPC → Eigene IPC-Kanäle │ ║
║ │ │ │ │ ║
║ ├──────────────────────────────┤ ├──────────────────────────────┤ ║
║ │ cgroup: max 2 CPU, 2GB RAM │ │ cgroup: max 1 CPU, 1GB RAM │ ║
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║
║ │ │ ║
║ │ Namespaces = Was sieht er? │ ║
║ │ cgroups = Wieviel darf er? │ ║
║ │ │ ║
╠═════════════════╪═══════════════════════════════════╪══════════════════════╣
║ │ │ ║
║ ▼ ▼ ║
║ ┌──────────────────────────────────────────────────────────────────┐ ║
║ │ GEMEINSAMER KERNEL │ ║
║ │ (z.B. Linux 6.1) │ ║
║ │ │ ║
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │ ║
║ │ │ Prozess- │ │Speicher- │ │Netzwerk- │ │ Dateisystem- │ │ ║
║ │ │scheduler │ │verwaltung│ │ Stack │ │ treiber │ │ ║
║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ │ ║
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │ ║
║ │ │ I/O- │ │ Geräte- │ │Sicherheit│ │ Kernel-Module │ │ ║
║ │ │scheduler │ │ treiber │ │ (SELinux)│ │ (z.B. ZFS) │ │ ║
║ │ └──────────┘ └──────────┘ └──────────┘ └───────────────────┘ │ ║
║ └──────────────────────────────────────────────────────────────────┘ ║
║ ║
╠════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌──────────────────────────────────────────────────────────────────┐ ║
║ │ HARDWARE │ ║
║ │ CPU │ RAM │ NIC │ Disk │ ║
║ └──────────────────────────────────────────────────────────────────┘ ║
║ ║
╚════════════════════════════════════════════════════════════════════════════╝
Leserichtung: ↑ Userspace (Was der Container "besitzt")
↑ Namespaces/cgroups (Was ihn isoliert & begrenzt)
↑ Kernel (Was er sich teilt)
↑ Hardware (Was tatsächlich existiert)
Zum Vergleich – VM-Architektur:
╔════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ┌─── VM A ─────────────────────┐ ┌─── VM B ─────────────────────┐ ║
║ │ Anwendungen & Dienste │ │ Anwendungen & Dienste │ ║
║ │ Systembibliotheken │ │ Systembibliotheken │ ║
║ │ Init-System │ │ Init-System │ ║
║ │ Root-Dateisystem │ │ Root-Dateisystem │ ║
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║
║ │ │ ██ EIGENER KERNEL ██ │ │ │ │ ██ EIGENER KERNEL ██ │ │ ║
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║
║ │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ ║
║ │ │ Emulierte Hardware │ │ │ │ Emulierte Hardware │ │ ║
║ │ │ vCPU, vRAM, vNIC,vDisk│ │ │ │ vCPU, vRAM, vNIC,vDisk│ │ ║
║ │ └────────────────────────┘ │ │ └────────────────────────┘ │ ║
║ └──────────────┬───────────────┘ └──────────────┬───────────────┘ ║
║ │ │ ║
║ ┌──────────────┴───────────────────────────────────┴───────────────┐ ║
║ │ HYPERVISOR (z.B. KVM/QEMU) │ ║
║ ├──────────────────────────────────────────────────────────────────┤ ║
║ │ HOST-KERNEL │ ║
║ ├──────────────────────────────────────────────────────────────────┤ ║
║ │ HARDWARE │ ║
║ └──────────────────────────────────────────────────────────────────┘ ║
║ ║
║ Jede VM hat einen EIGENEN Kernel + emulierte Hardware ║
║ → Mehr Overhead, aber vollständige Isolation ║
║ → Verschiedene Betriebssysteme möglich (Linux, Windows, BSD) ║
║ ║
╚════════════════════════════════════════════════════════════════════════════╝
```