Sobes.tech
Middle

Su cosa si basa l'isolamento dei container in Docker?

sobes.tech AI

Risposta dell'AI

L’isolamento dei container in Docker si basa sulle seguenti tecnologie e meccanismi principali del kernel Linux:

  1. Namespaces (Spazi dei nomi): Permettono di isolare la visibilità e l’accesso alle risorse di sistema. Docker utilizza diversi tipi di Namespaces:

    • PID namespace: Isola i processi, ogni container vede solo i propri processi (PID 1 all’interno del container).
    • Net namespace: Isola lo stack di rete (interfacce di rete, indirizzi IP, porte, regole di routing).
    • Mnt namespace: Isola i punti di mount del filesystem.
    • UTS namespace: Isola hostname e nome di dominio.
    • IPC namespace: Isola le risorse di comunicazione tra processi (semafori, memoria condivisa).
    • User namespace: Isola gli ID utente e di gruppo.
  2. Control Groups (cgroups): Permettono di limitare e controllare il consumo di risorse di sistema (CPU, memoria, I/O, traffico di rete) per gruppi di processi. Docker utilizza cgroups per:

    • Limitare la quantità di CPU o la frazione di tempo di CPU.
    • Limitare la memoria disponibile.
    • Prioritizzare o limitare l’input/output del disco.
    • Limitare il traffico di rete.
  3. Union File Systems (UnionFS): Creano strati del filesystem. Docker utilizza UnionFS come OverlayFS, AUFS (più vecchio), Btrfs. Permettono:

    • Creare strati leggeri per le immagini Docker.
    • Utilizzare efficientemente lo spazio su disco condividendo gli strati di base.
    • Quando si registrano modifiche nel container, creare strati COW (Copy-on-Write) senza modificare l’immagine di base.
  4. Seccomp (Modalità di calcolo sicuro): Limita le chiamate di sistema (syscalls) che un processo può eseguire all’interno del container, riducendo così la superficie di attacco. Docker utilizza profili seccomp di default per la maggior parte dei container.

  5. AppArmor / SELinux: Per una maggiore sicurezza e isolamento, possono essere utilizzati moduli di controllo di accesso obbligatorio (MAC), come AppArmor o SELinux. Essi forniscono un controllo più granulare su cosa i processi possono fare (ad esempio, accesso ai file, risorse di rete). Docker può usare profili AppArmor o SELinux se sono configurati sul sistema host.