Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: doom 12. 06. 2018, 18:01:38

Název: Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: doom 12. 06. 2018, 18:01:38
Zdar, potrebuju udelat docker image, ktorej bude obsahovat spring aplikaci (ne boot), ktera pobezi v tomcate s vyuzitim postgre databazy. S dockerem teprv zacinam, tak bych vas chctel poprosit, jestli jste nekdo neco podobneho resil, a neposkytnul dockfile, nebo nejaku radu jak to udelat? Jestli se ptam na blbost tak se omlouvam, je to pro me nove. Dekuji.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: uuuuuuuu 12. 06. 2018, 18:29:29
Db bych dovnitr dockeru nedaval.
Obzvalste ne velkou db.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: doom 12. 06. 2018, 19:06:45
Db bych dovnitr dockeru nedaval.
Obzvalste ne velkou db.


jenom testovaci pro vyvoj
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: pecrom 12. 06. 2018, 19:09:26
sel bych asi cestou docker compose - jednu servisu dat jako postgres a druhou dockerfile a v nem tomcat s tou springovou apkou
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: kimec 12. 06. 2018, 20:00:03
Zdar, potrebuju udelat docker image, ktorej bude obsahovat spring aplikaci (ne boot), ktera pobezi v tomcate s vyuzitim postgre databazy. S dockerem teprv zacinam, tak bych vas chctel poprosit, jestli jste nekdo neco podobneho resil, a neposkytnul dockfile, nebo nejaku radu jak to udelat? Jestli se ptam na blbost tak se omlouvam, je to pro me nove. Dekuji.
Toto, co chcete, je vyslovene anti-pattern. V image mate mat jeden process, to je presne jeden process, nie dva, nie tri - jeden. Vo vasom pripade je JVMko jeden process a Postgres druhy.

Druhy bod, na ktorom sa vzdy pobavim, je kombinacia Javy a Dockra.... Aky to ma preboha vyznam? Vytvarat virtualizovane prostredie pre uz aj tak vitualny stroj s vlastnou virtualnou instrukcnou sadou, ktory virtualizuje 3/4 OS rozhrani? Dufam, ze aj ten Docker Linux host bezi na VMWare. Videli ste film Inception? Aj v tomto pripade na kazdej urovni bezi cas kusicek pomalsie....

V skratke, Docker pre Javu sa vola Spring Boot, alebo Capsule, pricom ten druhy je polomrtvy projekt, takze plati Docker pre Javu = Spring Boot.
Rozhodne urobite lepsie, ked preportite vas kod na Spring Boot ako ze nabastlite nepodareny shell script, ktory sa v jednom Docker image bude snazit spustit aj JVM aj Postgres.

Istotne viete, ze Spring Boot generuje monolicticky image vsetkych zavislosti, podobne ako Docker, v ktorom vam nastartuje aplikacia, relacna databaza a kompletna AI platforma, MapReduce framework a este aj ten Tomcat....
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: _Tomáš_ 12. 06. 2018, 21:42:19
Toto, co chcete, je vyslovene anti-pattern. V image mate mat jeden process, to je presne jeden process, nie dva, nie tri - jeden. Vo vasom pripade je JVMko jeden process a Postgres druhy.

Druhy bod, na ktorom sa vzdy pobavim, je kombinacia Javy a Dockra.... Aky to ma preboha vyznam? Vytvarat virtualizovane prostredie pre uz aj tak vitualny stroj s vlastnou virtualnou instrukcnou sadou, ktory virtualizuje 3/4 OS rozhrani? Dufam, ze aj ten Docker Linux host bezi na VMWare. Videli ste film Inception? Aj v tomto pripade na kazdej urovni bezi cas kusicek pomalsie....

V skratke, Docker pre Javu sa vola Spring Boot, alebo Capsule, pricom ten druhy je polomrtvy projekt, takze plati Docker pre Javu = Spring Boot.
Rozhodne urobite lepsie, ked preportite vas kod na Spring Boot ako ze nabastlite nepodareny shell script, ktory sa v jednom Docker image bude snazit spustit aj JVM aj Postgres.

Istotne viete, ze Spring Boot generuje monolicticky image vsetkych zavislosti, podobne ako Docker, v ktorom vam nastartuje aplikacia, relacna databaza a kompletna AI platforma, MapReduce framework a este aj ten Tomcat....

docker a jeden proces je také anti-pattern :)

