7 випадків, коли ви не повинні користуватися Docker

Docker змінює гру. Але це не універсальне рішення.

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

Завдяки вбудованій системі контейнеризації Docker є чудовим інструментом для хмарних обчислень. У свою чергу, Docker Swarm розвиває кластеризацію та децентралізований дизайн. Звучить занадто добре, щоб бути правдою, правда? Ну, є ще кілька випадків, коли не використовувати Docker. Ось їх сім.

не використовувати докер

Давайте пройдемося по одному.

Не використовуйте Docker, якщо вам потрібно збільшити швидкість

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

Більше того, Докер може навіть зробити це повільнішим. Якщо ви працюєте з ним, вам слід встановити обмеження на обсяг пам'яті, центрального процесора або блоку вводу-виводу, який може використовувати контейнер. В іншому випадку, якщо ядро ​​виявить, що пам'ять хост-машини працює надто мало для виконання важливих системних функцій, воно може почати вбивати важливі процеси. Якщо неправильний процес буде вбито (включаючи сам Docker), система буде нестабільною.

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

Не використовуйте Docker, якщо ви надаєте пріоритет безпеці

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

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

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

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

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

Не використовуйте Docker, якщо ви розробляєте програму графічного інтерфейсу для робочого столу

Docker не підходить для програм, які потребують розширеного інтерфейсу. Docker в основному призначений для ізольованих контейнерів із консольними програмами. Додатки на основі графічного інтерфейсу не є пріоритетними, їх підтримка буде залежати від конкретного випадку та програми. Контейнери Windows базуються на Nano або Core Server - це не дозволяє користувачам запускати інтерфейс на основі графічного інтерфейсу користувача або сервер Docker RDP у контейнері Docker.

Тим не менш, ви все ще можете запускати додатки на основі графічного інтерфейсу, розроблені за допомогою Python та фреймворку QT, у контейнері Linux. Крім того, ви можете використовувати переадресацію X11, але це рішення є дещо незручним.

Не використовуйте Docker, якщо ви хочете освітлити розробку та налагодження

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

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

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

Не використовуйте Docker, якщо вам потрібно використовувати різні операційні системи або ядра

За допомогою віртуальних машин гіпервізор може абстрагувати весь пристрій. За допомогою Microsoft Azure можна одночасно запускати обидва екземпляри Windows Server та Linux Server. Однак для образу Docker потрібна та сама операційна система, для якої вона була створена.

Існує велика база даних зображень контейнерів Docker - Docker Hub. Однак, якщо зображення було створено на Linux Ubuntu, воно буде працювати лише на тому самому Ubuntu.

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

Не використовуйте Docker, якщо у вас є багато цінних даних для зберігання

За задумом, всі файли Docker створюються всередині контейнера і зберігаються на шарі контейнера для запису. Отримати дані з контейнера може бути важко, якщо це потрібно іншому процесу. Також записний шар контейнера підключений до хост-машини, на якій запущений контейнер. Якщо вам потрібно перемістити дані в інше місце, ви не можете зробити це легко. Більше того, всі дані, що зберігаються в контейнері, будуть назавжди втрачені, як тільки контейнер вимкнеться.

Спершу потрібно продумати способи збереження даних де-небудь ще. Щоб захистити дані в Docker, вам потрібно застосувати додатковий інструмент - обсяги даних Docker. Проте це рішення все ще досить незграбне і потребує вдосконалення.

Не використовуйте Docker, якщо ви шукаєте найпростішу технологію для управління

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

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

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

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

Завернути

Професіонали KeenEthics із задоволенням працюють з Docker і часто використовують його для розробки додатків. Незважаючи на деякі недоліки, ви можете легко використовувати його для запуску та керування програмами поруч в ізольованих контейнерах.

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

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

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

Пам’ятайте: Docker - це програма, яка змінює ігри. Але це не універсальне рішення.

Docker - не єдиний такий інструмент на ринку. Альтернативами Docker є rkt, що вимовляється як `` ракета '', Linux Containers або OpenVZ. Кожен із них своїми перевагами та недоліками цілком схожий на Docker. Зростання популярності та рівня використання Docker зумовлені лише рішенням підприємств прийняти його.

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

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

У вас є ідея для проекту Docker?

Моя компанія KeenEthics - це команда досвідчених розробників веб-додатків. Якщо вам потрібна безкоштовна оцінка подібного проекту, не соромтеся зв’язуватися .

Ви можете прочитати більше подібних статей у моєму Keen Blog. Дозвольте мені запропонувати вам прочитати Чому переробляти ваш код? або Пояснення моделей розробки програмного забезпечення: Аутсорсинг проти аутстафінгу, фіксована ціна проти часу та матеріалів?

PS

Крім того, я хотів би сказати "дякую" Алексу Плетнову за те, що він співавтор цієї статті, а також читачам за те, що довели її до кінця!

Оригінальну статтю, розміщену в блозі KeenEthics, можна знайти тут: 7 випадків, коли не використовувати Docker.