[DeepDive๐Ÿคฟ] Docker Image ์–ผ๋งˆ๋‚˜ ์ปค์•ผ โ€˜ํฌ๋‹คโ€™๊ณ  ๋งํ• ๊นŒ? - ์ตœ์ ํ™” ์ „๋žต

ํ•œ์œ ์ง„ยท2025๋…„ 11์›” 21์ผ

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

DeepDive ์ฃผ์ œ

๐Ÿ’ก ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ์ปค์ง€๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ „๋žต์„ ์„œ์ˆ ํ•˜์‹œ์˜ค.

์ฃผ์ œ๋ฅผ ๋ณด๊ณ  ๋“  ์ƒ๊ฐ

  • ํฌ๋‹ค๋Š”๊ฒŒ ์–ผ๋งˆ๋‚˜ ์ปค์ง€๋ฉด์ผ๊นŒ?
  • ์ฒ˜์Œ์— ๋นŒ๋“œํ• ๋•Œ๋งŒ ๊ด€๋ จ ๋ฌธ์ œ ๋ฐœ์ƒํ•˜๊ณ , ์ดํ›„์—๋Š” ์ด๋ฏธ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€ ์“ด๋‹ค๊ณ  ํ•˜๋ฉด ๊ดœ์ฐฎ์€๊ฑฐ ์•„๋‹Œ๊ฐ€?

๐Ÿค” ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ โ€œํฌ๋‹คโ€๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋„์ปค๊ด€๋ จํ•˜์—ฌ ์„œ์นญ์„ ํ•ด๋ณด๋ฉด, โ€œ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค.. ์ตœ์ ํ™”ํ•ด์•ผ๊ฒ ๋‹คโ€๋ผ๋Š” ๊ธ€์„ ์ž์ฃผ ์ ‘ํ–ˆ์—ˆ๋‹ค. ๋‚˜ ์—ญ์‹œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ BE, FE ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ๋นŒ๋“œํ•˜๋ฉด์„œ

โ€œ์ด๋ฏธ์ง€๊ฐ€ ํฐ ๊ฒŒ ๋ฌธ์ œ์ผ๊นŒ?โ€ โ€œ์–ผ๋งˆ๋ถ€ํ„ฐ ํฌ๋‹ค๊ณ  ๋ณด๋Š” ๊ฑฐ์ง€?โ€

๋ผ๋Š” ์ƒ๊ฐ์„ ๋งŽ์ด ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ํฌ๋‹ค๋Š” ํ‘œํ˜„์€ ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด๊ณ , ์ด๊ฑธ ์ตœ๊ทผ์— ๋” ํ™•์‹คํ•˜๊ฒŒ ๋А๊ผˆ๋˜๊ฑด ์•„๋ž˜์˜ ํฌ๋Ÿผ๊ธ€์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋‚˜์„œ ๋ถ€ํ„ฐ๋‹ค :

๐Ÿ‘‰ https://forums.docker.com/t/is-the-size-of-docker-image-impact-the-time-of-create-new-container/74271

์—ฌ๊ธฐ์„œ ๋‚˜์˜จ ๋‹ต๋ณ€ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

โ€œThe word โ€˜largeโ€™ of course is a relative term, as are โ€˜fastโ€™ and โ€˜slowโ€™ when considering performance.

Youย mayย be falling into the trap of early optimisation before you really know whether you are actually focusing on the right thing or even if you actually have a performance issue โ€ฆ which you very well may not."

์š”์•ฝํ•˜์ž๋ฉด, ์ด๋ฏธ์ง€๊ฐ€ ํฌ๋‹ค๊ณ  ํ•ด์„œ ๋ฌด์กฐ๊ฑด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ
ํ™˜๊ฒฝ, ๋„คํŠธ์›Œํฌ ์†๋„, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์œ„์น˜, ๋ ˆ์ด์–ด ์บ์‹œ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒด๊ฐ๋œ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋‹ค.

๐Ÿง ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ์•„๋‹Œ์ง€, ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ• ๊นŒ?

