Що таке Docker і як працюють контейнери
Автор: Редакція Domeny.ForSale Опубліковано
Коротко: Docker — платформа для збирання та запуску застосунків у контейнерах, тобто ізольованих середовищах із потрібними бібліотеками й інструментами. Вона допомагає відтворити подібні умови на комп’ютері розробника, під час тестування та на сервері. Не замінює хостинг і не є повноцінною віртуальною машиною.
Як працює Docker і що таке контейнер
Застосунку потрібен не лише код, а й середовище виконання: наприклад, певна версія Python, бібліотеки та системні інструменти. Якщо ці складники на різних комп’ютерах відрізняються, програма може працювати в однієї людини, а в іншої — видавати помилки. Docker допомагає описати ці залежності й щоразу підготувати їх однаково.
Контейнер — це запущений процес або група процесів, ізольованих від решти системи. Застосунок бачить власну файлову систему й має окреме робоче середовище. Також можна встановити обмеження ресурсів, зокрема пам’яті та потужності процесора.
Контейнери спільно використовують ядро системи — частину, яка відповідає, зокрема, за роботу процесів і обладнання. У типовому середовищі Linux вони використовують ядро хост-системи. Для запуску контейнерів Linux через Docker Desktop на macOS і Windows потрібне середовище Linux, яке забезпечує віртуальна машина або механізм на кшталт WSL 2.
Docker зменшує відмінності між середовищами, але не усуває їх повністю. Архітектура процесора, конфігурація, доступ до мережі та зовнішні сервіси, з якими з’єднується застосунок, і далі мають значення.
Образ, Dockerfile і том — основні поняття
Щоб зрозуміти типовий проєкт, достатньо розрізняти кілька складників:
- Образ — готовий шаблон із файлами застосунку, його залежностями та інформацією, потрібною для запуску. З одного образу можна запустити багато контейнерів.
- Dockerfile — текстовий файл з інструкціями для збирання образу: наприклад, вибором базового образу, встановленням бібліотек і копіюванням коду.
- Реєстр образів — місце зберігання та поширення образів. Приклад — Docker Hub; організація також може користуватися приватним реєстром.
- Том — простір для даних, яким керує Docker і життєвий цикл якого не залежить від окремого контейнера.
- Docker Compose — інструмент, який дає змогу описати кілька пов’язаних сервісів в одному файлі та запускати їх разом.
Різниця між образом і контейнером нагадує різницю між шаблоном документа та відкритим документом, створеним на його основі. Образ залишається вихідною основою, а кожен контейнер має власний робочий стан і файловий шар, доступний для запису.
Дані бази не слід зберігати лише у файловому шарі контейнера, доступному для запису. Саме зупинення контейнера не видаляє їх, але видалення контейнера означає втрату цього шару. Том дає змогу зберегти дані під час заміни контейнера, проте не замінює резервну копію і також може бути видалений.
Docker і віртуальна машина
Віртуальна машина запускає окрему операційну систему з власним ядром. Контейнеру не потрібна повноцінна гостьова система, оскільки він використовує спільне ядро. Тому контейнери зазвичай запускаються швидше й витрачають менше ресурсів на забезпечення своєї роботи, ніж повноцінні віртуальні машини.
Це не означає, що Docker завжди є кращим вибором. Віртуальна машина корисна, коли потрібна окрема система, інше ядро або сильніша ізоляція. Контейнери добре підходять для пакування та запуску сервісів застосунку, але їхню ізоляцію не слід вважати рівноцінною ізоляції окремої машини.
Ці рішення часто працюють разом: на орендованому віртуальному сервері можна запустити Docker, а в ньому — кілька контейнерів. Хостинг тоді надає ресурси, а Docker упорядковує спосіб запуску застосунків.
Приклад: сайт із застосунком і базою даних
Припустімо, ви створюєте сайт з особистим кабінетом клієнта. Проєкту потрібні застосунок на Python і база PostgreSQL. Без контейнерів кожен учасник команди має самостійно встановити сумісні версії обох складників і налаштувати їхню взаємодію.
За допомогою Docker Compose можна описати два сервіси: застосунок і базу даних. Кожен працює в окремому контейнері, а обмін даними відбувається через спільну мережу. Дані PostgreSQL зберігаються в томі, а вибраний порт застосунку стає доступним на комп’ютері користувача.
Типовий робочий процес виглядає так:
- Команда записує інструкції для збирання застосунку у файлі Dockerfile.
- У файлі Compose визначає сервіси, мережу, том і необхідні налаштування.
- Розробник завантажує проєкт, доповнює локальну конфігурацію та виконує
docker compose up --build. - Docker збирає образ застосунку, завантажує потрібний образ бази даних і запускає контейнери.
Команда спрацює лише в належно підготовленому проєкті та за умови, що Docker працює. Під час розгортання на сервері все одно потрібно подбати про паролі, сертифікат TLS, резервні копії, оновлення та моніторинг. Локальна конфігурація не стає автоматично безпечною конфігурацією для виробничого середовища.
Коли варто використовувати Docker і з чого почати
Docker особливо корисний, коли проєкт має кілька сервісів, команді потрібне узгоджене середовище або застосунок часто розгортають на сервері. Він також полегшує тестування різних версій залежностей без їх встановлення безпосередньо в основній системі.
Для простого статичного сайту або окремого скрипту додаткові файли й робота з контейнерами можуть бути зайвими витратами зусиль. Звичайний спільний хостинг також не обов’язково дозволяє запускати Docker — це потрібно уточнити в постачальника.
Для початку виберіть невеликий проєкт і запустіть один сервіс. Використовуйте образ із надійного джерела, ознайомтеся з його документацією та відкривайте лише потрібні порти. В офіційній документації Docker перевірте спосіб встановлення для своєї системи й актуальні ліцензійні умови Docker Desktop, особливо перед використанням у компанії.
Дивіться також: Що таке CDN?
