Які причини Docker не слід використовувати для баз даних?


25

Я маю дискусію з другом про випадки використання для Docker . Один хлопець в команді хоче використовувати Docker для всього - як свого роду універсальний обгортковий процес Unix. Інший вважає, що Docker слід використовувати лише для програм без громадянства, таких як мікросервіси та програми AWS Lambda .

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

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

Я намагаюся вислухати і зрозуміти його точку зору, як в акті емпатії, але і для кращого міркування з ним. (У нас все добре, - це поєднання жартівливої ​​та серйозної дискусії).

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

Моє запитання: Які причини Docker не слід використовувати для баз даних?

EDIT: Люди попросили мене уточнити свою термінологію. Я припускав, що додаток до бази даних знаходиться в контейнері, а сховище - в обсязі. Що я мав на увазі, RDBMS знаходиться в контейнері, а сховище бази даних - в обсязі.

Деякі коментатори припускають, що драйвери обсягу докера не дуже добре працюють із записом бази даних. (Або щось для цього). Чи можете ви, будь ласка, розширити це?



За словами автора цього блогу, НЕ слід запускати бази даних всередині контейнерів, оскільки хмарні провайдери пропонують керовані бази даних.
030

Відповіді:


20

Коли люди говорять про запуск бази даних в Докер, вони не мають намір зберігати дані в контейнері; вони говорять про те, щоб мати зображення докера з програмним забезпеченням БД і встановлювати дані як об'єм (прив'язуючий об'єм, а не об'єм контейнера).

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

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

(Я використовую Oracle як приклад, тому що я з ним знайомий як з голим металом, так і з докеркізацією, і тому, що це досить горезвісний звір за те, що він просто трохи нетривіальний для роботи, якщо ви переходите за попередні налаштування за замовчуванням.)

  • Упаковка самого програмного забезпечення БД у контейнер дає вам звичайні переваги - мати однакову версію скрізь, уникати залежностей / спільних проблем із бібліотекою, можливість розкручувати таку саму БД на ноутбуках розробників або там, де вам це потрібно.
  • Це нескладно змусити його бігти куди завгодно; оновлення тривіальне тощо. Усі пільги Docker застосовуються. На Dockerhub є зображення Oracle, яке дозволяє вам закрутити робочу БД за хвилину-три (і, звичайно, для інших).
  • Люди зробили тести на продуктивність і не виявили різниць вводу / виводу між обсягами та голим металом ( https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/ , https: // stackoverflow .com / questions / 21889053 / what-is-the-the-runtime-performance-cost-of-docker-container ).
  • Під капотом все одно, що Докер якось перехоплює всі введення-виведення. Це просто стає творчим за допомогою стандартних інструментів Linux (в цьому випадку прив'язуйте кріплення, керуючи внутрішніми таблицями ядра, що взагалі робить Docker-fu можливим).
  • Очевидно, це не означає, що ви можете запустити два екземпляри БД і просто змусити їх працювати над одними і тими ж файлами, але ніхто цього не має на увазі. Docker не надає вам автоматичний одночасний та магічний доступ без перегонів до томів і ніколи не претендував на це. Решта пільг все ще діють. Якщо ваша БД сама не виявляє подібних конфліктів, вам краще надати CMD-скрипт для зображення, який відмовляється розкручувати другий контейнер, коли обсяг вже використовується.
  • Ви повинні бути дещо уважнішими, розкручуючи / вимикаючи контейнер (так само, як ви не просто вимкнете голий металевий сервер БД), але це має бути досить керованим.

Тепер, залежно від обставин, можуть бути чіткі причини цього не робити:

  • Наприклад, Oracle (компанія) точно не підтримає вас, якщо ви запускаєте їх RDBMS у контейнері Docker. Але, можливо, ви використовуєте докерізовані зображення Oracle RDBMS лише для своїх розробників та тестового середовища, де вам ні в якому разі не потрібна їх підтримка, зарезервувавши це для сервера виробництва голих металів. (Але не забудьте оплатити свої ліцензії ...).
  • Якщо хлопці-оператори не знайомі з Докером, може бути просто легше випадково вбити все, знищити ваші файли даних тощо.
  • Якщо у вас є велика виділений метал DB машина вже з великою кількістю дуже швидко , присвячені хранений SAN, і не працюють нічого іншого в будь-якому випадку, то не було б просто сенсу у використанні Docker контейнеризації тих , як ви ніколи і НЕ тільки спину іншого сервера, коли є є 100 Гб або навіть ТБ даних. Зрештою, для виробництва такі RDBMS, як Oracle, дуже і дуже просунуті у всіх аспектах реплікації, інтеграції даних, відмови від простою тощо. Зауважте, що цей аргумент просто говорить, що "вам не потрібно контейнерувати RDBMS". Це не говорить "ви не повинні цього робити" - можливо, ви хочете це зробити, тому що ви хочете розгорнути оновлення програмного забезпечення для баз даних через контейнери або з будь-якої іншої причини, яку ви могли собі уявити.

Так що ви йдете. Всі кошти зробити dockerize вашої бази даних, по крайней мере , для розробників (які будуть вічно вдячні) і вашими умов тестування. На виробництві, він зійде на смак, і там , по крайней мере, я б теж вважав за краще рішення , яке сидить краще зі спеціалізованим DBA / Ops - якщо вони мають багаторічний досвід роботи голого метал DB серверів, то всі кошти довіряти їм продовжувати так. Але якщо ви стартап, який все-таки має всі ІТ у хмарі, то контейнер Docker був би просто ще одним шматочком цибулі у всій картині.


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

3

Я писав про це глибоко, але ось короткий виклад:

  • Попередження розбитого мозку (вибір декількох головних вузлів) потребує вирішення. Якщо цього не зробити, це може бути катастрофічно

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


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

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

Ви бачили flynn.io? Вони нібито готові до виробництва та уникають сценаріїв, що розбиваються на мозку, використовуючи апарат хору (заснований на Joyent Manatee).
Алікс Аксель

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

0

Коли ви говорите, що дані встановлені в контейнер докера, чи не було б правильніше сказати, що "база даних" встановлена ​​в контейнер докера? Якщо ви зберігаєте свої дані поза контейнером, ви робите «правильну» річ - не ставити вашу базу даних у контейнер.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.