Коли люди говорять про запуск бази даних в Докер, вони не мають намір зберігати дані в контейнері; вони говорять про те, щоб мати зображення докера з програмним забезпеченням БД і встановлювати дані як об'єм (прив'язуючий об'єм, а не об'єм контейнера).
Обсяги є важливою складовою Докера, і не є чимось шахрайським або просто задіяним. Докер не просто створений для бездержавних (мікро) послуг.
Як би я не хотів, я не можу знайти технічну причину не запускати базу даних в Докер, тому, на жаль, я підберу іншу сторону аргументу, а отже, можливо, не дам тобі відповіді, яку ти шукаєш.
(Я використовую 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 був би просто ще одним шматочком цибулі у всій картині.