Как использовать одну виртуальную машину для нескольких приложений?

Здравствуйте!
В прошлом вопросе я разобрался как организовать рабочее окружение Linux разрабатывая в Windows. Буду ставить VirtualBox + Samba.
Теперь столкнулся со следущей проблемой: у меня в продакшене около 10 вирт машин, допустим у всех разная конфигурация, соответственно ставить себе 10 виртуалок накладно и неудобно.

Что хочется:
На одной виртуальной машине иметь как бы полностью изолированные приложения на всех уровнях (файловой системы, процессов, софта и тп.)

Я начал гуглить, наткнулся на Docker (хотя давно о нем слышал). Но что посоветуете Вы? Docker это то что мне нужно? А может я хочу невозможного?

Буду рад любой помощи.
Спасибо.
  • Вопрос задан
  • 767 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Docker это то что мне нужно? А может я хочу невозможного?


У Docker чуть отличается концепция, но оно даже лучше подходит.

Основная идея - каждый сервис в своем контейнере. То есть у базы данных свой контейнер, у приложения - свой, у nginx - свой отдельный контейнер. В среднем одно простенькое приложение требует 3 контейнера (приложение, база данных и web-сервер в качестве прокси). Если у вас 10 проектов то это будет 30 контейнеров. Ну и да, не забываем про data-only контейнеры, они не несут дополнительного расхода ресурсов и нужны только для удобной организации сохранения данных. Если вы используете контейнер с базой данных - то это сразу +1 data-only контейнер. Приложение может аплоадить файлы - еще один контейнер-пустышка. Звучит страшно, да?

Каждый контейнер основан на другом контейнере, например все ваши контейнеры могут базироваться на одном образе, например Debian или Ubuntu. А особенность архитектуры файловой системы контейнеров позволяет реюзать оные, что значит что у нас будет всего один базовый контейнер с убунтой на остальные 30. Ну и далее, база данных обычно у нас так же частенько одна и та же (например в моем случае это postgresql), так что 10 контейнеров для 10-ти приложений превращаются в один контейнер с базой данных и 10 контейнеров-пустышек для сохранения данных приложения.

Ну и далее, все общие вещи реюзаются между контейнерами (то есть смотрим по базовому образу).

В случае же с виртуалками у нас 10 виртуалок в которых крутится 10 операционных систем (в докере только окружение, но ядро используется на уровне хоста), 10 баз данных ну и тд. То есть докер существенно сокращает количество необходимых ресурсов и вообще прикольно.

Docker НЕ работает на windows. Точнее microsoft планирует сделать поддержку оного (если еще не сделала), но только для win server-ов. Что не ок. Так что linux в виртулку поставить придется, но только одну на все проекты. Что же до возни с самбами и прочим - тут уж как хотите. В целом же производительности обычных шаред фолдеров должно хватать (так как мы всеравно мэпим данные по большому счету на файловую систему виртуалки).

Так что можно просто скачать Docker Toolbox и работать. Для Mac OS есть еще штука под названием dinghy, которая добавляет прозрачную поддержку NFS и т.д. но для винды такого нет (только черзе vagrant). Ишус на эту тему висит в репозитории docker-machine и возможно в скором времени и это запилят.

мне не нужны танцы с виртуалками, самбой, настройкой хостов и тп?

Вообще-то это никогда не нужно, все уже придумано до нас. Есть такая штука как vagrant которая полностью решает вопрос оркестрации виртуальными машинами для изоляции окружения. Но оверхэда оно дает сильно больше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@glenean
Да, можно Docker, но тогда, правельнее, взять еще одну машину - сервер, там поставить ваш Linux, в нем Docker, на сервер заходить по графическому терминалу.
А вообще 10 виртуальных машин в продакшене, и у них, у всех разная конфигурация - это не true way.
У Вас БД одна и таже на все 10 машин или разные, на каждой своя?
Если одна, то можно без докера обойтись, если веб-сервер везде один и тот же.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы