Що таке Docker і як працюють контейнери

Автор: Опубліковано

Коротко: Docker — платформа для збирання та запуску застосунків у контейнерах, тобто ізольованих середовищах із потрібними бібліотеками й інструментами. Вона допомагає відтворити подібні умови на комп’ютері розробника, під час тестування та на сервері. Не замінює хостинг і не є повноцінною віртуальною машиною.

Як працює Docker і що таке контейнер

Застосунку потрібен не лише код, а й середовище виконання: наприклад, певна версія Python, бібліотеки та системні інструменти. Якщо ці складники на різних комп’ютерах відрізняються, програма може працювати в однієї людини, а в іншої — видавати помилки. Docker допомагає описати ці залежності й щоразу підготувати їх однаково.

Контейнер — це запущений процес або група процесів, ізольованих від решти системи. Застосунок бачить власну файлову систему й має окреме робоче середовище. Також можна встановити обмеження ресурсів, зокрема пам’яті та потужності процесора.

Контейнери спільно використовують ядро системи — частину, яка відповідає, зокрема, за роботу процесів і обладнання. У типовому середовищі Linux вони використовують ядро хост-системи. Для запуску контейнерів Linux через Docker Desktop на macOS і Windows потрібне середовище Linux, яке забезпечує віртуальна машина або механізм на кшталт WSL 2.

Docker зменшує відмінності між середовищами, але не усуває їх повністю. Архітектура процесора, конфігурація, доступ до мережі та зовнішні сервіси, з якими з’єднується застосунок, і далі мають значення.

Образ, Dockerfile і том — основні поняття

Щоб зрозуміти типовий проєкт, достатньо розрізняти кілька складників:

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

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

Docker і віртуальна машина

Віртуальна машина запускає окрему операційну систему з власним ядром. Контейнеру не потрібна повноцінна гостьова система, оскільки він використовує спільне ядро. Тому контейнери зазвичай запускаються швидше й витрачають менше ресурсів на забезпечення своєї роботи, ніж повноцінні віртуальні машини.

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

Ці рішення часто працюють разом: на орендованому віртуальному сервері можна запустити Docker, а в ньому — кілька контейнерів. Хостинг тоді надає ресурси, а Docker упорядковує спосіб запуску застосунків.

Приклад: сайт із застосунком і базою даних

Припустімо, ви створюєте сайт з особистим кабінетом клієнта. Проєкту потрібні застосунок на Python і база PostgreSQL. Без контейнерів кожен учасник команди має самостійно встановити сумісні версії обох складників і налаштувати їхню взаємодію.

За допомогою Docker Compose можна описати два сервіси: застосунок і базу даних. Кожен працює в окремому контейнері, а обмін даними відбувається через спільну мережу. Дані PostgreSQL зберігаються в томі, а вибраний порт застосунку стає доступним на комп’ютері користувача.

Типовий робочий процес виглядає так:

  1. Команда записує інструкції для збирання застосунку у файлі Dockerfile.
  2. У файлі Compose визначає сервіси, мережу, том і необхідні налаштування.
  3. Розробник завантажує проєкт, доповнює локальну конфігурацію та виконує docker compose up --build.
  4. Docker збирає образ застосунку, завантажує потрібний образ бази даних і запускає контейнери.

Команда спрацює лише в належно підготовленому проєкті та за умови, що Docker працює. Під час розгортання на сервері все одно потрібно подбати про паролі, сертифікат TLS, резервні копії, оновлення та моніторинг. Локальна конфігурація не стає автоматично безпечною конфігурацією для виробничого середовища.

Коли варто використовувати Docker і з чого почати

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

Для простого статичного сайту або окремого скрипту додаткові файли й робота з контейнерами можуть бути зайвими витратами зусиль. Звичайний спільний хостинг також не обов’язково дозволяє запускати Docker — це потрібно уточнити в постачальника.

Для початку виберіть невеликий проєкт і запустіть один сервіс. Використовуйте образ із надійного джерела, ознайомтеся з його документацією та відкривайте лише потрібні порти. В офіційній документації Docker перевірте спосіб встановлення для своєї системи й актуальні ліцензійні умови Docker Desktop, особливо перед використанням у компанії.

Дивіться також: Що таке CDN?

Читайте також

Дізнайтеся, як PHP-FPM обробляє запити PHP, чим відрізняється від вебсервера та як налаштувати процеси під трафік і ресурси хостингу.
Дізнайтеся, як BIND обслуговує DNS, чим відрізняються його серверні ролі та коли варто розгортати його самостійно замість керованої послуги.
Дізнайтеся, що означають польський реєстр і номер REGON, чим вони відрізняються від NIP та KRS і як перевірити дані підприємства.