Wpis z mikrobloga

Mam aplikacje w javie, którą żeby uruchomić po raz pierwszy na nowym środowisku doweloperskim muszę dogrywać różne jary i inne biblioteki. Czy w takiej sytuacji stworzenie obrazu dockerowego z potrzebnymi bibliotekami jest sensowne? Czy środowisko (Intelij Idea) będzie widział, że ma potrzebne biblioteki na obrazie dockerowym? I w końcu czy do takich celów używa się dockera czy może tylko do stworzenia "paczki" i wrzucenia gotowego obrazu na produkcję. Jestem zupełnie zielony w tym temacie.
#programowanie #java #docker
  • 13
Mam aplikacje w javie, którą żeby uruchomić po raz pierwszy na nowym środowisku doweloperskim muszę dogrywać różne jary i inne biblioteki. Czy w takiej sytuacji stworzenie obrazu dockerowego z potrzebnymi bibliotekami jest sensowne?


@Di4bllo: raczej nie, dużo lepiej zarządzać wszystkimi zależnościami za pomocą mavena albo gradle. Docker przydaje się, jak chcesz wrzucić swoją apkę na produkcję, do developmentu w javie docker jest zbyt dużym narzutem, żeby był sens takiej zabawy
@Saly: dzięki za rozjaśnienie tematu. To jaki jest sens w takim razie sens używania dockera gdy mogę sobie jara/wara wrzucić na serwer i zwyczajnie uruchomić. Jaki jest realny zysk podejścia z użyciem dockera?
@Di4bllo: nie musisz wrzucac jara/wara/jvma, tylko obraz. Używając dockera nie obchodzi cię w jakiej technologii została napisana, więc masz fajną warstwę "odcinającą" abstrakcję od implementacji. Inne zalety to np. swobodny wybór JVMa, łatwe przycinanie zasobów albo instalowanie innych potrzebnych narzędzi
legacy aplikacja bez maven/gradle


@Di4bllo: tak czy owak fajnie byłoby zapiąć jakiegoś gradla, żeby projekt developowało się wszędzie tak samo bez ustawiania class pathów w IDE
@Saly: W praktycznym zastosowaniu gdy mamy aplikację w springu stawia się jeden obraz na aplikację, a drugi na bazę danych. Czy uruchamianie bazy na obrazie mija się z celem?
@Di4bllo: mowisz o tym samym obrazie czy w osobnym? Nie mam za bardzo doświadczenia z bazami, ale docker na pewno ułatwia używanie baz, zwłaszcza, że duża część z nich robi straszny syf w plikach.
@Saly: Zupełnie nie mam doświadczenia w tym temacie dlatego wypytuje o różne wariacje, mam rok doświadczenia w javie, ale u nas aplikacja to monolit wrzucana bezpośrednio na serwer klienta
@Di4bllo: Ogólnie Docker słabo pasuje do legacy javy i WARów. Idea dockera jest taka ze odpalasz 1 proces ze wszystkimi zależnościami(np konkretna wersja JVM). Czyli w kontenerze masz JVM i fat jara z aplikacją i embedded Tomcatem. Spring Boot od niedawna ma nawet gotowy task dla gradle/mavena który buduje obraz Dockerowy w oparciu o buildpacki(https://github.com/paketo-buildpacks/java).
Jest też kilka dobrych praktyk jak pisać aplikacje żeby wygodnie się ich używało w kontenerach
@Di4bllo: docker ma duży sens do testów integracyjnych. Np. potrzebujesz na czas testów mieć dostępną bazę danych w danej technologii, broker JMS, serwer ldap, etc. Zapoznaj się z projektem testcontainers.
+ docker-compose jak potrzebujesz sobie postawić ileś mikroserwisów na raz, aby uruchomić aplikację.
@Di4bllo: docker-compose jest typowo przeznaczony do użytku na jednej maszynie i jest mocno uproszczony. Do developmentu w sam raz. Np. jak potrzebuję sobie uruchomić lokalnie stos elastica, to mogę go uruchamiać, zatrzymywać i kasować korzystając z jednego polecenia.