Включение изменений кода локального репозитория в работающий контейнер - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в Docker и начал работать с docker с прошлой недели. Есть несколько вещей, которые меня сильно смущают.

Что касается основ, я знаю, что в Docker, Docker Файл используется для создания Docker изображений с помощью команды построения

* 1004. * Как только образ Docker создан, его можно загрузить в Docker реестр

. С помощью Docker Image любой пользователь может запустить код для создания Docker Контейнеров

Из реестра Docker пользователи могут получать образ Docker и создавать новые контейнеры в любое время.

Теперь предположим, что я скачал и собрал 3 изображения из репозитория docker и сделал его, используя dockerfile (все используют файл 1 docker -compose.yml). Мои сомнения - 1) Если я клонирую ветку dev своей команды из git (сделанную только из основной ветки, и они добавили свою функцию 1 в эту новую ветку), тогда мне нужно использовать docker -compose. Если да, то мои существующие изображения будут изменены или что произойдет внутри 2) Я использую exe c -it name bash для внесения изменений внутри контейнеров. Как можно сохранить мои локальные изменения и сделать docker restart container_name, чтобы получить эти изменения (изменилось ли мое изображение в этом процессе) 3) Когда нам нужно перестроить образ, а затем использовать команду rebuild

Извините если эти вопросы звучат как childi sh, но поверьте мне, я потратил много времени на поиск и выяснение того, как все работает в docker.

1 Ответ

1 голос
/ 03 марта 2020

Никогда не следует использовать docker exec для внесения изменений внутри контейнеров: эти изменения будут потеряны, как только контейнер выйдет и будет удален. docker exec - чрезвычайно полезный инструмент отладки, но он не должен быть частью вашего основного рабочего процесса Docker. (Например, он не отображается вообще в четырех шагах первой половины вашего вопроса.)

Для целей локальной разработки загрузка изображения в реестр на самом деле необязательна. Вы можете docker build изображение, затем сразу docker run его, не загружая его.

Если вы запустите docker-compose up, что именно произойдет, зависит от того, имеет ли файл docker-compose.yml build: или image: строк. Если есть и то и другое, то когда Compose создаст образ, он будет иметь указанные имя и тег, которые могут перекрываться с изображением в вашем реестре. Существующее изображение никогда не изменяется, но только одно изображение может иметь заданное имя и тег за раз, поэтому, если вы сделаете вручную docker-compose build, это может привести к тому, что предыдущее изображение будет скрыто (docker images покажет его с тегом <none>).

Если у вас есть локальные изменения и вы восстановили изображение, docker-compose up знает, как удалить и воссоздать существующий контейнер. Новый контейнер будет основан на новом изображении и будет иметь новый код. (Удаление и воссоздание контейнера таким способом является чрезвычайно обычным делом, и Compose также знает, как сделать это для множества других изменений конфигурации.)

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

.
...