Docker není virtualizace, není to další vrstva na překlad, docker je založen na Linux namespaces, což je takové oddělení procesů do vlastních přihrádek. S dockerem je jen problém s iops na disky, to se ale také dá vyřešit přes device.

Použít tohle pro vývoj nemusí být špatné, aspoň má oddělené prostředí od svého a může testovat různé verze sestavení.

Na začátky není vůbec špatné si pohledat na veřejném repositáři, kde máš na proklik i Dockerfile https://hub.docker.com/search/?isAutomated=1&isOfficial=0&page=1&pullCount=0&q=spring&starCount=0, případně zkus vlastní vyhledávací dotaz.

Skoro přesně to co chceš je popsané na blogu dockeru https://blog.docker.com/2017/05/spring-boot-development-docker/ , zkus příště více hledat. Bez angličtiny se moc neobejdeš.

Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: tdvorak 13. 06. 2018, 08:48:40
Istotne viete, ze Spring Boot generuje monolicticky image vsetkych zavislosti, podobne ako Docker, v ktorom vam nastartuje aplikacia, relacna databaza a kompletna AI platforma, MapReduce framework a este aj ten Tomcat....

Huh, co to? Jasne, Spring Boot si pribali do jaru nejaky aplikacni kontejner a je tak primo spustitelny nad JVM. Ale tvrdit, ze nahradi Docker, databazi, umelou inteligenci a kdovi co vsechno je hodne nadsazene. Porad je treba resit nejak databazi a pripojeni k ni (nechcete nechat bezet realnou aplikaci nad H2 nebo HSQLDB, ze ne?). Porad je treba resit JVM.

Z meho pohledu naopak Spring Boot aplikace dobre pasuje do Docker ekosystemu - mate jeden spustitelny jar, ten nakopirujete do Docker image, ktery uz obsahuje JVM a jednoduse jej spustite. Porad ale mate nekde externi databazi, ke ktere se aplikace pripoji (alespon pokud nejde jen o test nebo hobby projekt). 
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: kimec 13. 06. 2018, 12:22:40
docker a jeden proces je také anti-pattern :)
Fakt? No toto mi musite vysvetlit. Vo vasom image bezi aj cely init system? Postgres bude spawnovat JVMko ako podproces? Ci ako ste to mysleli?
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: kimec 13. 06. 2018, 12:48:45
Istotne viete, ze Spring Boot generuje monolicticky image vsetkych zavislosti, podobne ako Docker, v ktorom vam nastartuje aplikacia, relacna databaza a kompletna AI platforma, MapReduce framework a este aj ten Tomcat....
Huh, co to? Jasne, Spring Boot si pribali do jaru nejaky aplikacni kontejner a je tak primo spustitelny nad JVM. Ale tvrdit, ze nahradi Docker, databazi, umelou inteligenci a kdovi co vsechno je hodne nadsazene. Porad je treba resit nejak databazi a pripojeni k ni (nechcete nechat bezet realnou aplikaci nad H2 nebo HSQLDB, ze ne?). Porad je treba resit JVM.
Huh, nic to. Apache Ignite vam asi nic nehovori. To ze vy si to neviete predstavit neznamena, ze vsetci budu cakat, kym si to predstavit budete vediet a potom to zacnu robit.

Apropo, to ste si ozaj mysleli, ze vsetko, co Spring Boot robi je, ze pribali aplikacny kontajner? Technicky nemusite mat ziaden aplikacny kontajner. Radsej si precitajte, co ten Spring Boot vlastne robi.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: Filip Jirsák 13. 06. 2018, 13:32:51
Radsej si precitajte, co ten Spring Boot vlastne robi.
Doporučil bych vám to samé… Spring Boot usnadňuje konfiguraci Spring frameworku a ostatních springovských komponent. To je vše. Tvrdit, že je to Docker pro Javu, je totálně mimo.

Docker pro Javu má úplně stejný význam, jako Docker pro jakoukoli jinou aplikaci. Máte prostě jasně definované prostředí, bez ohledu na systém okolo. Když máte aplikaci otestovanou se standardním Java 9 JRE od Oraclu, vytvoříte si image, kde je tohle prostředí, a nemusí vás zajímat, že se to bude spouštět na počítači, kde není vůbec žádná Java, nebo je tam OpenJDK 7 s knihovnami nainstalovanými v lib/ext, protože to tak potřebuje nějaká jiná aplikace, která tam běží.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: kimec 13. 06. 2018, 16:29:04
Radsej si precitajte, co ten Spring Boot vlastne robi.
Doporučil bych vám to samé… Spring Boot usnadňuje konfiguraci Spring frameworku a ostatních springovských komponent. To je vše. Tvrdit, že je to Docker pro Javu, je totálně mimo.

