[Spring] Jib(์ง€๋ธŒ)๋ฅผ ์ด์šฉํ•œ Docker ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

๋ฐ˜์‘ํ˜•

https://blog.neonkid.xyz/228

 

[Spring boot] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค๊ธฐ Old & New

Spring boot๋กœ ๊ฐœ๋ฐœํ•œ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์Šคํ„ด์Šค์— ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” WAS๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๏ฟฝ๏ฟฝ

blog.neonkid.xyz

์œ„ ํฌ์ŠคํŠธ์—์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด Spring boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ Dockerfile์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ„๋“คํ•œํ…Œ๋Š” ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋ถ€๋‹ด์ด์—ˆ๋‹ค๋Š” ๊ฒƒ์ด ๋‹ค์†Œ ์•„์‰ฌ์› ๋˜ ๋ถ€๋ถ„์ด์—ˆ๋Š”๋ฐ์š”.

 

 

Google Jib

์œ„์™€ ๊ฐ™์ด ๋ณดํ†ต Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ํ”„๋กœ์ ํŠธ ๋ฐ‘์œผ๋กœ Dockerfile์„ ๋ถ™์ด๊ณ  ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฌ๋‚˜ Jib์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” Dockerfile์„ ์ง์ ‘ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ํ”„๋กœ์ ํŠธ์—์„œ Jib์„ ์ด์šฉํ•ด ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด Jib์˜ ๋ฉ”๋ฆฌํŠธ์ž…๋‹ˆ๋‹ค.

 

์ด์ฒ˜๋Ÿผ Google์˜ Jib ํ”„๋กœ์ ํŠธ๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ Docker ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ์„ ์ตœ์ ํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰๋œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. Gradle, Maven์„ ์ง€์›ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•˜๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ด์šฉํ•ด์„œ Spring boot Application์„ ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„์ปค ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://github.com/GoogleContainerTools/jib

 

GoogleContainerTools/jib

๐Ÿ— Build container images for your Java applications. - GoogleContainerTools/jib

github.com

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ OpenContainer ์ด๋ฏธ์ง€๋„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋“ค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์žˆ์–ด ๋งŽ์€ ๊ณ ๋ฏผ์ด ์žˆ์œผ์…จ๋˜ ๋ถ„๋“ค์ด๋ผ๋ฉด, ๊ฝค ๋‹จ๋ฌผ๊ฐ™์€ ์†Œ์‹์ผ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.

 

 

 

How to use

์ด์ œ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜น์€ Spring boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถˆ๋Ÿฌ์˜ค์‹œ๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ €๋Š” Gradle์„ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฐ ๋‹ค์Œ war์™€ jib ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ war๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” jib ๋‚ด์— ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— Jetty ์›น ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋ณธ ๋‚ด์žฅ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Embedded Tomcat์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” jar๊ฐ€ ์•„๋‹Œ war๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

IDE์—์„œ bootWar๋ฅผ ์ด์šฉํ•ด war ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

war ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ/libs ํด๋”์— ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

 

war ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค๋ฉด ์ด์ œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. jib ๋ฐ‘ ์ชฝ์— ์žˆ๋Š” jibDockerBuild ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

๋ช…๋ น์ด ์ž˜ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ž˜ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด docker image์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. docker run ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ Jib์„ ์ด์šฉํ•˜์—ฌ Dockerfile ์—†์ด๋„ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋„์ปค ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. 

 

๊ธฐ์กด์˜ Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋ž‘ ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒƒ์€ ์—†์ง€๋งŒ Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปค๋งจ๋“œ๋Š” WAS๊ฐ€ Tomcat์ธ ๋ฐ˜๋ฉด, Jib์—์„œ ๋งŒ๋“œ๋Š” ์ด๋ฏธ์ง€๋Š” Jetty๋ผ๋Š” ์ ์ด ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์™ธ์—๋„ ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” jibDockerBuild๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ์ปฌ์— ์žˆ๋Š” Docker Registry์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ jibBuildTar ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด tar ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด Docker CLI์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ Registry์— ๋ฐฐํฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://cloud.google.com/java/getting-started/jib

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments