Jib

์™œ Jib๋Š” ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๊ฐ€?

  • ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋™์•ˆ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ฌด์Šจ ์ผ๋“ค์„ ํ–ˆ์„๊นŒ?

    • ๊ตฌ๊ธ€์— Java Docker Image ์ƒ์„ฑํ•˜๋Š” ๋ฒ•์„ ์ฐพ์•„๋ณธ๋‹ค.
      • ์—ด์‹ฌํžˆ DockerFile์„ ์ž‘์„ฑํ•œ๋‹ค.
      • ์šฐ๋ถ„ํˆฌ๋ฅผ ๋ฐ›๊ณ  โ†’ ์ž๋ฐ”๋ฅผ ๋‹ค์šด๋ฐ›๊ณ  โ†’ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ  โ†’ ์‹คํ–‰ํ•œ๋‹ค.
    • ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•ด๋ณผ๊นŒ?
      • ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  openjdk์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋นŒ๋“œ๋œ jar๋ฅผ ๋ณต์‚ฌํ•˜๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค.
      • ๋ณต์žกํ•œ ๊ณผ์ •์ด ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ openjdk ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ํฐ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
      • alpine์ด๋ผ๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž. โ†’ ์šฉ๋Ÿ‰์ด ์ค„์—ˆ๋‹ค.
      • DockerFile์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ์ฝ๋Š”๋‹ค. - ๋ฌธ์„œ
    • .dockerignore๋ฅผ ์—ด์‹ฌํžˆ ์ž‘์„ฑํ•œ๋‹ค.
      • !target/something-*.jar
    • ์กฐ๊ธˆ ๋” ๊ฐœ์„ ํ•˜์—ฌ ๋นŒ๋“œ๋œ dependencies๋“ค์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ €์žฅํ•œ๋‹ค.
      • ๋ถ„๋ฆฌ๋œ ์˜์กด์„ฑ์„ ํ•˜๋‚˜์˜ Layer๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
      • ์ตœ๋Œ€ํ•œ Cache๋ฅผ ํ™œ์šฉํ•˜์—ฌ Dockerfile์„ ์ž‘์„ฑํ•œ๋‹ค.
    • Maven Plugin์„ ํ™œ์šฉํ•œ๋‹ค.
  • ์ด ๋ชจ๋“  ๊ณผ์ •์ด ๋ณต์žกํ•˜๊ณ .. ํ•™์Šต๋‚œ์ด๋„๋„ ๋†’๊ณ .. ๋‚œ ๊ทธ์ € ๋‹จ์ˆœํžˆ Containerizingํ•˜๊ณ  ์‹ถ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๋ณต์žกํ•œ ๊ณผ์ •์„ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋งŒ๋“ ๊ฒŒ Jib์ด๋‹ค.

Jib๋ž€?

  • Containerize your Java application.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉํ•˜๊ณ . jib๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋งˆ์น˜ Container์˜ compiler์™€ ๊ฐ™์€ ์—ญํ• ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Goals

  • Fast
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Multiple Layer๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ๋‹ค.
    • ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ๋งŒ ์ด๋ฏธ์ง€ ๋นŒ๋“œ์— ๋ฐ˜์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„์ฃผ ๋น ๋ฅด๋‹ค.
  • Reproducible
    • ๋™์ผํ•œ ์ปจํ…์ธ ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.
    • ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Daemonless
    • Docker Image๋ฅผ Maven, Gradle์™€ ๊ฐ™์€ ๋นŒ๋“œ ํˆด์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ๋”์ด์ƒ Dockerfile์ด๋‚˜ Docker build/push์™€ ๊ฐ™์€ ์•ก์…˜์ด ํ•„์š”์—†๊ฒŒ ๋œ๋‹ค.

Jib Base Image๋Š”?

  • ์‹คํ–‰ํ™˜๊ฒฝ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋“ค๊ณ  ์žˆ๋‹ค.
    • ํ‘œ์ค€ Linux distribution์— ํฌํ•จ๋œ shell๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์€ ์—†๋‹ค.
  • https://github.com/GoogleContainerTools/distroless

Getting Started

plugins {
  id 'com.google.cloud.tools.jib' version '2.6.0'
}
gradle jib - build image
gradle jibDockerBuild - Docker daemon๋ฅผ ํ™œ์šฉํ•œ ๋นŒ๋“œ

Multi Module Example

Jib๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ๋“ค

  • jib์—์„œ ๋งŒ๋“œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— *๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ classpath ordering์ด ๋ฐ”๋€Œ๊ฒŒ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ โ†’ ์ตœ์‹  ๋ฒ„์ ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.(java version 11 up)

Reference