Docker pro Javu má úplně stejný význam, jako Docker pro jakoukoli jinou aplikaci. Máte prostě jasně definované prostředí, bez ohledu na systém okolo. Když máte aplikaci otestovanou se standardním Java 9 JRE od Oraclu, vytvoříte si image, kde je tohle prostředí, a nemusí vás zajímat, že se to bude spouštět na počítači, kde není vůbec žádná Java, nebo je tam OpenJDK 7 s knihovnami nainstalovanými v lib/ext, protože to tak potřebuje nějaká jiná aplikace, která tam běží.

Docker pro Javu má úplně stejný význam, jako Docker pro jakoukoli jinou aplikaci.
Problem asi bude v tom, ze JRE nie je aplikacia, ale runtime s virtualizovanou spravou pamate, vlakien, IO atd.

Este ked ten vas linuxovy docker image pofici na windowse tak bude super.

Viete, to Spring Boot monoliticke jarko vam pojde aj na Windowse aj na Linuxe, staci ked ho nezabalite do docker image pre Linux...

Neviem o tom, ze by ste nemohli mat trebars 6 roznych JRE od 3 roznych vendorov vedla seba na jednom OS. Vy ano?

Mozete mat 6 docker verzii vedla seba? A take ze Windowsovy docker na Linuxe? To este pojde bez paravirtualizacie alebo full HW virtualizacie?
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: Filip Jirsák 13. 06. 2018, 16:48:59
Problem asi bude v tom, ze JRE nie je aplikacia, ale runtime s virtualizovanou spravou pamate, vlakien, IO atd.
Což je aplikace. Z pohledu operačního systému se běžící JVM nijak neliší od vimu, LibreOffice nebo Apache.

Este ked ten vas linuxovy docker image pofici na windowse tak bude super.
Pofičí, jmenuje se to Docker for Windows.

Viete, to Spring Boot monoliticke jarko vam pojde aj na Windowse aj na Linuxe, staci ked ho nezabalite do docker image pre Linux...
Pojede na Windows, kde není nainstalované JRE? To bych chtěl vidět. Nebo když budu mít to monolitické JARko přeložené pro Javu 9 a na cílovém systému bude jen Java 8.

Neviem o tom, ze by ste nemohli mat trebars 6 roznych JRE od 3 roznych vendorov vedla seba na jednom OS. Vy ano?
A pak musíte vždy při spuštění uvádět přesnou cestu k JRE, hlídat, aby vám příslušné JRE neodinstalovala aktualizace, a pokud příslušná aplikace sama spouští JRE (třeba Maven), musíte ještě přímo té aplikaci nastavit, které přesně JRE má spustit… Jistě že to jde, ale je to komplikované. Docker slouží právě k tomu, že máte prostředí zafixované (takže nemusíte zkoumat, zda je tam správná verze toho a toho), a že je to prostředí izolované (takže vás nemusí zajímat, co potřebují jiné aplikace, protože to neovlivní vaše prostředí).


Mozete mat 6 docker verzii vedla seba?
Mít 6 verzí Dockeru vedle sebe nedává moc smysl. Ale spustit pod jedním Dockerem 6 verzí jedné aplikace, nebo klidně 6 instancí jedné verze aplikace, to smysl dává, a je to jeden z důvodů, proč se Docker používá.

A take ze Windowsovy docker na Linuxe?
Proč takovou hloupost, když mám na Linuxu linuxový Docker?

To este pojde bez paravirtualizacie alebo full HW virtualizacie?
Nepůjde. Docker s virtualizací nijak nesouvisí, Docker jsou kontejnery. Tak abyste si k tomu Spring Bootu ještě nastudoval, co je Docker…
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: Wavelet 13. 06. 2018, 18:55:11
Radsej si precitajte, co ten Spring Boot vlastne robi.
???
Obrušte si prosím ego do přijatelného tvaru a velkosti.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: _Tomáš_ 13. 06. 2018, 22:04:00
docker a jeden proces je také anti-pattern :)
Fakt? No toto mi musite vysvetlit. Vo vasom image bezi aj cely init system? Postgres bude spawnovat JVMko ako podproces? Ci ako ste to mysleli?

