Sobes.tech
Middle

На какво се основава изолацията на контейнерите в Docker?

sobes.tech AI

Отговор от AI

Изолацията на контейнери в Docker се базира на следните основни технологии и механизми на ядрото Linux:

  1. Namespaces (Именни пространства): Позволяват изолиране на видимостта и достъпа до системните ресурси. Docker използва различни типове Namespaces:

    • PID namespace: Изолира процесите, всеки контейнер вижда само своите процеси (PID 1 вътре в контейнера).
    • Net namespace: Изолира мрежовия стек (мрежови интерфейси, IP адреси, портове, правила за маршрутизиране).
    • Mnt namespace: Изолира точките за монтиране на файловата система.
    • UTS namespace: Изолира hostname и домейн име.
    • IPC namespace: Изолира ресурсите за междупроцесна комуникация (семафори, споделена памет).
    • User namespace: Изолира ID на потребителите и групите.
  2. Control Groups (cgroups): Позволяват ограничаване и контрол на потреблението на системните ресурси (CPU, памет, I/O, мрежов трафик) за групи процеси. Docker използва cgroups за:

    • Ограничаване на броя CPU или дял от процесорното време.
    • Ограничаване на наличната памет.
    • Приоритизация или ограничаване на входа/изхода на диска.
    • Ограничаване на мрежовия трафик.
  3. Union File Systems (UnionFS): Създават слоеве на файловата система. Docker използва UnionFS като OverlayFS, AUFS (по-стар), Btrfs. Те позволяват:

    • Създаване на леки слоеве за Docker образи.
    • Ефективно използване на дисковото пространство чрез споделяне на базовите слоеве.
    • При записване на промени в контейнера, създаване на COW (Copy-on-Write) слоеве, без да се променя базовият образ.
  4. Seccomp (Мод за сигурно изчисление): Ограничва системните извиквания (syscalls), които процесът може да изпълнява вътре в контейнера, намалявайки повърхността за атака. Docker използва профили seccomp по подразбиране за повечето контейнери.

  5. AppArmor / SELinux: За допълнителна сигурност и изолация могат да се използват модули за задължителен контрол на достъпа (MAC), като AppArmor или SELinux. Те предоставят по-фин контрол върху това, което процесите могат да правят (например, достъп до файлове, мрежови ресурси). Docker може да използва профили на AppArmor или SELinux, ако са настроени на хост системата.