Поскольку наиболее важным преимуществом использования docker является сохранение одинаковых dev и prod env, давайте исключим возможность использования двух разных docker-compose.yml
Допустим, у нас есть приложение Django, и мы используем gunicorn
для обслуживания, и у нас есть выделенный apache2 в качестве обратного прокси-сервера (этот apache2 не предназначен для работы с докером). Таким образом, это приложение (docker-compose) состоит только из двух частей: web
(Django) и db
(mysql). Там нет ничего плохого в части БД.
Для части Django подпрограмма dev без докера будет использовать venv и python3 manage.py runserver
или любой другой ярлык, который предоставляет IDE. Мы можем с радостью изменить наш код, а сервер разработки умен, чтобы его можно было быстро собрать и изменить, и он быстро задумался.
Ситуация усложняется, когда приходит docker, так как весь исходный код должен быть упакован в образ, это дает нашему разработчику большие затраты на воссоздание изображения и контейнера снова и снова. Можно было бы найти следующие решения (которые я нашел не элегантным):
В docker-compose.yml
используйте том для монтирования папки с исходным кодом в контейнер, чтобы все изменения в папке с исходным кодом хоста автоматически отражались в контейнере, тогда gunicorn
получит изменение и отразит. --- Это устраняет большую часть затрат на воссоздание контейнера, но мы не можем использовать тот же docker-compose.yml
в производственном процессе, поскольку это вводит зависимость от исходного кода на хост-сервере.
Я знаю, что есть опция командной строки для монтирования папки хоста в контейнер, но, насколько мне известно, эта опция существует только в docker run
, а не docker-compose
. Таким образом, использование другой команды для перевода службы в другую среду является еще одним тупиком. ( Я не уверен на 100% в этом, так как я все еще новичок в докере, пожалуйста, поправьте меня, если я не прав )
TLDR;
Как я могу настроить свой env так, чтобы
- Я использую только один
docker-compose.yml
как для разработчика, так и для продукта
- Я могу легко разрабатывать живые изменения, не воссоздавая Docker-контейнер
Большое спасибо!