Co znamená "jeden proces" ve světě linuxu? Existuje minimum aplikací, které běží v jednom procesu a je naprosto běžné, že si aplikace zakládají spousty thready či podprocesů a proces s pid 1 má určitá specifika, které i tak musí aplikace dodržovat, ani blbé JVM se nechová v pořádku.

Rád používám odlehčený supervisord nebo https://github.com/krallin/tini, všechny kontejnery aspoň mají pak jednotné chování, jednotný sběr a formát logů a není v tom taková zoo. Mít tam potom více služeb spolu, které spolu úzce souvisí pro vývoj není vůbec špatné.

Důvod proč tohle pravidlo vzniklo je nasnadě, docker má ulehčit správu produkčních serverů, má to být lego, kde mohu libovolný kontejner spustit na libovolném stroji a měnit to dle potřeb aplikací. Pokud v jednom kontejneru spustím více různých služeb, trochu tím tohle lego porušuji. To je doktrína autorů, kterou z počátku drželi, dnes to prošlo evolucí.

V praxi docker také používáme pro snazší vytváření cgroup a limitaci IO pro různé sady aplikací. Ano, dá se to dělat i ručně, ale takhle máme jednotné API pro správu všech druhů aplikací, lépe se to celé testuje a šetří to náklady. To je jeden use case z mnoha.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: kimec 13. 06. 2018, 22:39:26
Problem asi bude v tom, ze JRE nie je aplikacia, ale runtime s virtualizovanou spravou pamate, vlakien, IO atd.
Což je aplikace. Z pohledu operačního systému se běžící JVM nijak neliší od vimu, LibreOffice nebo Apache.
Alebo viete co, nechajte tak, nubudem vas trapit unikernelmi.

