Архітектура Docker та її компоненти для початківців

Давайте глибше розглянемо архітектуру Docker та її складові.

Вважаю, ви вже маєте базове розуміння Docker. Якщо це не так, пропоную ознайомитися з попередньою публікацією.

Гадаю, вам зрозуміла важливість Docker для DevOps. За цим чудовим інструментом стоїть продумана, добре розроблена архітектура, чи не так?

Перш ніж ми перейдемо до її вивчення, дозвольте порівняти попередні та сучасні системи віртуалізації.

Порівняння традиційної та нової віртуалізації

Раніше віртуальні машини (ВМ) були основним інструментом. Кожна ВМ мала власну операційну систему (ОС), яка займала значний обсяг дискового простору, що робило її об’ємною.

Зараз, з використанням контейнерів Docker, ми маємо одну ОС, а ресурси розподіляються між контейнерами. Це робить їх легшими та швидкими у запуску, буквально за кілька секунд.

Структура Docker

Нижче представлено спрощену схему архітектури Docker.

Дозвольте детально розглянути компоненти архітектури Docker.

Docker Engine

Це головний елемент усього Docker. Docker Engine є програмою, що працює за принципом клієнт-серверної архітектури. Він встановлюється на основному комп’ютері. Docker Engine має три основні частини:

  • Сервер: демон Docker, відомий як dockerd. Його завданням є створення та керування Docker образами, контейнерами, мережами та іншими об’єктами.
  • REST API: використовується для передачі інструкцій демону Docker щодо виконання дій.
  • Інтерфейс командного рядка (CLI): виступає в ролі клієнта для введення команд Docker.

Docker Client

Користувачі взаємодіють з Docker через клієнта. Коли користувач вводить команди Docker, клієнт відправляє їх демону Docker для виконання. Команди Docker використовують Docker API. Клієнт Docker може взаємодіяти з кількома демонами одночасно.

Реєстри Docker

Тут зберігаються Docker образи. Це можуть бути публічні або приватні реєстри. Docker Hub є публічним реєстром за замовчуванням. Ви також можете створити та використовувати власний приватний реєстр.

Команди docker pull або docker run витягують необхідний образ з налаштованого реєстру. Команда docker push зберігає образ у вказаному реєстрі.

Об’єкти Docker

Під час роботи з Docker ви використовуєте образи, контейнери, томи, мережі. Всі вони є об’єктами Docker.

Зображення

Docker образи — це шаблони “тільки для читання” з інструкціями для створення контейнерів Docker. Образ можна отримати з Docker Hub та використовувати як є, або ви можете додати додаткові інструкції та створити новий, модифікований образ. Також можна створювати власні образи за допомогою Dockerfile. Створіть Dockerfile зі всіма необхідними інструкціями для створення контейнера та запустіть його. Це призведе до створення власного Docker образу.

Образ Docker складається з базового шару, доступного лише для читання, та верхнього шару, який можна змінювати. При редагуванні Dockerfile та його перебудові, лише змінені частини перебудовуються на верхньому рівні.

Контейнери

Після запуску Docker образу створюється контейнер Docker. Усі застосунки та їхнє середовище виконуються всередині цього контейнера. Docker API або CLI можна використовувати для запуску, зупинки та видалення контейнерів Docker.

Приклад команди для запуску контейнера Ubuntu:

docker run -i -t ubuntu /bin/bash

Томи

Постійні дані, створені Docker та використані контейнерами, зберігаються у томах. Управління ними повністю здійснюється Docker через CLI або API. Томи працюють як у Windows, так і в Linux контейнерах. Замість зберігання даних на доступному для запису шарі контейнера, краще використовувати томи. Вміст томів не залежить від життєвого циклу контейнерів, тому використання томів не збільшує розмір контейнера.

Для запуску контейнера з томом використовуйте параметри -v або –mount. У прикладі нижче том geekvolume використовується з контейнером techukraine.net.

docker run -d --name techukraine.net  -v geekvolume:/app nginx:latest

Мережі

Мережа Docker — це канал, через який спілкуються усі ізольовані контейнери. Docker пропонує п’ять основних мережевих драйверів:

  • Bridge: стандартний мережевий драйвер для контейнерів. Його використовують, коли програми працюють в автономних контейнерах, тобто, коли кілька контейнерів взаємодіють з тим самим хостом Docker.
  • Host: цей драйвер виключає мережеву ізоляцію між контейнерами Docker та хостом. Використовується, коли немає потреби в мережевій ізоляції між хостом і контейнером.
  • Overlay: ця мережа дозволяє сервісам рою (swarm) спілкуватися між собою. Застосовується, коли контейнери працюють на різних хостах Docker або коли сервіси рою створюються різними програмами.
  • None: цей драйвер відключає всі мережі.
  • Macvlan: цей драйвер присвоює контейнерам MAC-адресу, що дозволяє їм виглядати як фізичні пристрої. Трафік між контейнерами направляється через їхні MAC-адреси. Використовується, коли необхідно, щоб контейнери виглядали як фізичні пристрої, наприклад, під час міграції налаштувань віртуальних машин.

Висновок

Сподіваюсь, ця стаття допомогла вам краще зрозуміти архітектуру Docker та її важливі складові. Рекомендую глибше вивчати Docker, а якщо вас цікавить практичне навчання, пропоную звернути увагу на цей курс Docker Mastery.

Чи сподобався вам матеріал? Поділіться ним зі своїми друзями!