На какво се основава изолацията на контейнерите в Docker?
sobes.tech AI
Отговор от AI
Изолацията на контейнери в Docker се базира на следните основни технологии и механизми на ядрото Linux:
-
Namespaces (Именни пространства): Позволяват изолиране на видимостта и достъпа до системните ресурси. Docker използва различни типове Namespaces:
PID namespace: Изолира процесите, всеки контейнер вижда само своите процеси (PID 1 вътре в контейнера).Net namespace: Изолира мрежовия стек (мрежови интерфейси, IP адреси, портове, правила за маршрутизиране).Mnt namespace: Изолира точките за монтиране на файловата система.UTS namespace: Изолира hostname и домейн име.IPC namespace: Изолира ресурсите за междупроцесна комуникация (семафори, споделена памет).User namespace: Изолира ID на потребителите и групите.
-
Control Groups (cgroups): Позволяват ограничаване и контрол на потреблението на системните ресурси (CPU, памет, I/O, мрежов трафик) за групи процеси. Docker използва cgroups за:
- Ограничаване на броя CPU или дял от процесорното време.
- Ограничаване на наличната памет.
- Приоритизация или ограничаване на входа/изхода на диска.
- Ограничаване на мрежовия трафик.
-
Union File Systems (UnionFS): Създават слоеве на файловата система. Docker използва UnionFS като OverlayFS, AUFS (по-стар), Btrfs. Те позволяват:
- Създаване на леки слоеве за Docker образи.
- Ефективно използване на дисковото пространство чрез споделяне на базовите слоеве.
- При записване на промени в контейнера, създаване на COW (Copy-on-Write) слоеве, без да се променя базовият образ.
-
Seccomp (Мод за сигурно изчисление): Ограничва системните извиквания (syscalls), които процесът може да изпълнява вътре в контейнера, намалявайки повърхността за атака. Docker използва профили seccomp по подразбиране за повечето контейнери.
-
AppArmor / SELinux: За допълнителна сигурност и изолация могат да се използват модули за задължителен контрол на достъпа (MAC), като AppArmor или SELinux. Те предоставят по-фин контрол върху това, което процесите могат да правят (например, достъп до файлове, мрежови ресурси). Docker може да използва профили на AppArmor или SELinux, ако са настроени на хост системата.