Всем привет. Я разрабатываю уже долго django + vuejs в Docker + docker-componse И чувствую, что есть какой-то лаконичный способ упростить текущую схему.
Сейчас схема такая:
1. Контейнер с джангой на базе python:alpine. В нём две папки: /app и /app_autobuild. В /app_autobuild попадают файлы при билде образа. В /app композом синхронизируются файлы с локальной машины и в env прокидывается переменная, которая запускает gunicorn в папке /app на локальной машине и /app_autobuild на проде. Чувствуется, что можно как-то хитро сделать, чтобы не было дублирования папок.
2. Есть контейнер с фронтендом и nginx, multi-stage build. Сперва билдится статика из vue приложения в контейнере с нодой, затем создаётся образ из nginx:alpine, куда копируется из предыдущего образа результат билда фронта (dist) и это всё раздаётся вместе с проксированием в джангу.
3. Есть контейнер (который, как мне кажется, можно ликвидировать) с нодой, он только для dev-окружения, куда синкается локальный dist и оттуда раздаётся джангой. (Да, на дев-окружении всю статику раздаёт джанга)
Вопрос следующий: как вы устраиваете контейнеры, чтобы это было удобно и для разработки и для прода? Возможно, стоит использовать два Dockerfile'а для джанги + два для фронта: одна пара для dev-окружения, одна для прода? Возможно, конфиг docker-compose позволяет подключать папки в зависимости от env-переменных? Хочется узнать какие-то лучшие практики для всего этого.
sim3x, вопрос архитектуры — это другой вопрос. Я считаю, что все эти контейнеры можно было бы заменить одним, где будет и фронт и бэк, а nginx.conf утащить в контейнер с nginx'ом. Но так сложилось исторически. Возможно, когда-то до этого дойдут руки. Вопрос в том, как удобно разрабатывать.
Докер-Компоуз не для прода, так то.
Более подходящие инструменты, где все проблемы ваши уже решены - Flynn или, посложнее, Kubernetes.
И да, Докер внутри них там есть.
Впрочем, не обязательно переходить в Компоуза, достаточно посмотреть идеологию выше описанных.
m0nym, спасибо, изучу. Проблема ещё в том, что помимо локальной машины и прода есть тестовые серверы, где используется только docker-compose. Конфиг у них с локалкой один (разница в env-переменных). Хотя, возможно, правильней было бы разделить их, но это уже почти непосильная задача.