Контейнеризация приложений - Spring Boot

  Рет қаралды 6,553

Уголок сельского джависта

Уголок сельского джависта

8 ай бұрын

Разработку и развёртывание современного серверного программного обеспечения сложно представить себе без использования инструментов контейнеризации, ну, а Docker и вовсе, наверняка, на слуху у подавляющего большинства разработчиков.
Упаковка в контейнеры проектов на платформе Java в целом задача не сложная, но имеет свои нюансы. В этом ролике я рассмотрю следующие сценарии упаковки приложения на основе Spring Boot в OCI-образ:
- Локальная сборка проекта с последующей упаковкой в Docker-образ
- Полный цикл сборки проекта в Docker с помощью Dockerfile
- Сборка образа при помощи Spring Boot Plugin и Paketo Buildpacks
Все сценарии будут продемонстрированы с использованием Maven и Gradle.
#java #spring #springboot #docker #gradle #maven
Мой сайт: alexkosarev.name/
Паблик в VK: public218833461
Канал в Telegram: t.me/+TZCuO38vG3oqu_Jq
Стать доном: donut/shurik.codes
Донаты в Boosty: boosty.to/akosarev/purchase/1...
Донаты в Tinkoff: www.tinkoff.ru/cf/4PEOiVCZQuS

Пікірлер: 60
@shurik_codes
@shurik_codes 8 ай бұрын
По многочисленным заявкам трудящихся и учащихся выкладываю репу: github.com/alex-kosarev/spring-boot-docker-with-maven там же заготовка статьи, можете читать, информации даже больше, чем в ролике.
@alexandr7722
@alexandr7722 8 ай бұрын
Спасибо за проделанную работу, отличный материал
@artyomzolotoverkhov8468
@artyomzolotoverkhov8468 Ай бұрын
Благодарю за видео, познавательно.
@mikhailyegorov27
@mikhailyegorov27 8 ай бұрын
Классно, товарищ сосед с Кургана) подробно, понятно, нужное. Спасибо за твое время!
@mikhailyegorov27
@mikhailyegorov27 8 ай бұрын
"нет видосов чтоб не запнулся" - но у тебя довольно чистая речь, без паразитов! кроме того, когда возникают проблемы и ты их показываешь как решаешь это ценнее, чем вылизанные видео. когда приступаешь сам что-то пробовать, никогда не получается, даже по вылизанным видео и начинаешь гуглить лазить и не факт что решишь как
@Edu-wi3il
@Edu-wi3il 8 ай бұрын
Удивительно, но классическая задача может быть решена различными способами! Познавательное видео!)
@vshum44
@vshum44 4 ай бұрын
Видео и подача просто прекрасны!!! С удовольствием бы посмотрел уроки по maven и gradle в твоем исполнении. Спасибо за проделанный труд и успехов будущем
@eugenz2334
@eugenz2334 8 ай бұрын
Подача материала и практические примеры одни из самый крутых среди ютюб каналов по спрингу. Рад, что случайно наткнулся на канал!)
@nurbek-baike
@nurbek-baike 8 ай бұрын
Отличный материал, вспомнил как начинал, прослезился 🥲, искренне благодарен отличная подача, а про то что не так идет это просто шикарно, становится скучно когда все идет гладко или же монотонно подается а тут хоба изюминка )))
@arrgonenasta1491
@arrgonenasta1491 5 ай бұрын
Всё чётко и понятно, спасибо большое!
@chesseranapa
@chesseranapa 8 ай бұрын
Спасибо! Отличное видео
@vitovt94
@vitovt94 8 ай бұрын
Интересно смотреть 👍 А то что не все гладко - так даже лучше, живой видос получился! Про кубер серия видосов была бы полезна!!! Ждём!)
@Qwerty-fn3rf
@Qwerty-fn3rf 8 ай бұрын
Спасибо за видео, оч полезно
@alexshutov5442
@alexshutov5442 8 ай бұрын
поддержим)
@nikolaymatvienko1090
@nikolaymatvienko1090 8 ай бұрын
Как всегда крутое видео
@user-bn5gq7ok3g
@user-bn5gq7ok3g 3 ай бұрын
Спасибо!!
@rainrainov4495
@rainrainov4495 7 ай бұрын
Добрый день! Видосы с косяками лучше!!! Сразу учимся и косяки исправлять.
@user-iu6yz6ck6h
@user-iu6yz6ck6h 8 ай бұрын
Отличное видео. Спасибо. А планируется видео с подключением ну скажем БД к сервису в контейнере?
@shurik_codes
@shurik_codes 8 ай бұрын
Наверняка я эту тему буду ковырять в дальнейших роликах про работу с Docker
@eterna11ty
@eterna11ty 8 ай бұрын
Спасибо за очередное очень крутое и понятное в то же время видео. Подскажите, пожалуйста, а какую цветовую схему Вы используете в IDE ? Уж больно понравилась. Спасибо за труд!
@shurik_codes
@shurik_codes 8 ай бұрын
Это New UI, появившийся в 2023
@MrMaweer
@MrMaweer 8 ай бұрын
класс!!! но серый цвет не используйте плииз - смотрел на позитиве и потом серый цвет и настроение падает, боль, страдания и ПОТРАЧЕНО))) видео огонь, вс ев одном ролике ОГРОМНОЕ СПАСИБО!
@shurik_codes
@shurik_codes 8 ай бұрын
Я хотел ещё звук из GTAV вставить, но было лень))
@grigorev.nikita
@grigorev.nikita 8 ай бұрын
Отличный выбор темы. Пользуюсь вторым вариантом, не знал про Spring Boot Maven Plugin одной командой. Я так понимаю, этот вариант нельзя использовать с docker-compose, без DockerFile?
@shurik_codes
@shurik_codes 8 ай бұрын
Ну, теоретически можно собирать образ в Docker Compose при помощи mvn spring-boot:build-image, но нужно, чтобы Docker был доступен из контейнера. Ну или попробовать собирать при помощи pack после сборки проекта Maven-ом, как это делается внутри плагина. Я, если честно, не пробовал копаться в этом направлении.
@user-vl5ts3mm6e
@user-vl5ts3mm6e 3 ай бұрын
Привет. Огромное спасибо за проделанную тобой работу. Столкнулся с проблемой при сборке приложения описанным тобой образом(сборка в докер контейнере). Если у нас в проекте есть интеграционные тесты использующие testcontainers для поднятия тестовой базы данных, то сборка падает на тестах при попытке запустить контейнер с базой. Как поступать в таких случаях? Устанавливать докер в докере?
@shurik_codes
@shurik_codes 3 ай бұрын
Если сборка происходит в докере, то ничего не поможет, в том числе и DinD. Как вариант - скриптом запускать нужные контейнеры до запуска сборки и останавливать после сборки. Либо собирать не в докере.
@alexandr7722
@alexandr7722 8 ай бұрын
Был бы признателен, если бы вы смогли прикладывать ссылку на git, т.к хочется поработать с этим же материалом самому но из за вставок заготовленного материала порой приходится разбираться что откуда. Не в качестве критики, а в контексте просьбы, если это не сложно осуществить. Спасибо за материал
@shurik_codes
@shurik_codes 8 ай бұрын
Я постараюсь на этой неделе 2 статьи опубликовать, а к ним и репозитории
@MrMaweer
@MrMaweer 8 ай бұрын
репу бы желательно получить, чтобы поиграться, заморачиваться и чистить не надо, нам и так понятно что вылизывание это трудозатратно
@shurik_codes
@shurik_codes 8 ай бұрын
github.com/alex-kosarev/spring-boot-docker-with-maven
@michaelmuraviev3319
@michaelmuraviev3319 8 ай бұрын
Александр пришлите вариант с gradle. В гитхабе только мавен. Может ветку с грэдолом сделаете и здесь сообщите об этом?
@shurik_codes
@shurik_codes 8 ай бұрын
Будет на днях
@devprototype
@devprototype 8 ай бұрын
Спасибо! Вопрос! Можете ли вы записать видео о том, как передавать извне данные при запуске контейнера для подключения, например, к базам данных, которые автоматически в application.yaml попадают ? Иначе получается что если нужно поменять хост/пользователя нужно image пересобирать)
@shurik_codes
@shurik_codes 8 ай бұрын
Так я же показывал в ролике и статье, это можно сделать двумя способами: 1. При помощи аргументов запуска: docker run ... --spring.datasource.url=... 2. При помощи переменных окружения: docker run -e SPRING_DATASOURCE_URL=... ... Плюс можно пользоваться распределёнными конфигурациями, которые позволяют изменять настройки "на лету": Consul, Spring Cloud Config Server и т.д.
@devprototype
@devprototype 8 ай бұрын
@@shurik_codes Большое спасибо за ответ, обязательно прочитаю статью!
@amida1632
@amida1632 3 ай бұрын
35:46 gradle
@DanielAstro
@DanielAstro 8 ай бұрын
А как на счет сборки приложения используя гугловый плагин jib?
@shurik_codes
@shurik_codes 8 ай бұрын
Интересная тема, тянущая на отдельный материал)
@user-qm2vs8kj2x
@user-qm2vs8kj2x 8 ай бұрын
Александр, будем обсуждать оркестрацию?
@shurik_codes
@shurik_codes 8 ай бұрын
Скоро)
@kxeklom
@kxeklom 8 ай бұрын
У вас стоит комюнити версия или ултимейт?
@shurik_codes
@shurik_codes 8 ай бұрын
Ultimate
@kxeklom
@kxeklom 8 ай бұрын
@@shurik_codes А сможете на эклипсе показать?
@user-ok3xn3vx3h
@user-ok3xn3vx3h 6 ай бұрын
При сборке приложения с помощью bootBuildImage не работает запись файлов на диск, может кто знает как решить эту проблему?
@shurik_codes
@shurik_codes 6 ай бұрын
Есть какие-то ошибки в логах сборки?
@user-ok3xn3vx3h
@user-ok3xn3vx3h 6 ай бұрын
Нет, сборка проходит нормально, все работает, но при работе котейнера нет прав доступа на запись файлов, У меня диск использовался для временной записи файлов перед отправкой в s3, компрессии изображений и др,. в итоге переделал все на in-memory модель с помощью inputStream-ов, теперь даже быстрее все работает))) Но может есть все таки возможность включить этот доступ и интересно внутри образа приложение в какую папку копируется, чтоб сделать проброс volume. Спасибо за внимание к вопросу)
@shurik_codes
@shurik_codes 6 ай бұрын
Если планируется писать в какую-то директорию файлы, то на этапе сборки нужно создать эту директорию и выдать права на неё пользователю, от имени которого будет запускаться приложение (если пользователь - не root, ему можно всё).
@VolodymyrKvashenko
@VolodymyrKvashenko 8 ай бұрын
О, так вы ещё и комментарии удаляете, молодца..
@shurik_codes
@shurik_codes 8 ай бұрын
Нет, я комментарии не удаляю в принципе
@VolodymyrKvashenko
@VolodymyrKvashenko 8 ай бұрын
@@shurik_codes Я первым писал комментарий о том что создвать пользователей при сборке имеджа не нужно. Советовал посмотреть Dockerfile сгенерированного проекта Quarkus. Как там создаётся пользователь и что там даётся параметром в команде USER. Не нужно создавать имя при сборке имеджа. Это лишнее. Там достаточен только ID-пользователя и чтобы он не совпадал с ID суперпользователя. Вы не знакомы с тем какую роль играют в *nix имя пользователя и его ID. А моё сообщение удалили ))). Ай яй яй...
@user-ok3xn3vx3h
@user-ok3xn3vx3h 7 ай бұрын
Спасибо, отличное видео) Подскажите, как установить имя контейнера при сборке образа при помощи build.gradle.kts?
@shurik_codes
@shurik_codes 7 ай бұрын
tasks.named("bootBuildImage") { this.imageName.set("my-image") }
@user-ok3xn3vx3h
@user-ok3xn3vx3h 7 ай бұрын
Спасибо большое, а то я просто писал imageName = "name", а оно R/O) Чет не видел сеттер, да я. и забыл уже почти про них с Котлином)
@user-ok3xn3vx3h
@user-ok3xn3vx3h 7 ай бұрын
Еще раз спасибо, подскажите пожалуйста, как в конфигурации build.gradle.kts установить активные профили для собираемого образа с помощью задачи bootBuildImage? Что то ничего рабочего не найду)
@user-ok3xn3vx3h
@user-ok3xn3vx3h 7 ай бұрын
Нашел ответ: Раньше, когда использовал докер, прописывал дополнительный параметр в Dockerfile: CMD ["java", "-Dspring.profiles.active=main, remote", "-server", "-jar", "/app/client.jar"] Сейчас при сборке через bootBuildImage, нужно просто при старте контейнера переменную передать ту же или эту: SPRING_PROFILES_ACTIVE=main,remote
@MgsMen
@MgsMen 7 ай бұрын
Попробовал повторить за автором на своём проекте - не вышло. Тогда клонировал репозиторий на ГитХабе и пошагово по инструкции попытался повторить. Опять запоролся на первом этапе с той же самой ошибкой "$ java -cp lib/*:application.jar pro.akosarev.sandbox.GreetingsMavenApplication Error: Could not find or load main class pro.akosarev.sandbox.GreetingsMavenApplication Caused by: java.lang.ClassNotFoundException: pro.akosarev.sandbox.GreetingsMavenApplication" Но за видео лайк, буду разбираться )
@shurik_codes
@shurik_codes 7 ай бұрын
Постараюсь ответить завтра
@egordrozdov2159
@egordrozdov2159 6 ай бұрын
Здравствуйте, Александр, с такой же проблемой столкнулся-Error: Could not find or load main class...
@shurik_codes
@shurik_codes 6 ай бұрын
В финальной версии проекта при сборке интегрируется плагин Spring Boot, который упаковывает нестандартный JAR, поэтому JVM не может найти класс. Нужно либо отключить плагин spring-boot-maven-plugin (удалить executions), либо удалить его@@egordrozdov2159
Keycloak и Spring Security
37:37
Уголок сельского джависта
Рет қаралды 10 М.
Testcontainers и Spring Boot 3.1
19:47
Уголок сельского джависта
Рет қаралды 7 М.
МАМА И STANDOFF 2 😳 !FAKE GUN! #shorts
00:34
INNA SERG
Рет қаралды 4,2 МЛН
Пробую самое сладкое вещество во Вселенной
00:41
OMG😳 #tiktok #shorts #potapova_blog
00:58
Potapova_blog
Рет қаралды 4,1 МЛН
ROCK PAPER SCISSOR! (55 MLN SUBS!) feat @PANDAGIRLOFFICIAL #shorts
00:31
Транзакции - Spring Framework в деталях
1:20:21
Уголок сельского джависта
Рет қаралды 20 М.
Actuator, Micrometer, Victoria Metrics, Grafana - Мониторинг Spring Boot #micrometer #springboot
39:40
Уголок сельского джависта
Рет қаралды 6 М.
Инструменты логгирования для платформы Java
1:07:35
Уголок сельского джависта
Рет қаралды 4,9 М.
Docker за 20 минут
21:42
suchkov tech
Рет қаралды 64 М.
FastAPI приложение | Redis + Docker
31:54
Tagir Khalilov
Рет қаралды 12 М.
Основы OAuth 2.0 и OpenID Connect #oauth #oidc #openidconnect
1:10:17
Уголок сельского джависта
Рет қаралды 7 М.
Многопоточность глазами разработчика
1:36:04
Микросервисы со Spring Boot and Spring Cloud
47:01
Aleksandr Barmin
Рет қаралды 4,4 М.
Spring Boot Docker and PostgreSQL
12:35
Dan Vega
Рет қаралды 28 М.
МАМА И STANDOFF 2 😳 !FAKE GUN! #shorts
00:34
INNA SERG
Рет қаралды 4,2 МЛН