Як Docker забезпечує ізоляцію процесів?
Docker забезпечує ізоляцію на рівні ядра Linux за допомогою двох ключових механізмів: namespaces і cgroups.
1. Namespaces - ізолюють "видимість" світу для процесу
Namespaces дають кожному контейнеру власний простір імен. Тобто процес всередині контейнера не бачить ресурси інших процесів чи системи загалом.
Використовуються такі типи namespaces:
| Namespace | Що ізолює |
|---|---|
| PID | Таблицю процесів - контейнер бачить тільки свої процеси |
| NET | Мережеві інтерфейси, маршрути, iptables |
| IPC | Черги повідомлень, shared memory |
| UTS | Hostname, 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".
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.