Ответ 1
Docker больше подходит для разработки как для разработки
Docker - это инструмент развертывания для упаковки приложений для производства (или среды тестирования). Это не столько инструмент для развития. Он предназначен для создания изолированной среды для запуска вашего уже разработанного приложения где-то на сервере, в облаке или на вашем ноутбуке.
Используйте файл Docker для документирования упаковки
Я думаю, что неплохо иметь Dockerfile в вашем проекте. Подобно файлу Vagrant, это своего рода исполняемая документация, в которой описывается, как должна выглядеть ваша производственная среда. Кто-то, кто не знаком с вашим проектом, может просто запустить файл и получить упакованный и готовый к запуску контейнер. Круто!
Использовать реестр для интеграции Docker
Я думаю, вы должны предоставить (закрытый) реестр Docker, если вы интегрируете Docker в рабочий процесс (CI) (например, в тестовые и сборные системы). Единый репозиторий для хранения проверенных и проверенных изображений всех ваших продуктов определенно ускорит ваше время для создания новых тестовых или производственных систем (например, для масштабирования вашего приложения или для установки установки для демонстрации или для клиента). Если ваш продукт является открытым исходным кодом, рассмотрите общедоступный индекс Docker, чтобы люди могли найти ваши вещи там. Вы можете настроить свою систему сборки, чтобы создать новое изображение Docker после каждой (успешной) сборки и вставить ее в реестр. Поскольку изображения являются многоуровневыми (и эти слои являются общими), это будет быстро и не займет много места на диске.
Если вы хотите интегрировать Docker в свою разработку, я не вижу таких возможностей:
- Вы можете создать репозиторий с окончательными изображениями (как описано выше)
- Или вы можете использовать изображения Docker для разработки против них (например, для запуска MongoDB).
Возможно, у вас есть команда A, которая работает против API команды B и всегда нуждается в запущенном экземпляре продукта команды B. Затем вы можете упаковать этот продукт в образ Docker и поделиться им с командой A. В этом случае команда B должна предоставить изображение в репозитории (а команда A не должна заботиться о том, как его создать и использовать в качестве черного ящика).
Изменить: если вы зависите от многих внешних приложений
Чтобы сделать эту команду "команда A и команда B" более понятной: если вы разрабатываете приложение против многих других инструментов, например. приложение из другой команды, MongoDB или Elasticsearch, вы можете упаковать эти приложения в изображения Docker, запустить их (локально) и разработать против них. У вас также будет хороший шанс найти популярные приложения (такие как MongoDB) в общедоступном индексе Docker. Поэтому вместо того, чтобы устанавливать их вручную, вы можете просто потянуть и запустить их. Но чтобы собрать такую среду, вам понадобится снова бродяга.
Вы также можете использовать Docker для тестовых сред (создавать и запускать изображение и тестировать его). Но это не было бы заменой для Vagrant в развитии.
Бродяга + Докер
Я бы предложил использовать оба. Предоставьте Vagrantfile для создания среды разработки и предоставите файл Docker для создания рабочей среды.
Также посмотрите http://docs.vagrantup.com/v2/provisioning/docker.html. Vagrant имеет докеревую интеграцию, так что вы можете создавать контейнеры/камеры Docker с помощью Vagrant.