Sobes.tech
Middle

Na čemu se zasniva izolacija kontejnera u Dockeru?

sobes.tech АИ

Одговор од АИ

Izolacija kontejnera u Docker-u zasniva se na sledećim osnovnim tehnologijama i mehanizmima Linux jezgra:

  1. Namespaces (Imenski prostori): Omogućavaju izolaciju vidljivosti i pristupa sistemskim resursima. Docker koristi različite tipove Namespaces:

    • PID namespace: Izoluje procese, svaki kontejner vidi samo svoje procese (PID 1 unutar kontejnera).
    • Net namespace: Izoluje mrežni sloj (mrežne interfejse, IP adrese, portove, pravila rutiranja).
    • Mnt namespace: Izoluje tačke montiranja fajl sistema.
    • UTS namespace: Izoluje hostname i domen ime.
    • IPC namespace: Izoluje resurse za međuprocesnu komunikaciju (semafore, deljenu memoriju).
    • User namespace: Izoluje ID-ove korisnika i grupa.
  2. Control Groups (cgroups): Omogućavaju ograničavanje i kontrolu potrošnje sistemskih resursa (CPU, memorija, I/O, mrežni saobraćaj) za grupe procesa. Docker koristi cgroups za:

    • Ograničavanje broja CPU ili udelu od CPU vremena.
    • Ograničavanje dostupne memorije.
    • Prioritet ili ograničenje ulaza/izlaza diska.
    • Ograničenje mrežnog saobraćaja.
  3. Union File Systems (UnionFS): Kreiraju slojeve fajl sistema. Docker koristi UnionFS kao OverlayFS, AUFS (stariji), Btrfs. Oni omogućavaju:

    • Kreiranje lakih slojeva za Docker slike.
    • Efikasno korišćenje diskovnog prostora putem zajedničkog korišćenja osnovnih slojeva.
    • Pri zapisivanju promena u kontejneru, kreiranje COW (Copy-on-Write) slojeva, bez menjanja osnovne slike.
  4. Seccomp (Sigurnosni režim računanja): Ograničava sistemske pozive (syscalls) koje proces može da izvrši unutar kontejnera, čime se smanjuje površina napada. Docker koristi podrazumevane seccomp profile za većinu kontejnera.

  5. AppArmor / SELinux: Za dodatnu sigurnost i izolaciju, mogu se koristiti moduli za obaveznu kontrolu pristupa (MAC), poput AppArmor ili SELinux. Oni pružaju finiju kontrolu nad onim što procesi mogu da rade (npr. pristup fajlovima, mrežnim resursima). Docker može koristiti profile AppArmor ili SELinux ako su oni konfigurisani na host sistemu.