← Усі запитання
Що таке Docker і як він працює?
ЧастоПочатковийDevOps

Що таке Docker і як він працює?

Коротка відповідь
Docker — це відкрита платформа для пакування й запуску застосунків у контейнерах: ізольованих процесах, які спільно використовують ядро Linux хоста через простори імен і контрольні групи, замість повноцінної віртуальної машини. Вона працює за клієнт-серверною моделлю: клієнт docker надсилає команди через REST API демону dockerd, який збирає образи та запускає з них контейнери.

Чому це існує? Docker дозволяє вам упакувати програму з усіма її залежностями (бібліотеки, конфігурація, середовище виконання) в єдиний артефакт — образ — і запускати його ідентично на ноутбуці розробника, у CI та в робочому режимі. Це вирішує класичну проблему "працює на моїй машині".

Контейнери проти віртуальних машин. Віртуальна машина віртуалізує апаратне забезпечення та постачає всю гостьову ОС із власним ядром. Контейнер — це ізольований процес, який використовує ядро хоста. У результаті контейнери легші, запускаються за частки секунди та використовують менше ресурсів. Але контейнер — це не легка віртуальна машина: він прив’язаний до ядра хоста, і його межа ізоляції слабша, ніж у віртуальної машини. Віртуальна машина має апаратно-примусову ізоляцію, тоді як уразливість спільного ядра потенційно може бути виведена з контейнера — це компроміс між швидкістю та щільністю. Хост має відповідати типу контейнера: контейнерам Linux потрібне ядро ​​Linux, контейнерам Windows – ядро ​​Windows. У macOS і Windows Docker Desktop прозоро запускає невелику віртуальну машину Linux (наприклад, через WSL2), тому контейнери Linux спільно використовують ядро ​​цієї віртуальної машини, а не ядро ​​вашої ОС.

Архітектура (клієнт-сервер). Відповідно до документації Docker:

  • Клієнт docker є основним способом взаємодії користувачів із Docker; такі команди, як docker run, надсилаються демону.
  • Демон dockerd «виконує важку роботу» зі створення, запуску та розповсюдження контейнерів і керує такими об’єктами, як зображення, контейнери, мережі та томи.
  • Клієнт спілкується з демоном через REST API через сокет UNIX або мережевий інтерфейс, тому вони можуть працювати на різних машинах.
  • реєстр зберігає зображення; загальнодоступним за замовчуванням є Docker Hub.

Зображення та контейнери. Зручна аналогія: образ схожий на клас (або програму на диску), а контейнер є його екземпляром (запущений процес); Ви можете почати багато контейнерів з одного зображення.

  • Зображення – це шаблон, доступний лише для читання, з інструкціями щодо створення контейнера, побудованого з шарів. Він визначається Dockerfile; коли ви змінюєте його, перебудовуються лише змінені шари.
  • Контейнер - це екземпляр зображення, який можна запускати. Поверх шарів зображення, призначених лише для читання, додається тонкий записуваний шар (копіювання при записі); все, що там записане, втрачається, коли контейнер видаляється — саме тому для постійних даних потрібні томи.

Як працює ізоляція (під капотом). dockerd не викликає безпосередньо ядро ​​— воно делегує керування життєвим циклом контейнера containerd, який викликає середовище виконання OCI; у Docker типовим є runc, але середовище виконання підключається (crun, gVisor, Kata тощо). Фактична ізоляція походить від функцій ядра Linux:

  • Простори імен ізолюють ресурси (на сторінці man7 є 8 типів: PID, мережа, монтування, UTS, IPC, користувач, контрольна група, час). Процес «бачить» лише свої власні PID, власний мережевий стек тощо.
  • cgroups (контрольні групи) обмежують і обліковують використання ресурсів (ЦП, пам'ять, введення/виведення).

Поширені подальші дії. Шари зображень кешуються; docker compose запускає багатоконтейнерні програми; дані зберігаються через томи (за замовчуванням контейнер є ефемерним); і OCI стандартизує формат зображення (image-spec), середовище виконання (runtime-spec) і протокол розповсюдження реєстру (distribution-spec) — ці три специфікації забезпечують взаємодію екосистеми.

DockerКонтейнери

Завантаж просто зараз і протестуй безкоштовно для своїх завдань!

Завантажити для Windows
10 15 безкоштовних кредитів • Картка не потрібнаВерсія: Завантаження…

Без встановлення - завантажив і запустив. Без реєстрації - вхід через Google.