ํฌ๋Ÿผ์—์„œ๋„ ๊ฐ•์กฐํ–ˆ๋“ฏ์ด, ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์†๋„์— ์–ด๋А ์ •๋„ ์˜ํ–ฅ์€ ์žˆ์ง€๋งŒ

๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฑด ์ตœ์ดˆ Pull ์‹œ๊ฐ„์ด๋‹ค.

์ฆ‰, ์ด๋ฏธ์ง€๊ฐ€ ์•„๋ฌด๋ฆฌ ์ปค๋„

  • ์ด๋ฏธ ๋…ธ๋“œ์— ์บ์‹œ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋น ๋ฅด๊ฒŒ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ณ 
  • ๋ฐ˜๋Œ€๋กœ ์•„์ฃผ ์ž‘์€ ์ด๋ฏธ์ง€๋ผ๋„ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋А๋ฆฌ๋ฉด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ ์ฒ˜์Œ๋ถ€ํ„ฐ โ€œ์ด๋ฏธ์ง€๊ฐ€ ํฌ๋‹ˆ๊นŒ ๋ฌด์กฐ๊ฑด ์ตœ์ ํ™” ํ•ด์•ผ ํ•œ๋‹ค!โ€๋ผ๊ธฐ๋ณด๋‹ค ์‹ค์ œ๋กœ ๋ณ‘๋ชฉ์ด ์–ด๋”” ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•ด์„œ ํ™•์ธํ•˜๋Š” ๊ฒŒ ์šฐ์„ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ง์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์•„๋ฌด๊ฒƒ๋„ ์‹ ๊ฒฝ ์“ฐ์ง€ ๋ง๋ผ๋Š” ๋œป์ด ์•„๋‹ˆ๋ผ, ์ฒ˜์Œ๋ถ€ํ„ฐ ์ ์šฉํ•ด๋‘๋ฉด ์ข‹์€ ๊ธฐ๋ณธ ์›์น™๋“ค์€ ์ง€ํ‚ค๋˜, ์‹ฌํ™”๋œ ์ตœ์ ํ™”๋Š” ๋ฌธ์ œ๋ฅผ ๊ณ„์ธกํ•œ ๋’ค ํ•„์š”ํ•  ๋•Œ ํ•œ๋‹ค๋ผ๋Š” ๋œป์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋ณ‘๋ชฉ์ด ์–ด๋””์ธ์ง€ ํ™•์ธ๋„ ํ•˜๊ธฐ ์ „์— ์ตœ์ ํ™”๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์˜คํžˆ๋ ค ์—‰๋šฑํ•œ ๋ถ€๋ถ„์— ์‹œ๊ฐ„์„ ์“ฐ๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

Docker Image ์ปค์ง€๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

๊ทธ๋Ÿผ ๊ถ๊ธˆ์ฆ์„ ํ•ด์†Œํ–ˆ์œผ๋‹ˆ, ๋ณธ๋ก ์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ Image๊ฐ€ ์ปค์ง€๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
์ด์™ธ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋งŽ๊ฒ ์ง€๋งŒ, ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ช‡๊ฐœ๋งŒ ์ž‘์„ฑํ•ด๋ดค๋‹ค.