Pofičí, jmenuje se to Docker for Windows.
To akoze zoberiem ten linuxovy ELF binar JVMka zabaleny v Docker image, otocim to voci Windows kernelu a pojde to? No neviem, ja som bol v tom, ze aby siel Linuxovy image v Dockeri na Windowse, treba paravirtualizovat Linuxovy kernel cez Hyper-V (http://"https://blog.docker.com/2017/09/preview-linux-containers-on-windows/"). To mi teda nepripada ako nenarocna kontajnerova izolacia cez namespace a cgroupy, ale budiz.
Alebo ste mali na mysli, nativne Windows Server Containery (http://"https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility"), ale tam uz asi linuxovy ELF vobec nespustim, ze.

Nepůjde. Docker s virtualizací nijak nesouvisí, Docker jsou kontejnery. Tak abyste si k tomu Spring Bootu ještě nastudoval, co je Docker…
Dik za tip. Citali ste to vyssie? Co keby ste si vy nastudovali ako to funguje?

A pak musíte vždy při spuštění uvádět přesnou cestu k JRE, hlídat, aby vám příslušné JRE neodinstalovala aktualizace, a pokud příslušná aplikace sama spouští JRE (třeba Maven), musíte ještě přímo té aplikaci nastavit, které přesně JRE má spustit… Jistě že to jde, ale je to komplikované. Docker slouží právě k tomu, že máte prostředí zafixované (takže nemusíte zkoumat, zda je tam správná verze toho a toho), a že je to prostředí izolované (takže vás nemusí zajímat, co potřebují jiné aplikace, protože to neovlivní vaše prostředí).
Vy akoze neupdatujete JRE, ci co? Co musite mat pri jave zafixovane? Neviete spustit java8 -jar app.jar alebo java9 -jar app.jar alebo random-java -jar app.jar? Kvoli tomu potrebujete Docker?

Mít 6 verzí Dockeru vedle sebe nedává moc smysl. Ale spustit pod jedním Dockerem 6 verzí jedné aplikace, nebo klidně 6 instancí jedné verze aplikace, to smysl dává, a je to jeden z důvodů, proč se Docker používá.
Mat JREcko v Dockri dava zmysel? Spustit na jednom JRE 6 verzii jednej aplikacie nejde? Alebo aj 6 instancii 6 verzii jednej aplikacie na 3 roznych JRE? To je akoze TEN problem?

Pojede na Windows, kde není nainstalované JRE? To bych chtěl vidět. Nebo když budu mít to monolitické JARko přeložené pro Javu 9 a na cílovém systému bude jen Java 8.
Hej, malo tam byt "s JRE na Windowse aj na Linuxe". Vy pri buildovani JARka prekompilujete aj bytecode tretich stran ci co? To pocujem prvy raz. Alebo neviete, co si balite k vasej aplikaci?
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: tdvorak 14. 06. 2018, 06:37:35
Ty tvoje rady mi prijdou, jako kdyz zadas problem do Googlu, odcitujes neco z prvni stranky a vyfutrujes to cool klicovejma slovama a technologiema. Uplne ti unika, co se ti tu snazime vysvetlit.

Vy akoze neupdatujete JRE, ci co? Co musite mat pri jave zafixovane? Neviete spustit java8 -jar app.jar alebo java9 -jar app.jar alebo random-java -jar app.jar? Kvoli tomu potrebujete Docker?

Jasne, ze muzes mit vic verzi javy, a muzes tak mit neocekavany chovani v jakykoliv fazi vyvoje. Pokud ale aplikace bezi v dockeru s jasne definovanou verzi, mas jistotu, ze na presne te same verzi to bylo v developmentu, pri testech, na stagingu i v produkci. Mas presne definovane a stabilni prostredi, vsude stejne. Ne podle toho, ktery vyvojar si naposledy updatoval, jak stary debian v produkci a na cem to zrovna spousti QA. 


Alebo viete co, nechajte tak, nubudem vas trapit unikernelmi.

Predpokladam, ze s tim mas bohatou zkusenost. Popis nam prosim trochu, jak a co v tom provozujete. Nebo to byl zas jen dotaz do Googlu, ktery vyplivnul tenhle experimentalni projekt: https://github.com/solo-io/unik/ ?

Spustit na jednom JRE 6 verzii jednej aplikacie nejde? Alebo aj 6 instancii 6 verzii jednej aplikacie na 3 roznych JRE? To je akoze TEN problem?

Jasne ze jde, ale bude to peknej vopruz. Uz jen treba proto, ze pokazdy tu aplikaci budes muset prekonfigurovat, aby poslouchala na jiny sade portu. 

Nebo pokud ta aplikace potrebuje jeste dalsi sluzby, treba elastic, memcached, nejakou MQ, bude to pekny peklo, udrzet vsechno vsude dostupny, spravne nakonfigurovany, ve spravnych verzich. Zatimco s Dockerem to mas jeden Compose file, kde jsou presne definovane sluzby, jejich verze, porty, zavislosti mezi nima. Jeden docker-compose up ti rozjede vsechno driv, nez ty zjistis, jakou verzi JRE vlastne potrebujes a mas nainstalovat.

Huh, nic to. Apache Ignite vam asi nic nehovori.

Tady si nam porad nevysvetlil, jak moc dobrej napad je pustit si jednu instanci embedded databaze v ramci tvy aplikace. Jasne, ze to jde, kdyz neco takovyho potrebujes v testech. Stejne tak, jako ta H2 nebo HSQLDB. Pro produkci to ale asi nebude uplne idealni volba, mit jen jednu embedded instanci, ktera zije a umira zaroven s tvou aplikaci (jedno, jaka DB nebo sluzba). Taky si muzu pribalit jeden Elastic node k aplikaci a pojede to. Ale realne mam cely oddeleny cluster, s nekolika nody, na uplne jinych strojich, nez bezi aplikace. To, ze neco jde, jeste neznamena, ze je to dobry napad.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: Filip Jirsák 14. 06. 2018, 07:51:22
Alebo viete co, nechajte tak, nubudem vas trapit unikernelmi.
Nemusíte mít strach – fakt mne netrápí, že pořád melete o věcech, o kterých nic nevíte.

To akoze zoberiem ten linuxovy ELF binar JVMka zabaleny v Docker image, otocim to voci Windows kernelu a pojde to? No neviem, ja som bol v tom, ze aby siel Linuxovy image v Dockeri na Windowse, treba paravirtualizovat Linuxovy kernel cez Hyper-V (http://"https://blog.docker.com/2017/09/preview-linux-containers-on-windows/"). To mi teda nepripada ako nenarocna kontajnerova izolacia cez namespace a cgroupy, ale budiz.
Vy jste se ovšem ptal, jestli ten Linuxový image půjde provozovat i pod Windows. A to půjde, jak už jste sám zjistil – a třeba pro vývoj to výkonově bude stačit.

Dik za tip. Citali ste to vyssie? Co keby ste si vy nastudovali ako to funguje?
„Výše“ je předchozí část vašeho komentáře, o způsobu spouštění linuxových Docker kontejnerů na Windows? Tu jsem fakt nečetl dřív, než jste ji napsal. A jak funguje Docker vím a věděl jsem to i před tím, než vy jste začal googlit, abyste zjistil, proč Docker není virtualizace, ale že se jedná o kontejnery.

Vy akoze neupdatujete JRE, ci co?
Já ho updatuju. Ale lidé provozují i Javu i na počítačích, které nespravuju, a provozují tam i jiné aplikace, než ty moje.

Co musite mat pri jave zafixovane?
Třeba verzi JRE (např. kvůli vyhnutí se známým chybám), dodavatele JRE (Oracle/OpenJDK/IBM), ve starších verzí Security Policy, Java extensions, Java agents, národní prostředí, nativní knihovny používané přes JNI…

Neviete spustit java8 -jar app.jar alebo java9 -jar app.jar alebo random-java -jar app.jar?
Viem. A vy si takhle někdy zkuste spustit Maven – java-8 -jar mvn.sh. To se budete divit. Nebo si takhle zkuste spustit Java WebStart aplikaci.

Kvoli tomu potrebujete Docker?
Ne.

Mat JREcko v Dockri dava zmysel?
Ano, perfektní. Porovnejte si třeba instalaci Confluence v porovnání s docker run, porovnejte si instalaci Elasticsearch + LogStash + Kibana s docker-compose up. A pak si to porovnejte, když to budete spouštět na 16 serverech ručně a když to tam spustíte přes Kubernetes.

Spustit na jednom JRE 6 verzii jednej aplikacie nejde? Alebo aj 6 instancii 6 verzii jednej aplikacie na 3 roznych JRE? To je akoze TEN problem?
Docker neřeší nic, co by nešlo jinak. Akorát jsou některé věci podstatně jednodušší.

Navíc Docker podle mého názoru některé věci řeší ne zrovna nejlépe, radši mám třeba rkt. Ale tady šlo o něco úplně jiného –  o to, že jste nechápal, že Spring Boot slouží jenom pro snazší konfiguraci Spring frameworku a přidružených technologií; zatímco Docker slouží pro zabalení celého prostředí aplikace (nejen Javovské) do jednoho balíčku, který je pak možné distribuovat a spouštět na různých prostředích (ať už na bare metal, ve virtuálních strojích nebo v cloudu) a který na rozdíl od jiných způsobů (třeba virtualizace celého OS) řeší oddělení jednotlivých prostředí pouze pomocí linuxových jmenných prostorů, takže je tam minimální overhead (a na druhou stranu to oddělení není úplně dokonalé).

Vy pri buildovani JARka prekompilujete aj bytecode tretich stran ci co?
Ne. A víte vy vůbec, jak vypadá taková Java aplikace? Protože vaše odpověď je poněkud mimoběžná s námitkou, že pod JRE 8 nespustíte aplikaci s bajtkódem zkompilovaným pro Javu 10.

Alebo neviete, co si balite k vasej aplikaci?
Vím. Ale to že to vím nijak nepomáhá tomu, aby někdo spustil pod Javou 8 bajtkód pro Javu 10.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: doom 17. 06. 2018, 10:18:08
Toto, co chcete, je vyslovene anti-pattern. V image mate mat jeden process, to je presne jeden process, nie dva, nie tri - jeden. Vo vasom pripade je JVMko jeden process a Postgres druhy.

Druhy bod, na ktorom sa vzdy pobavim, je kombinacia Javy a Dockra.... Aky to ma preboha vyznam? Vytvarat virtualizovane prostredie pre uz aj tak vitualny stroj s vlastnou virtualnou instrukcnou sadou, ktory virtualizuje 3/4 OS rozhrani? Dufam, ze aj ten Docker Linux host bezi na VMWare. Videli ste film Inception? Aj v tomto pripade na kazdej urovni bezi cas kusicek pomalsie....

V skratke, Docker pre Javu sa vola Spring Boot, alebo Capsule, pricom ten druhy je polomrtvy projekt, takze plati Docker pre Javu = Spring Boot.
Rozhodne urobite lepsie, ked preportite vas kod na Spring Boot ako ze nabastlite nepodareny shell script, ktory sa v jednom Docker image bude snazit spustit aj JVM aj Postgres.

Istotne viete, ze Spring Boot generuje monolicticky image vsetkych zavislosti, podobne ako Docker, v ktorom vam nastartuje aplikacia, relacna databaza a kompletna AI platforma, MapReduce framework a este aj ten Tomcat....

docker a jeden proces je také anti-pattern :)

Docker není virtualizace, není to další vrstva na překlad, docker je založen na Linux namespaces, což je takové oddělení procesů do vlastních přihrádek. S dockerem je jen problém s iops na disky, to se ale také dá vyřešit přes device.

Použít tohle pro vývoj nemusí být špatné, aspoň má oddělené prostředí od svého a může testovat různé verze sestavení.

Na začátky není vůbec špatné si pohledat na veřejném repositáři, kde máš na proklik i Dockerfile https://hub.docker.com/search/?isAutomated=1&isOfficial=0&page=1&pullCount=0&q=spring&starCount=0, případně zkus vlastní vyhledávací dotaz.

Skoro přesně to co chceš je popsané na blogu dockeru https://blog.docker.com/2017/05/spring-boot-development-docker/ , zkus příště více hledat. Bez angličtiny se moc neobejdeš.

Hladal som, taktiez som pozeral link, lenze ak sa nemylim tam vytvara tych kontainerov viac pomocou docker compose nie? Ja by som to potreboval v jednom, spustil by som nejaky image a nastartovalo by mi vsetko potrebne v jednom kontaineri
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: Filip Jirsák 17. 06. 2018, 10:55:29
Hladal som, taktiez som pozeral link, lenze ak sa nemylim tam vytvara tych kontainerov viac pomocou docker compose nie? Ja by som to potreboval v jednom, spustil by som nejaky image a nastartovalo by mi vsetko potrebne v jednom kontaineri
Tím ale jdete proti základnímu principu Docker kontejnerů, že v každém kontejneru běží jen jedna aplikace. Vzhledem k tomu, na co se ptáte, asi nebudete expert na Docker, takže bych doporučil toho pravidla se držet – má to dobré důvody, a když se tím nebudete řídit, způsobíte si tím jenom komplikace. Pokud je pro vás naopak tak důležité, aby bylo vše v jednom, není asi Docker to správné řešení. Zvážil bych pak třeba virtualizaci, kdy vytvoříte obraz celého operačního systému a spustíte ho třeba pod VMware nebo VirtualBoxem.
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: doom 17. 06. 2018, 13:15:51
Hladal som, taktiez som pozeral link, lenze ak sa nemylim tam vytvara tych kontainerov viac pomocou docker compose nie? Ja by som to potreboval v jednom, spustil by som nejaky image a nastartovalo by mi vsetko potrebne v jednom kontaineri
Tím ale jdete proti základnímu principu Docker kontejnerů, že v každém kontejneru běží jen jedna aplikace. Vzhledem k tomu, na co se ptáte, asi nebudete expert na Docker, takže bych doporučil toho pravidla se držet – má to dobré důvody, a když se tím nebudete řídit, způsobíte si tím jenom komplikace. Pokud je pro vás naopak tak důležité, aby bylo vše v jednom, není asi Docker to správné řešení. Zvážil bych pak třeba virtualizaci, kdy vytvoříte obraz celého operačního systému a spustíte ho třeba pod VMware nebo VirtualBoxem.

Tak jsem to skusil s docker-compose, aplikace nenastartovala, tak som se podival cez command docker logs to container s tomcatom a nasiel som tuto exception:
Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

Nevite co s tym? port mam definovany v compose file takto
Kód: [Vybrat]
  db:
    image: postgres:9.5-alpine
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: mydb
    ports:
      - '5432:5432'

 a url v springovske aplikaci na db takto:
Kód: [Vybrat]
jdbc:postgresql://localhost/db
Název: Re:Docker image pro Spring + Tomcat + PostgreSQL
Přispěvatel: Filip Jirsák 17. 06. 2018, 13:49:06
Z toho kontejneru Tomcatu se k databázi určitě nebudete připojovat na localhost, ale na název, který Docker vystaví pro ten kontejner s databází. Službu databáze máte pojmenovanou jako db, takže jestli se nepletu, u té java palikace pak musíte v Docker-compose uvést
Kód: [Vybrat]
depends_on:
      - db
a k databázi pak budete přistupovat přes jdbc:postgresql://db/jmeno-databaze.