Skip to main content

Як Docker забезпечує ізоляцію процесів?

Docker забезпечує ізоляцію на рівні ядра Linux за допомогою двох ключових механізмів: namespaces і cgroups.

1. Namespaces - ізолюють "видимість" світу для процесу

Namespaces дають кожному контейнеру власний простір імен. Тобто процес всередині контейнера не бачить ресурси інших процесів чи системи загалом.

Використовуються такі типи namespaces:

NamespaceЩо ізолює
PIDТаблицю процесів - контейнер бачить тільки свої процеси
NETМережеві інтерфейси, маршрути, iptables
IPCЧерги повідомлень, shared memory
UTSHostname, domain name
MNTТочки монтування і файлову систему
USERКористувачів і UID'и

Ефект: у кожного контейнера - свій міні-світ.

2. Cgroups - обмежують ресурси

Control Groups керують тим, скільки ресурсів може споживати контейнер, щоб він не "з'їв" усе.

Cgroups дозволяють задавати ліміти на:

  • CPU
  • RAM
  • I/O
  • Network (опосередковано, через tc)
  • кількість процесів тощо

Ефект: навіть якщо застосунок у контейнері впав у нескінченний цикл, він не завалить увесь сервер.

3. Rootfs + OverlayFS - файлова ізоляція

Docker використовує копіювання при записі (CoW) і шари overlay FS, щоб кожен контейнер мав логічно окрему кореневу файлову систему, навіть якщо фізично шари спільні.

4. Seccomp, AppArmor, SELinux - безпека

Додатково Docker може обмежувати системні виклики і права:

  • Seccomp - забороняє небезпечні syscalls
  • AppArmor/SELinux - обмеження доступу до системних ресурсів

Підсумок для middle-рівня:

Docker забезпечує ізоляцію процесів, мережі, користувачів і файлової системи через namespaces, обмеження ресурсів через cgroups, а безпеку - через seccomp, AppArmor/SELinux. Завдяки цьому контейнер працює як окреме середовище, залишаючись при цьому легким, тому що ядро ОС спільне.

Якщо хочеш, можу так само коротко розібрати "чим відрізняється pid namespace від chroot" або "чому контейнер не дорівнює безпеці як VM".

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.