๋ฌธ์ œ์„ค๋ช…
๋ฐฐํฌ/๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„ ์ฆ๊ฐ€ํฐ ์ด๋ฏธ์ง€์ผ์ˆ˜๋ก ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ’€(Pull)ํ•˜๊ฑฐ๋‚˜ ๋…ธ๋“œ์— ๋ฐฐํฌํ•  ๋•Œ ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ๋ฉฐ, ํŠนํžˆ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋А๋ฆฌ๊ฑฐ๋‚˜ CI/CD ํ™˜๊ฒฝ์—์„œ ๋ณ‘๋ชฉ์ด ๋จ.
์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์บ์‹œ ๋น„์šฉ ์ฆ๊ฐ€์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ €์žฅ ๊ณต๊ฐ„, ์บ์‹œ๋œ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด, ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ์˜ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ์ด ์ฆ๊ฐ€
๋ณด์•ˆ ๋ฆฌ์Šคํฌ ๋ฐ ๊ณต๊ฒฉ ํ‘œ๋ฉด ํ™•๋Œ€์ปจํ…Œ์ด๋„ˆ์— ๋” ๋งŽ์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ• ์ˆ˜๋ก ์‹œ์Šคํ…œ์ด ๋” ๋งŽ์ด ๋…ธ์ถœ๋˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง. ๋˜ํ•œ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์–ด๊ฐ€ ๋งŽ์œผ๋ฉด ๊ณผ๊ฑฐ ์‚ญ์ œ๋œ ํŒŒ์ผ์ด๋ผ๋„ ๋ ˆ์ด์–ด ํžˆ์Šคํ† ๋ฆฌ์— ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์Œ
์‹œ์ž‘ยท์Šค์ผ€์ผ๋ง ์ง€์—ฐํฐ ์ด๋ฏธ์ง€์ผ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ์ž‘์€ ์ด๋ฏธ์ง€์— ๋น„ํ•ด ๋А๋ฆด ์ˆ˜ ์žˆ๊ณ , ํŠนํžˆ ์˜คํ† ์Šค์ผ€์ผ๋ง์ด๋‚˜ ๋…ธ๋“œ ์‹ ๊ทœ ํ”„๋กœ๋น„์ €๋‹ ์‹œ ์ง€์—ฐ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ

Docker Image ์ตœ์ ํ™”

1๏ธโƒฃย base image ์ตœ์†Œํ™”

  • Alpine ๋“ฑ์˜ ๊ฐ€๋ฒผ์šด Base ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ์‚ฌ์ „์— ์ œ๊ฑฐ
  • Docker ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” โ€œ๊ฐ€์žฅ ์ž‘์€ base image๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ผโ€ ๊ณ  ๊ฐ•์กฐํ•˜๊ณ  ์žˆ์Œ
  • JAVA๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…์„ ๋” ํ•ด๋ณด์ž๋ฉด
    • openjdk ๊ธฐ๋ฐ˜์˜ alpine ์ด๋ฏธ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ
    • ์ž๋ฐ” ๋Ÿฐํƒ€์ž„์šฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋•Œ, JDK๋ณด๋‹ค๋Š” JRE ์‚ฌ์šฉํ•˜๊ธฐ

2๏ธโƒฃ multi-stage builds

  • ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋นŒ๋“œ ๋‹จ๊ณ„์™€ ์‹คํ–‰ ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ตœ์ข… ๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€์—์„œ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋Š” ์ตœ์ ํ™” ๋ฐฉ์‹
  • ๋นŒ๋“œ ๋„๊ตฌ, ๋””๋ฒ„๊ทธ ์‹ฌ๋ณผ, ์ปดํŒŒ์ผ๋Ÿฌ ๋“ฑ์˜ ๊ฐœ๋ฐœ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฏผ๊ฐ ์ •๋ณด ์œ ์ถœ ๋“ฑ์˜ ์œ„ํ—˜์„ฑ ๊ฐ์†Œ
  • ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„์—๋Š” JAR ํŒŒ์ผ๋งŒ Copy โ†’ ์ด๋ฏธ์ง€๊ฐ€ ๋งค์šฐ ์ž‘์•„์ง

3๏ธโƒฃ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ์™ธ (.dockerignore ํ™œ์šฉ)

  • ๋นŒ๋“œ์™€ ๊ด€๋ จ์—†๋Š” ํŒŒ์ผ๋“ค์˜ ๋ชฉ๋ก์„ ๋ช…์‹œํ•œ .dockerignore๋ฅผ ์‚ฌ์šฉ
  • ์ด๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ์ด๋ฏธ์ง€์—์„œ ์ œ์™ธ์‹œ์ผœ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • .gitignore๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•จ

4๏ธโƒฃ Layer ์ˆ˜ ์ตœ์†Œํ™”

  • Docker Image๋Š” ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Œ
  • ๋ ˆ์ด์–ด๊ฐ€ ๋งŽ์œผ๋ฉด build ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ + ์บ์‹œ ๋ณต์žก๋„ ์ฆ๊ฐ€ + ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋„ ์ฆ๊ฐ€
