Ответ 1
Держите изображения светлыми. Запустите один сервис на контейнер. Используйте официальные изображения на докер-хабе для mongodb, nodejs, rabbitmq, nginx и т.д. Расширьте их, если необходимо. Если вы хотите запустить все в контейнере с жиром, вы можете просто использовать виртуальную машину.
Конечно, вы можете делать сумасшедшие вещи в настройках dev, но зачем тратить время на создание чего-то нулевого значения в производственной среде? Что делать, если вам нужно расширить одну из услуг? Как установить ограничения памяти и процессора на каждую службу? .. И список продолжается.
Не делайте монолитные контейнеры.
Хорошим началом является использование команды docker-compose для настройки набора сервисов, которые могут разговаривать друг с другом. Вы можете сделать prod и dev версию вашего файла docker-compose.yml
.
Переход в правильное настроение
В идеальном мире вы будете запускать свои контейнеры в кластерной среде в производстве, чтобы иметь возможность масштабировать вашу систему и иметь параллелизм, но это может быть излишним в зависимости от того, что вы используете. По крайней мере, хорошо иметь это в задней части головы, потому что это может помочь вам принять правильные решения.
Некоторые моменты, о которых нужно подумать, если вы хотите быть пуристом:
- Как у вас есть постоянное хранилище томов на нескольких хостах?
- Reverse proxy/load balancer должен, вероятно, быть точкой входа в систему, которая разговаривает с контейнерами, используя внутреннюю сеть.
- Является ли мой сервис даже способным работать в кластерной среде (несколько экземпляров контейнера)
Конечно, вы можете делать грязные вещи в dev, такие как сопоставление в томах хоста для постоянного хранения (и многие люди, которые используют докеры отдельно в prod, тоже это делают).
В идеале мы должны разделить докер в dev и docker я prod. Docker - это фантастический инструмент во время разработки, так как вы можете использовать redis, memcached, postgres, mongodb, rabbitmq, node или whatnot up and running in minutes sharing, которые составляют настройку с остальной частью команды. Докер в prod может быть совершенно другим зверем.
Я также хотел бы добавить, что я вообще против фанатизма, что "все должно работать в докере" в prod. Запускайте службы в докер, когда это имеет смысл. Также нередко для крупных компаний создавать свои собственные базовые изображения. Это может быть много работы и потребует обслуживания, чтобы идти в ногу с исправлениями безопасности и т.д. Это не обязательно первое, что вы прыгаете, когда начинаете с докеров.