Комментарии 12
1 А чем такой подход выигрывает у того, когда можно собрать jar через gradle плагин application и просто положить его в образ?
2 Касательно этого:
Это однозначный плюс для безопасности, так как структура каждого образа известна и исключается попадание на прод «левых» библиотек.Мне кажется, что использование образов докера само по себе реализует этот эффект — «исключается попадание на прод «левых» библиотек», т.е. на прод пойдет то, что «разработчик» собрал.
Главное преимущество показано на картинке в статье. Образ разбивается на легко кэшируемые слои. Похоже на автоматизацию вот этого https://spring.io/guides/gs/spring-boot-Docker/ (ближе к концу статьи)
Рекомендую посмотреть эту презентацию — youtu.be/SK6e_ZatOaw
Я правильно понимаю, что вместо 2-3 слоёв (base image, runtime layer, app layer) у нас получается 4 слоя, где 3 и 4 буду относительно часто "меняться".
3 слой меняется от сервиса к сервису.
4 слой меняется от версии к версии сервиса
Более того, эти 4 слоя обновляются независимо. Можно поменять слой ОС, а остальные слои будут не затронуты. В случае с Dockerfile были бы пересобраны все слои образа.
В случае с Dockerfile были бы пересобраны все слои образа.
вот это новость
А что не так? Я вот для эксперимента попробовал собрать https://github.com/docker/labs/blob/master/beginner/flask-app/Dockerfile
А потом поменял версию alpine. Пошла полная пересборка образа.
docker image history показал разные слои.
А buildpacks собирает и кэширует слои отдельно, а потом собирает в большой образ (если на пальцах).
Или я чего-то не понимаю, или одно из двух.
попробуйте поменять в buildpacks базовый образ — тоже слои пересобираться не будут?
или слои в buildpacks это не слои в Docker? и тогда мы про разное говорим...
Вот картинка с более развёрнутым описанием https://youtu.be/SK6e_ZatOaw?t=639
А далее примеры с заменой рантайма.
А вот описание концепции rebase https://buildpacks.io/docs/concepts/operations/rebase/
Мы говорим об одном и том же. О docker. Только Dockerfile при изменениях даже не пытается анализировать характер изменений и тупо пересоздаёт. А buildpaсks имеет набор инструкций о переиспользовании слоев. Вот и вся разница.
Поддержка Buildpacks в Spring Boot 2.3.0