Создать новый образ или поделиться исходным кодом в томе в контейнере докеров в разработке?

Мне интересно, как лучше всего обновлять исходный код в контейнере докеров, который запускается внутри (в JAVA и python). Я мог либо изменить свой код, либо создать новый образ, либо запустить контейнер. В Java мне также нужно было бы скомпилировать код. Другим решением было бы просто использовать том для совместного использования кода между моей машиной и контейнером, чтобы каждый раз, когда я изменяю поведение своего кода, мне не нужно было создавать новый образ докера.

Я прошу все это для целей разработки, а не для развертывания. Есть ли передовая практика между этими двумя решениями? Каковы плюсы и минусы? Есть ли разница для скомпилированного языка, такого как java, по сравнению с python?


person Pierangelo Calanna    schedule 20.02.2019    source источник
comment
Для разработки? Вы можете привязать локальный том, и это распространенный шаблон.   -  person Nick    schedule 20.02.2019
comment
это работает и для Java/maven?   -  person Pierangelo Calanna    schedule 20.02.2019
comment
Неважно, что в контейнере, если ты это имеешь в виду.   -  person Nick    schedule 20.02.2019


Ответы (3)


Вам определенно следует создать новый образ вместо того, чтобы делиться кодом через смонтированный том. Тогда вся идеология докера заключается в создании автономной «службы», которую можно переносить на сервер (т. Е. Копировать образ). Файл Docker и процесс сборки образа Yuo будут отслеживать версии вашего кода, т. е. в вашем файле Docker вы можете извлечь определенную ветку или пометить образ определенным тегом. В случае подключенного тома вы никогда не знаете, какая версия вашего кода на самом деле. бегать.

Надеюсь, одна только эта причина поможет вам принять решение.

person Artem Trunov    schedule 20.02.2019
comment
Прошу прощения, прошу в развитие, просто исправил свой вопрос. Ваш ответ все еще актуален? - person Pierangelo Calanna; 20.02.2019
comment
да, поскольку вы разрабатываете, вы сможете передать свое изображение с тегами на тестирование, и они, в конечном итоге, перейдут в производство - person Artem Trunov; 20.02.2019

Как правило, лучше всего создать новый образ, когда у вас есть новый исходный код, и запустить новый контейнер из этого образа. Docker может быстро создавать и запускать новые образы, поэтому вы должны воспользоваться этим. Кроме того, вы можете узнать, какую версию вашего кода вы используете, пометив свои изображения.

Вы упомянули, что вам нужно будет скомпилировать код Java в случае с Docker, но это необходимо в любом случае. Вы можете просто скомпилировать свой код в Jar, а затем ДОБАВИТЬ (или КОПИРОВАТЬ) Jar в свой контейнер и запустить его там.

Пара быстрых недостатков, которые приходят на ум при подходе с внешним кодом: вам понадобится какой-то внешний способ управлять тем, какая версия кода выполняется, теги docker позаботятся об этом за вас. Вам также понадобится какой-то способ предупредить контейнер Docker о том, что новый исполняемый файл готов, а затем запустить его в Docker. Кроме того, вам нужно убедиться, что ваш контейнер Docker работает с той же версией Java (или Python), что и ваша система. Об этом также позаботится Docker, поскольку вы можете создавать из базового образа Java.

person wearebob    schedule 20.02.2019

Вам следует создать новый образ, и если вы считаете, что создание нового образа и его развертывание — это задача для вас, то вы можете настроить конвейер CI/CD, который будет автоматически компилировать код Java, создавать образ и развертывать его для вас всякий раз, когда вы отправить код в GIT.

person Mahesh J    schedule 20.02.2019