Nowa wersja Spring Boot 2.3 wprowadza nowe narzędzia, przez które tworzenie obrazów dla Dockera staje się jeszcze prostsze. Od teraz można wykorzystywać Buildpacks do tworzenia obrazów zgodnych z Docker.
Cloud Native Buildpacks
To projekt, który powstał przy współpracy Pivotal (firmy odpowiedzialnej za Spring Framework) i Heroku (popularnej platformie PaaS). Buildpacks to narzędzie, które umożliwia na stworzenie środowiska wykonywanego dla aplikacji wraz z jej wszystkimi niezbędnymi zależnościami.
Na przykład Heroku stosuje to podejście od dawna – po wrzuceniu aplikacji .jar platforma sama jest w stanie dociągnąć JRE, które jest niezbędne do uruchomienia. Tak samo działa to w przypadku wrzucenia aplikacji napisanych w innych językach.
Niestety to rozwiązanie było uzależnione od platformy. Firma Pivotal włożyła wiele starań, aby uniezależnić rozwiązanie od platformy i tak powstał Cloud Native Buildpacks.
Cloud Native Buildpacks funkcjonuje w Spring Boot 2.3 i od tej wersji możemy w bardzo łatwy korzystać z jego dobrodziejstw.
Spring Boot i Dockerfile
Najpopularniejszym sposobem budowy obrazu było wykreowanie pliku Dockerfile w ramach, którego opisywaliśmy w jaki sposób uruchomić aplikacje. To podejście również przedstawiłem na moim blogu we wpisie Docker – budowa obrazu dla aplikacji w Spring Boot.
Podejście to jednak miało dwa zasadnicze problemy:
- po każdej aktualizacji musimy spakować aplikacji do pliku wykonywalnego;
- obraz zawiera informacje o środowisku uruchomienieowym dla aplikacji, co może być problematyczne w przypadku aktualizacji framerowka z którym pracujemy.
Spring Boot 2.3 i Buildpacks – przykład
Samo wykorzystanie Buildpacks jest bardzo proste, sprowadza się do wywołania polecenia:
mvn spring-boot:build-image
Opcjonalnie możemy również dodać nazwę dla naszego obrazu:
mvn spring-boot:build-image -Dspring-boot.build-image.imageName=byku-app
Cloud Native Buildpacks w poradniku wideo
Zapraszam Cię też na mój kanał YouTube, gdzie pokazuje w praktyce jak osiągnąć opisywany rezultat w praktyce:
Docker i Spring Boot – wnioski
Podsumowując – znane nam podejście budowy obrazów w oparciu o Dockerfile jest łatwo zarządzane i dokumentowane. Dlatego w zależności od złożoności aplikacji możemy wykorzystać wybrane podejście. Na pewno rozwiązanie z wykorzystaniem Cloud Native Buildpacks sprawdzi się przy małych aplikacjach.