Docker: навіщо він потрібен, якщо у вас і так усе працює?

Перший раз із Docker я зіткнувся, коли новий колега два дні не міг запустити наш проєкт. Різні версії Node, не та бібліотека для обробки картинок, база даних не піднімається. Класика. Після цього ми поклали в репозиторій один файл, і запуск став займати десять хвилин.

Суть контейнера проста. Це ізольоване середовище, у якому лежить застосунок разом з усім, що йому потрібно: версія мови, системні бібліотеки, налаштування. Образ збирається один раз за інструкцією з Dockerfile, а далі запускається однаково на ноутбуці, на сервері й у CI. Фраза «в мене працює» перестає бути виправданням, бо в усіх одне й те саме середовище.

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

Є кілька речей, про які краще знати наперед. Дані всередині контейнера зникають разом із ним, тому базу й завантажені файли тримають у томах. Образ не варто роздувати: беріть мінімальні бази на кшталт alpine чи slim, інакше публікація в реєстр перетвориться на очікування. І не кладіть паролі в Dockerfile, вони лишаться в історії шарів, навіть якщо рядок потім видалити.

Для локальної розробки дуже зручний docker compose. В одному yaml-файлі описуєте застосунок, базу, Redis, чергу повідомлень, і все це піднімається однією командою. Мені досі приємно, коли після git clone та docker compose up воно просто їде.

Чи потрібен Docker всім? Якщо ви пишете скрипт для себе, то ні. Якщо проєкт живе довше за місяць або над ним працює більше однієї людини, то, найімовірніше, так. До Kubernetes одразу братися не треба, більшість команд до нього взагалі не доростає. Почніть з одного Dockerfile і подивіться, скільки дрібних проблем зникне само собою.