Я новичок в Докере.
Не могли бы вы взглянуть на мою схему, прикрепленную ниже?
План
Я хочу иметь возможность иметь некоторое количество изолированных док-контейнеров с текущим программным обеспечением на борту:
- NodeJs (npm, pm2, grunt-cli и т. д.)
- монгодб
- другое программное обеспечение (cron, ffmpeg и т. д.)
Каждый изолированный контейнер связан с одним и тем же томом с кодом приложения, но запускается с разными переменными ENV: портом expressJS, именем базы данных и т. д. Вы меня поняли, верно?
Например, у нас есть 2 изолированных контейнера: stack1
и stack2
.
Оба они используют один и тот же том с кодом приложения, расположенным в /home/user/app_code/ (подключение тома) на хост-компьютере.
NodeJS внутри stack1
запускается на порту 3001 и подключается к своему серверу mongoDB, который использует БД в /home/user/db1 (подключение тома) и имеет выделенное хранилище для мультимедиа, расположенное в /home/user/storage1.
NodeJS внутри stack2
запускается на порту 3002 и подключается к своему серверу mongoDB, который использует БД в /home/user/db2 (подключение тома) и имеет выделенное хранилище для мультимедиа, расположенное в /home/user/storage2.
И, конечно же, stack1
и stack2
размещаются за обратным прокси-сервером с одним контейнером Nginx.
Вопрос
Как лучше реализовать мой план?
Насколько я понимаю, docker-compose
не подходит в моем случае. В конце концов я могу построить только стек, состоящий из изображения nodeJs и изображения Mongo. Но как быть с ffmpeg и cron? Как умножить стеки? Можно ли разместить их за одним контейнером Nginx?
Второй способ — взять "phusion/baseimage-docker", вручную установить NodeJs, Mongodb, ffmpeg, размножьте этот контейнер и спрячьте каждый за прокси Nginx revese. Но этот подход немного нарушает рекомендации по написанию файлов Dockerfile. (Запускать только один процесс на контейнер)
Или есть другой правильный способ? Как бы вы реализовали эту архитектуру?
Заранее спасибо!