# BAD
FROM node:16
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
...
#Good
FROM node:16
WORKDIR /app
COPY package*.json ./
...

5๏ธโƒฃ Docker build cache ์‚ฌ์šฉ

  • ์บ์‹œ๋Š” Dockerfile์˜ ๊ฐ ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์žฌ์‚ฌ์šฉ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋จ
  • ์–ด๋–ค ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด(์˜ˆ: COPY๋กœ ๋ณต์‚ฌ๋œ ์†Œ์ŠคํŒŒ์ผ์ด ๋ฐ”๋€œ) ๊ทธ ๋ ˆ์ด์–ด ์ดํ›„์˜ ๋ชจ๋“  ๋ ˆ์ด์–ด๋Š” ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋ผ์„œ ๋‹ค์‹œ ๋นŒ๋“œ๋จ โ†’ ๋ณ€๊ฒฝ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๋ช…๋ น์„ ์œ„์ชฝ์— ๋ฐฐ์น˜ํ•˜๋ผ๋Š” ์ด์œ !
  • ์บ์‹œ ์žฌ์‚ฌ์šฉ๋ฅ ์ด ๋†’์„์ˆ˜๋ก ๋นŒ๋“œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  ํšจ์œจ์ด ๋†’์•„์ง
  • ์บ์‹œ ํ™œ์šฉ์„ ์œ„ํ•ด์„œ๋Š” Dockerfile ๊ตฌ์กฐ, COPY ์ˆœ์„œ, ๋ณ€๊ฒฝ ๋นˆ๋„ ๋ถ„๋ฆฌ ๋“ฑ์ด ์ค‘์š”ํ•จ

โœ๏ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋„์ปค ๋ฐฐํฌ์—์„œ ๋‚ด๊ฐ€ ์ ์šฉํ•œ Dockerfile ๊ตฌ์„ฑ ๋ฐฉ์‹

Dockerfile ์ „์ฒด ์ฝ”๋“œ๋Š” ์ด์ „ ํฌ์ŠคํŒ…์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

๐Ÿ”— ์ด์ „ ํฌ์ŠคํŒ… โ€” Docker Compose ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ๋ฐฐํฌ ๊ธฐ๋ก

ํ”„๋ก ํŠธ์—”๋“œ Dockerfile์—์„œ๋Š”

node:24-alpine์„ ์„ ํƒํ•ด OS ๋ ˆ๋ฒจ ํŒจํ‚ค์ง€๋ฅผ ์ตœ์†Œํ™”ํ–ˆ๊ณ 
package.json์„ ๋จผ์ € COPYํ•ด npm install ์บ์‹œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์œผ๋ฉฐ
production ๋ชจ๋“œ๋ฅผ ๋ช…์‹œํ•ด ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ–ˆ๋‹ค.

๋ฐฑ์—”๋“œ Dockerfile์—์„œ๋Š”

๋นŒ๋“œ๋ฅผ ์œ„ํ•œ gradle:8.5-jdk21๊ณผ
์‹คํ–‰์„ ์œ„ํ•œ eclipse-temurin:21-jre๋ฅผ ๋ถ„๋ฆฌํ•ด
๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ๊ตฌ์„ฑํ–ˆ๊ณ 
Gradle ์„ค์ • ํŒŒ์ผ์„ ๋จผ์ € COPYํ•ด dependency ๋ ˆ์ด์–ด์˜ ์บ์‹œ๊ฐ€ ์ž˜ ์œ ์ง€๋˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค.

์ฆ‰, ๋‚˜๋Š” ์ด๋ฒˆ์— โ€œ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ ํ™”ํ•œ ๊ฒƒโ€์ด ์•„๋‹ˆ๋ผ ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ๋ถ€ํ„ฐ ๊ณต์‹๋ฌธ์„œ์˜ ์ตœ์ ํ™” ์›์น™์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ ์šฉํ•ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ€๋ฒผ์šด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ–ˆ๋‹ค.

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

