Мне часто нужны небольшие приложения/микросервисы, которые хочется запихнуть в "чёрный ящик", запустить где-нибудь парой команд, легко переносить и бекапить, восстанавливать на новом железе со всеми потрохами.
Для этого вникаю в docker и начал собирать свои образы для платформ, которые использую.
И почти везде вижу советы, вида "создайте 2 контейнера: один для вашего приложения, другой контейнер для базы данных, а потом слинкуйте их" и пока ни разу - запихните всё, и базу и приложение в один контейнер. И тут я впадаю в ступор. Если основной посыл Docker'а "контейнеризация позволяет переносить и запускать в любой среде ваши приложения со всеми зависимостями", то какой тогда смысл в Docker, если мы опять разбиваем приложение на куски, имея весь тот геморой, который мы имели, когда докера не было?
Каким я вижу best-way:
- Берём baseimage
- Строим на его основе контейнер, в котором есть всё для запуска полнофункционального приложения - и база, и nginx и нужные библиотеки
- Если надо, то даём приложению возможность лазить куда-нибудь на S3/внешнуюю базу (как правило, не надо)
- Делаем data volume на основе этого образа в среде, где будем запускать (если в первый раз, или восстанавливаем из бекапа), на этот data-volume пишутся все последующие изменения - растёт база, хранятся файлы, создаваемые приложением и т.п.
- Запускаем контейнер и радуемся жизни
Из плюсов: независимость от внешней среды, лёгкий и удобный бекап и восстановление/перенос через перетаскивание только data-volume, куча разных приложений не хранит свои данные в одной базе (отсюда нет гемороя с переносом/бекапом/взломом или потерей всего при крахе контейнера с базой), наружу торчит только порт сервиса, через который идёт с ним взаимодействие как с "чёрным ящиком" и ничто не мешает сервису лазить наружу за чем-нибудь, что ему может понадобиться.
Минусы: повышенный расход памяти и диска (но это терпимо в моём случае).
Мой вопрос - почему во всём инете я практически не нашёл упоминания такого подхода? Что с ним может быть не так, и каких подводных камней я не увидел?