Ответ 1
Обновления:
- 2018/04/17: http://docker-sync.io/
- 2018/03/18: Проверьте скаффолд из GoogleCloudPlatform.
Исходное сообщение:
Есть кое-что, чего я не получаю при разработке приложения при использовании докер-контейнеров.
Это нормально, это не что-то тривиальное. Попробуйте увидеть общую картину, касающуюся создания конвейера разработки (или конвейера CI/CD, если вы хотите использовать термины непрерывная интеграция/непрерывная доставка).
Это изображение из [2]
Ограничения при настройке локальной среды разработки
Допустим, я занимаюсь разработкой java-приложения и настроил java-контейнер с базовым образом jdk 8, мне все еще нужно установить java 8 jdk на мою локальную машину для разработки, поскольку IDE, которую я собираюсь использовать, будет искать среду выполнения библиотеки на локальной машине не контейнер докера.
Это опция, которая может вызвать у вас уже упомянутую проблему: она может работать в вашей локальной среде разработчика и не работать в другом месте, потому что вы забыли добавить библиотеку, зависимость, небольшое изменение, которое вы сделали, не обращая внимания и не забывая добавить его. в вашу среду докера.
Вы можете придерживаться докера во время разработки
Подход, который решает вышеуказанную проблему, заключается в использовании docker [3] для настройки среды, которую вы хотите использовать. Это означает, что каждый раз, когда вы что-то изменяете, вам придется docker build
новый образ в docker run
а docker run
новый контейнер на основе этого образа. Как уже упоминали другие, для определения того, как будут создаваться ваши изображения, вам придется использовать Dockerfiles
. И если ваше приложение имеет разные взаимосвязанные контейнеры, вам придется определить все это (сети, ссылки, зависимости) в файле docker-compose.yml
. Повторяющийся процесс сборки и запуска станет вашей работой в IDE...
IDE и плагины/дополнения
из [1]
:
IDE
Версии Docker не предоставляют встроенную среду разработки для разработки с Docker. Основным интерфейсом является API командной строки. Однако большинство ведущих IDE (NetBeans, Eclipse, IntelliJ, Visual Studio) имеют некоторую поддержку Docker с помощью плагинов или надстроек.
Например, из [2]
:
Docker Labs - Руководства для разработчиков
Вы можете найти некоторые рекомендации в зависимости от вашего случая (IDE, язык...) здесь:
Общие тома | Горячая перезагрузка | "наблюдая" за изменениями файлов
Я думаю, что этот подход совпадает с вашим заголовком "разработка в контейнере Docker", и я имею в виду/понимаю случай, когда у кого-то есть работающий контейнер с общим томом, и всякий раз, когда в коде происходит изменение (с использованием IDE), это влияет на Контейнер напрямую. Может быть, это будет работать для случая и иметь ограничения для некоторых других случаев. Это зависит от вас, чтобы сделать ваши оценки и выбрать свой путь.
Мои источники:
-
[1]
Эталонная архитектура Docker: Лучшие практики конвейерной разработки с использованием Docker EE -
[2]
Изучение Docker на CI/CD -
[3]
Что такое контейнер? видео от VMware Cloud-Native