Docker image ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๊ณต์‹๋ฌธ์„œ์— ๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์ด ์žˆ์ง€๋งŒ, ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ด๊ณ  ์‹ค์ „์—์„œ ๋งŽ์ด ์“ฐ์ด๋Š” ์›์น™๋“ค๋งŒ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

๋„์ปค ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋Š” โ€˜์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณผํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒโ€™์ด ์•„๋‹ˆ๋ผ, ๊ธฐ๋ณธ์ ์ธ Best Practice๋Š” ์ดˆ๊ธฐ์— ์ ์šฉํ•ด๋‘๊ณ , ์‹ค์ œ๋กœ ๋ณ‘๋ชฉ์ด๋‚˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋“œ๋Ÿฌ๋‚ฌ์„ ๋•Œ ํ•„์š”ํ•œ ์˜์—ญ์„ ์ถ”๊ฐ€๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋ผ๊ณ  ๋А๊ผˆ๋‹ค.

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ, ์ตœ์†Œ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์„ ํƒ, ์บ์‹œ ์ „๋žต ๊ฐ™์€ ์š”์†Œ๋“ค์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ ์šฉํ•ด๋‘๋ฉด ์ข‹์€ โ€˜๊ธฐ๋ณธ ์„ค๊ณ„โ€™๊ฐ™์€ ๋А๋‚Œ์ด๊ณ , ์ดํ›„ ์„œ๋น„์Šค๊ฐ€ ํ™•์žฅ๋˜๋ฉด์„œ ๋นŒ๋“œยท๋ฐฐํฌ ์†๋„๋‚˜ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ธก์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๋‹ค๋“ฌ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ“ ํšŒ๊ณ 

์ด๋ฒˆ์— ๋„์ปค ๊ธฐ๋ฐ˜์œผ๋กœ FE/BE๋ฅผ ์ง์ ‘ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•ด๋ณด๋ฉด์„œ,
์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋”ฅ๋‹ค์ด๋ธŒ์—์„œ ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ์‹ค์ œ ์ž‘์—…์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค.
์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ โ€œํฌ๋‹ค/์ž‘๋‹คโ€๋ผ๋Š” ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด๋‚˜,
์ตœ์ ํ™”๋Š” ๋ฌด์กฐ๊ฑด ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ์›์น™์„ ์ ์šฉํ•ด๋‘๊ณ 
๋ฌธ์ œ๊ฐ€ ๋ณด์ผ ๋•Œ ๋ณ‘๋ชฉ์„ ์ฐพ์•„์„œ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ด€์ ์ด ์‹ค์ œ Dockerfile ์ž‘์„ฑ ๊ณผ์ •์—์„œ ๊ณ„์† ๋– ์˜ฌ๋ž๋‹ค.

โ€œ์ด๋ก  โ†’ ์‹ค์ „ ์ ์šฉโ€ ํ๋ฆ„์„ ๋ฐ”๋กœ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ ,
์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ผ๋Š” ์ฃผ์ œ๊ฐ€ ๋‹จ์ˆœํžˆ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ์ž‘์—…์ด ์•„๋‹ˆ๋ผ
๋ฐฐํฌ ์†๋„, ์Šค์ผ€์ผ๋ง ๋Œ€์‘, ๋ณด์•ˆ ์•ˆ์ •์„ฑ๊นŒ์ง€ ์—ฐ๊ฒฐ๋˜๋Š” ์ค‘์š”ํ•œ ์„ค๊ณ„ ์š”์†Œ๋ผ๋Š” ๊ฑธ ํ™•์‹คํžˆ ๋А๊ผˆ๋‹ค.
์ด๋ฒˆ ๊ณผ์ œ ๋•๋ถ„์— ์•ž์œผ๋กœ Dockerfile์„ ์ž‘์„ฑํ•  ๋•Œ ๋” ๊ตฌ์กฐ์ ์œผ๋กœ, ๋” ๊ทผ๊ฑฐ ์žˆ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

[์ฐธ๊ณ ์ž๋ฃŒ]

0๊ฐœ์˜ ๋Œ“๊ธ€