Подтвердить что ты не робот

Восстановить контейнер после каждого изменения?

Документация Docker предлагает использовать команду ONBUILD, если у вас есть следующая сценария:

Например, если ваше изображение является многократно используемым построителем приложений python, для его использования в конкретном каталоге потребуется исходный код приложения, и после этого может потребоваться вызывать сборку script. Вы не можете просто вызывать ADD и RUN сейчас, потому что у вас еще нет доступа к исходному коду приложения, и для каждой сборки приложения он будет отличаться. Вы можете просто предоставить разработчикам приложений шаблонный файл Docker для копирования-вставки в свое приложение, но это неэффективно, подвержено ошибкам и сложно обновить, поскольку оно смешивается с кодом приложения.

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

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

Как вы справляетесь с этим?

4b9b3361

Ответ 1

означает, что я должен повторно создавать контейнер приложения каждый раз, когда я что-то меняю, даже если это только опечатка

необязательно, вы можете использовать опцию -v для docker run, чтобы вставлять файлы проекта в контейнер. Таким образом, вам не придется восстанавливать изображение докеров.

Обратите внимание, что команда ONBUILD предназначена для случаев, когда Dockerfile наследует FROM a родительский файл докеров. Инструкции ONBUILD, найденные в родительском файле Docker, будут выполняться, когда Docker создает образ дочернего файла Docker.


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

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

Затем поделитесь каталогом, который содержит ваш код приложения на вашей главной машине, с каталогом, из которого файлы приложения будут обслуживаться в контейнере докера.

Например, если я разрабатываю статический веб-сайт, а мое рабочее пространство находится в /home/thomas/workspace/project1/, я бы начал контейнер с nginx с:

docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx

Таким образом, я могу изменять файлы в /home/thomas/workspace/project1/, и изменения отражаются в реальном времени, не перестраивая изображение докеров или даже перезагружая контейнер докера.