Использовать mysql в контейнере docker в продакшене или нет?

Поставлена задача перевести сайты с шаред хостинга на VPS и запустить их в изолированных docker контейнерах.
Я дела не имел с докером ранее, поэтому придумал такое решение:
nginx (прокси) -> [контейнер 1(apache + php + mysql)] <= volume(сайт 1 + база1)
nginx (прокси) -> [контейнер 2(apache + php + mysql)] <= volume(сайт 2 + база2)
Но получил совет, что mysql в контейнере для продакшена не тру.
Скажите, в чем могут проблемы/подводные камни размещения mysql в контейнере, при том, что сама база будет находится на хосте докера.
  • Вопрос задан
  • 3045 просмотров
Пригласить эксперта
Ответы на вопрос 6
mysql в контейнере для продакшена тру. Вот вам совет.

Только контейнеров у вас будет 4 (при условии что хост один):
  • nginx
  • apache
  • php
  • mysql

Только вопросы к вам такие:
- а нафига вам тут апач?
- а зачем изолированные контейнеры этим сайтам?
Ответ написан
Sanes
@Sanes
LAMP/LEMP стек заворачивать в докер это глупость. Разные версии PHP сделать не проблема, MySQL достаточно свежей версии 5.6 или 5.7.
Ответ написан
part_os
@part_os
Сложное в простом
Не переходи пока у вас не будет опыта по пониманию что это такое и как это пнуть что бы взлетело в 3 часа ночи.
Ответ написан
Комментировать
angrySCV
@angrySCV
machine learning, programming, startuping
в контейнере не сохраняются изменения файлов (баз данных), после перезапуска контейнера вся ваша БД будет сброшена в изначальное состояние, что удобно например при тестировании, но не при работе.
для того чтоб сохранять изменения данных, требуется проводить определенные операции, и чтоб данные в бд были согласованными с вашим контейнером вам нужно будет постоянно отслеживать и обновлять контейнер сразу после внесения изменений в БД, такая процедура создает серьезную нагрузку и ненужный гиморой.
Ответ написан
@ewolf
Пара советов:
1. Подумайте об отказе от Apache - он в 2018 году ничего вам не даёт. Возможно, у вас завязаны на него какие-то правила роутинга - попробуйте перевести их на nginx
2. Не запускайте всё в одном контейнере: сделайте по контейнеру на процесс (отдельно на PHP, отдельно nginx) . Это даст вам возможность использовать стандартные имаджи. Если уж всё-таки оставите апач, тогда у вас будет контейнер с Apache+PHP, так как скорее всего вы используете модуль врача, но повторюсь - постарайтесь от апача отказаться.
3. Постарайтесь отказаться от волумов в продакшен для кода. Собирайте свой имадж на базе стандартного с добавлением в него вашего кода на этапе сборки. Посмотрите про это статьи. Так у вас будет возможность деплоить контейнер целиком, а не подкладывать ему папку с кодом. Это сделает систему стабильнее и переносимей.
4. Вам не нужен MySql в контейнере: во-первых это оверхед иметь отдельный инстанс MySql на каждый сайт. Во-вторых, вам нужно обеспечить персистанс данных, что означает использование volume. Это сложнее и имеет свои недостатки: медленнее и т.д. Запустите MySql на отдельном сервере или даже на том же, где докер, но не в контейнере - сэкономите ресурсы и нервы. Когда разберётесь, посмотрите на докеризацию базы ещё раз.
Ответ написан
Комментировать
Скажите, в чем могут проблемы/подводные камни размещения mysql в контейнере, при том, что сама база будет находится на хосте докера.
Будь готов, что будет жрать место на диске как из пистолета. В остальном проблем нет. Возможный оверхед от использования базы в контейнере, компенсируется никакущими настройками сервера базы (ты же не занимался профилированием сервера под текущий профиль нагрузки?) и кривизной самой базы (в планировщике кто-нибудь отлаживал запросы?). Поэтому беспокоиться не стоит.
Best practice говорит не хранить данные в контейнеры, поэтому файло базы надо выставить наружу контейнера, использую механизм volume.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы