Есть ли способ изменить базовый образ или сервис, и вам не нужно заново собирать все приложение? - PullRequest
1 голос
/ 21 мая 2019

Я новичок в докере и столкнулся с некоторыми сложностями в понимании того, как большие многоуровневые приложения работают с докером.

Я хочу использовать визуальную студию Asp .Net core и задать несколько вопросов:

  • Если я внесу тривиальное изменение в один сервис, нужно ли мне создавать приложение целиком и создавать его новый образ?
  • Как мне сообщить пользователю об изменении?
  • Нужно ли заново развертывать все приложение в случае небольших изменений?
  • Если у рабочих изображений нет доступа к исходному коду, как разработчик должен внести изменения в рабочий образ?
  • Если мой клиент не хочет создавать контейнер своей базы данных, могу ли я использовать докерную сеть для установления соединения с этим внешним сервером SQL?

1 Ответ

0 голосов
/ 21 мая 2019

Если я внесу тривиальное изменение в один сервис, нужно ли мне создавать приложение целиком и создавать его новый образ?

Нужно ли заново развертывать все приложение в случае небольшого изменения?

Для каждого шага в Dockerfile Docker генерирует промежуточный контейнер. Если вы используете то же, что и раньше, Docker использует этот кэшированный промежуточный контейнер. Если вы измените команду (например, добавите пакет, скопируете новые строки исходного кода ...), на этом шаге будет создан новый промежуточный контейнер. Каждый шаг после этого запускается в новом промежуточном контейнере, поэтому кэширование невозможно.
Так что да, ты должен. Но вы можете оптимизировать сборку, используя промежуточный контейнер и многоэтапные сборки (см. Ссылки).

Как мне сообщить пользователю об изменении?

Сначала: используйте теги для управления версиями. Это очень помогает. Но как сообщить, проблема вашего варианта использования, а не докер. Это то же самое, что выпуск новой «нормальной» версии программного обеспечения.
Пусть у вас есть CI-Pipeline и вы можете автоматизировать этот шаг. Или у вас есть доступ к вашим системам клиентов и вы можете автоматически развернуть новый контейнер.

если мой клиент не желает создавать контейнер своей базы данных, могу ли я использовать Docker Network для установления соединения с этим внешним SQL-сервером?

Docker Networks для (изолированной) связи между Docker Containers. Вы можете использовать «обычный» способ подключения клиента к внешней базе данных. Возможно, вам придется опубликовать порт за пределами вашего контейнера (см. Ссылки на докер). И помните, что адрес localhost относится к контейнеру, а не к вашей системе.

Этот пост в блоге может быть полезен для вас:
[1] https://andrewlock.net/caching-docker-layers-on-serverless-build-hosts-with-multi-stage-builds---target,-and---cache-from/
[2] https://www.busbud.com/blog/going-docker-multi-stage-builds/

...