etc-Dockerfile-layer

๋„์ปค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ณ„์ธต(layer)์„ ๊ฐ€์ง„ ๋‹ค์ˆ˜์˜ ์Šค๋ƒ…์ƒท์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•œ๋‹ค. ์ด๋Š” ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•  ๋•Œ ์ค‘๋ณต๋˜๋Š” ์˜์—ญ์„ ํ•˜๋‚˜์˜ ๋ ˆ์ด์–ด๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜์—ฌ ๊ณต๊ฐ„/์‹œ๊ฐ„์  ํšจ์œจ์„ ์–ป๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

์ฆ‰, ๋„์ปค๋Š” Dockerfile์„ ์ฝ์–ด๋“ค์—ฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋Š” ์ปค๋งจ๋“œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด๊ฒƒ์œผ๋กœ ์ค‘๋ณต๋˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†์–ด์ ธ ์ด๋ฏธ์ง€์˜ ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•œ๋‹ค.

docker-image-layer

ํŠน์ • ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ inspect ๋กœ layer ํ™•์ธํ•˜๊ธฐ

๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์œผ๋ฉฐ, RootFS๋ฅผ ํ™•์ธํ•˜์—ฌ ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ 9๊ฐœ์˜ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Layer ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” syntax

  • RUN, COPY, ADD, WORKDIR, USER

  • ENV, LABEL, ARG, EXPOSE

RUN: ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰

  • ๋”ฐ๋ผ์„œ &&๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์–ด์„œ ํ•˜๋‚˜์˜ ๋ ˆ์ด์–ด๊ฐ€ ์ƒ์„ฑ๋˜๋„๋ก ํ•œ๋‹ค.

  • ์˜ˆ์‹œ: RUN apt-get update && apt-get install -y python

COPY: ์ƒˆ๋กœ์šด ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

ADD: COPY์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒˆ๋กœ์šด ํŒŒ์ผ ๋˜๋Š— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

USER: ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ UID์™€ GID๊ฐ€ ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด์— ๋ฐ˜์˜.

๋งŒ์•ฝ Dockerfile์˜ RUN, ADD, COPY, WORKDIR ๊ณผ ๊ฐ™์€ ๋ช…๋ น๋ฌธ์ด ์ˆ˜์ •๋˜๋ฉด, ๊ธฐ์กด ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™” ๋˜๊ณ , ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Cached layers ์™€ Dockerfile ๋ช…๋ น์–ด ์ˆœ์„œ

  • ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด์ „ ๋นŒ๋“œ์˜ ๋ ˆ์ด์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ๋‹ค.

  • ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋นŒ๋”๋Š” ๋นŒ๋“œ ์บ์‹œ์—์„œ ๋ ˆ์ด์–ด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

  • ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ ์ดํ›„ ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ ˆ์ด์–ด์™€ ๊ทธ ๋’ค์— ์žˆ๋Š” ๋ชจ๋“  ๋ ˆ์ด์–ด๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•œ๋‹ค.

docker-image-layer

์œ„์˜ ์ด๋ฏธ์ง€์—์„œ ๋ณด๋“ฏ์ด Dockerfile์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ(COPY . .) ํ•œ ๋‹ค์Œ, ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œ(RUN go mod download) ํ•œ๋‹ค.

  • ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด, COPY ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™” ๋œ๋‹ค.

  • ๋˜ํ•œ, ๊ทธ ๋’ค์— ์˜ค๋Š” ๋ชจ๋“  ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ์บ์‹œ๋„ ๋ฌดํšจํ™”๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋„์ปคํŒŒ์ผ ์ง€์นจ์˜ ์ˆœ์„œ ๋•Œ๋ฌธ์— ๋นŒ๋”๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Œ์—๋„ Go ๋ชจ๋“ˆ์„ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค.

Dockerfile ์ง€์นจ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ๋˜๊ธฐ ์ „์— ์ข…์†์„ฑ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜๊ฐ€ ์ด๋ฃจ์–ด์ง€๋„๋ก ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ์—๋„ ๋นŒ๋”๊ฐ€ ์บ์‹œ์—์„œ ์ข…์†์„ฑ ๋ ˆ์ด์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Go์˜ ๊ฒฝ์šฐ go.mod ์™€ go.sum์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” node์˜ package.json ๊ณผ package-lock.json ๊ณผ ๊ฐ™๋‹ค.

์ˆœ์„œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•œ๋‹ค.

  • COPY go.mod go.sum . ๋ฅผ ๋จผ์ € ๋ฐฐ์น˜ํ•˜๊ณ  RUN์„ ํ†ตํ•ด ์ข…์†์„ฑ์„ ์„ค์น˜ํ•œ๋‹ค.

  • ๊ทธ ํ›„์— COPY . . ๋ช…๋ น์–ด๋กœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.

์ด์ œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋นŒ๋”๊ฐ€ ๋งค๋ฒˆ ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๋Š”๋‹ค.

docker-image-layer

์ฐธ๊ณ  ๋ฌธ์„œ

Last updated