Sobes.tech
Middle

Waarop is de isolatie van containers in Docker gebaseerd?

sobes.tech AI

Antwoord van AI

Containerisolatie in Docker is gebaseerd op de volgende kerntechnologieën en mechanismen van Linux:

  1. Namespaces (Namenruimtes): Hiermee wordt de zichtbaarheid en toegang tot systeembronnen geïsoleerd. Docker gebruikt verschillende types Namespaces:

    • PID namespace: Isolatie van processen, elke container ziet alleen zijn eigen processen (PID 1 binnen de container).
    • Net namespace: Isolatie van de netwerkstack (netwerkinterfaces, IP-adressen, poorten, routeringsregels).
    • Mnt namespace: Isolatie van de mountpunten van het bestandssysteem.
    • UTS namespace: Isolatie van de hostname en domeinnaam.
    • IPC namespace: Isolatie van inter-process communicatiebronnen (semaforen, gedeeld geheugen).
    • User namespace: Isolatie van gebruikers- en groeps-ID's.
  2. Control Groups (cgroups): Hiermee kunnen systeembronnen (CPU, geheugen, I/O, netwerkverkeer) worden beperkt en gecontroleerd voor procesgroepen. Docker gebruikt cgroups voor:

    • Beperking van het aantal CPU's of de CPU-tijd.
    • Beperking van het beschikbare geheugen.
    • Prioritering of beperking van disk I/O.
    • Beperking van netwerkverkeer.
  3. Union File Systems (UnionFS): Creëren lagen van het bestandssysteem. Docker gebruikt UnionFS zoals OverlayFS, AUFS (ouder), Btrfs. Ze maken het mogelijk:

    • Lichte lagen te creëren voor Docker-afbeeldingen.
    • Efficiënt gebruik te maken van schijfruimte door gedeeld gebruik van baselagen.
    • Bij het schrijven van wijzigingen in de container, COW-lagen (Copy-on-Write) te maken zonder de basisafbeelding te wijzigen.
  4. Seccomp (Secure Computing Mode): Beperkt de systeemoproepen (syscalls) die een proces binnen de container kan uitvoeren, waardoor het aanvaloppervlak wordt verkleind. Docker gebruikt standaard seccomp-profielen voor de meeste containers.

  5. AppArmor / SELinux: Voor extra beveiliging en isolatie kunnen modules voor verplichte toegangscontrole (MAC), zoals AppArmor of SELinux, worden gebruikt. Ze bieden meer granulariteit over wat processen kunnen doen (bijvoorbeeld toegang tot bestanden, netwerkbronnen). Docker kan profielen van AppArmor of SELinux gebruiken als ze op het hostsysteem zijn ingesteld.