Dockerfile

Dockerfile์€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ๋ช…๋ น์–ด๋ฅผ ๊ธฐ๋กํ•œ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ์„ค๊ณ„๋„๋‹ค.

  • ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ธํ”„๋ผ๋ฅผ ์ •์˜ํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๊ณ  ๋™์ผํ•œ ํ™˜๊ฒฝ ์žฌํ˜„ ๊ฐ€๋Šฅ

  • docker build ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Dockerfile์„ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ

์ฃผ์š” ๋ช…๋ น์–ด(Instruction) ์ƒ์„ธ

Dockerfile์˜ ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ, ํšจ์œจ์ ์ธ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด ๊ฐ ๋ช…๋ น์–ด์˜ ํŠน์„ฑ์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

  • FROM: ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•˜๋ฉฐ Dockerfile์˜ ์ฒซ ์ค„์€ ๋ฐ˜๋“œ์‹œ ์ด ๋ช…๋ น์–ด๋กœ ์‹œ์ž‘ ํ•„์š”

  • WORKDIR: ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋  ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ

  • COPY vs ADD

    • COPY: ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์˜ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ๋‹จ์ˆœ ๋ณต์‚ฌ

    • ADD: ํŒŒ์ผ ๋ณต์‚ฌ ์™ธ์— ์›๊ฒฉ URL ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ• ํŒŒ์ผ(.tar, .gz ๋“ฑ) ์ž๋™ ํ•ด์ œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋‚˜, ์˜๋„์น˜ ์•Š์€ ๋™์ž‘ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ผ๋ฐ˜์ ์ธ ๋ณต์‚ฌ๋Š” COPY ์‚ฌ์šฉ์ด ๊ถŒ์žฅ

  • RUN: ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์‹คํ–‰๋  ๋ช…๋ น์–ด๋กœ, ์ฃผ๋กœ ํŒจํ‚ค์ง€ ์„ค์น˜๋‚˜ ํ™˜๊ฒฝ ๊ตฌ์ถ•์— ์‚ฌ์šฉ

  • ENV vs ARG

    • ENV: ๋นŒ๋“œ ์‹œ์ ๊ณผ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘์—์„œ ์œ ์ง€๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜

    • ARG: ์˜ค์ง ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ์ ์—๋งŒ ์œ ํšจํ•œ ๋ณ€์ˆ˜๋กœ, --build-arg ์˜ต์…˜์„ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๊ฐ’์„ ์ฃผ์ž… ๊ฐ€๋Šฅ

  • CMD vs ENTRYPOINT

    • CMD: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋  ๊ธฐ๋ณธ ๋ช…๋ น์–ด ๋ฐ ์ธ์ž๋ฅผ ์ง€์ •ํ•˜๋ฉฐ, docker run ์‹œ ์ „๋‹ฌ๋œ ์ธ์ž์— ์˜ํ•ด ์™„์ „ํžˆ ๋Œ€์ฒด ๊ฐ€๋Šฅ

    • ENTRYPOINT: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ ํŒŒ์ผ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋ฉฐ, docker run ์‹œ ์ „๋‹ฌ๋œ ์ธ์ž๊ฐ€ ๋’ค์— ์ถ”๊ฐ€๋˜๋Š” ํ˜•ํƒœ๋กœ ๋™์ž‘

์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Dockerfile ์˜ˆ์‹œ

๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์™€ .dockerignore

๋„์ปค ๋นŒ๋“œ ์„ฑ๋Šฅ๊ณผ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋Š” ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์— ํฌ๊ฒŒ ์˜์กดํ•œ๋‹ค.

  • Build Context: docker build ๋ช…๋ น์–ด์˜ ๊ฒฝ๋กœ ์ธ์ž๋กœ ์ง€์ •๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ, ์ด ๋‚ด๋ถ€์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ๋„์ปค ๋ฐ๋ชฌ์œผ๋กœ ์ „์†ก

  • .dockerignore: ๋นŒ๋“œ์™€ ๋ฌด๊ด€ํ•œ ํŒŒ์ผ(.git, ๋กœ๊ทธ, ๋กœ์ปฌ ์˜์กด์„ฑ ํด๋” ๋“ฑ)์„ ์ „์†ก ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜์—ฌ ๋นŒ๋“œ ์†๋„ ํ–ฅ์ƒ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”

๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ(Multi-stage Builds)

์ตœ์ข… ๋ฐฐํฌ ์ด๋ฏธ์ง€์—์„œ ๋ถˆํ•„์š”ํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋ฒ•์ด๋‹ค.

spinner
  • ํ•˜๋‚˜์˜ Dockerfile ๋‚ด์—์„œ ์—ฌ๋Ÿฌ FROM ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌ

  • ์ด์ „ ๋‹จ๊ณ„(build stage)์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ๋งŒ COPY --from์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„์— ์ „๋‹ฌ

  • ์ตœ์ข… ์ด๋ฏธ์ง€์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋ณด์•ˆ์„ฑ์ด ๋†’์•„์ง€๊ณ  ์ด๋ฏธ์ง€ ์ „์†ก ๋น„์šฉ ๊ฐ์†Œ

Last updated