DockerFile๐Ÿ‹

DockerFile์€ Docker Image๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ๋„์ปค ์ด๋ฏธ์ง€์˜ ์„ค๊ณ„๋„ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋„์ปค๋Š” DockerFile์— ์ •์˜๋œ ๋ช…๋ น์„ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰ํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ์ดํ•ดํ•˜๋ฉด ๋„์ปค๋ฅผ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ DockerFile์„ ์•Œ์•„์•ผ ํ• ๊นŒ์š”?

DockerFile์„ ์ดํ•ดํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

1. ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ ํŒŒ์•…

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

2. ์ž์› ์ตœ์ ํ™”

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

3. ๋นŒ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•

DockerFile์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ์‹œ๊ฐ„์ด ํš๊ธฐ์ ์œผ๋กœ ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค. ๋„์ปค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๊ฐ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋•๋ถ„์— DockerFile์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์ฃ . ๋ฐ˜๋ฉด, DockerFile ์—†์ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋ฉด ์ผ์ผ์ด ์ˆ˜์ž‘์—…์œผ๋กœ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

4. ๋ ˆ์ด์–ด(Layer) ๊ฐœ๋… ์ดํ•ด

DockerFile์„ ํ†ตํ•ด ๋„์ปค์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ๋ ˆ์ด์–ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋Š” ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๊ณผ์ •์—์„œ์˜ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ ˆ์ด์–ด ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DockerFile ์ž‘์„ฑ๋ฒ•

DockerFile ์ž‘์„ฑ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํšจ์œจ์ ์ธ DockerFile์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

# ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ง€์ •
FROM ubuntu:20.04

# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ณต์‚ฌ
COPY . .

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
ENV TOKEN=ABCDEF1234GHI

# ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
RUN apt-get update && apt-get install -y python3

# ๋‚ด๋ถ€ ํฌํŠธ ์„ค์ • 
EXPOSE 80

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
CMD ["python3", "app.py"]

์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ์—์„œ FROM, WORKDIR, COPY, RUN, CMD ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ช…๋ น์–ด๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

DockerFile์˜ ๋™์ž‘ ์›๋ฆฌ

DockerFile์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„  ๋„์ปค์˜ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๊ณผ์ •์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค๋Š” DockerFile์˜ ๊ฐ ๋ช…๋ น์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ฐ ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ๋ ˆ์ด์–ด๋ผ๋Š” ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ DockerFile์„ ๋นŒ๋“œํ•  ๋•Œ ๋„์ปค๋Š” ๋จผ์ € ubuntu:20.04 ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ด์–ด๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋ช…๋ น์–ด๋“ค์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ์ด ๋ชจ๋“  ๋ ˆ์ด์–ด๊ฐ€ ํ•ฉ์ณ์ ธ ํ•˜๋‚˜์˜ ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์–ด์˜ ์ค‘์š”์„ฑ

๋„์ปค์˜ ๋ ˆ์ด์–ด๋Š” ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๊ณผ์ •์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋Š” ์บ์‹œ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์–ด์„œ, ์ด๋ฏธ ๋นŒ๋“œ๋œ ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๋„์ปค๋Š” ๊ทธ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฏธ์ง€์— ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด DockerFile์˜ ๋งจ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ž์„œ ์บ์‹œ๋œ ๋ ˆ์ด์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.

์žฌ๋นŒ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•

DockerFile์„ ์ž‘์„ฑํ•  ๋•Œ, ๋ช‡ ๊ฐ€์ง€ ํŒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์„ ๋’ค์ชฝ์— ๋ฐฐ์น˜ํ•˜๊ธฐ: ๋ ˆ์ด์–ด ์บ์‹ฑ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ช…๋ น์–ด๋“ค์€ ์•ž์ชฝ์—, ๋นˆ๋ฒˆํžˆ ์ˆ˜์ •๋˜๋Š” ๋ถ€๋ถ„์€ ๋’ค์ชฝ์— ๋ฐฐ์น˜ํ•˜์„ธ์š”.
  2. ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ ํ™œ์šฉํ•˜๊ธฐ: ํ•„์š” ์—†๋Š” ํŒŒ์ผ์ด๋‚˜ ์˜์กด์„ฑ์„ ์ด๋ฏธ์ง€์— ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด, ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ์Šฌ๋ฆผํ•˜๊ฒŒ ๋งŒ๋“œ์„ธ์š”.
  3. ์ตœ์†Œํ•œ์˜ ๋ ˆ์ด์–ด ์‚ฌ์šฉํ•˜๊ธฐ: ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์–ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ช…๋ น์–ด๋ฅผ ํ•œ ์ค„๋กœ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, && ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ๋ช…๋ น์„ ํ•˜๋‚˜์˜ RUN ๋ช…๋ น์œผ๋กœ ๊ฒฐํ•ฉํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋ช…๋ น์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

RUN apt-get update && apt-get install -y python3 && apt-get clean

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ๋ ˆ์ด์–ด๊ฐ€ ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค.

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

# ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ง€์ •
FROM ubuntu:20.04

# ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ (Python๊ณผ pip ํฌํ•จ)
RUN apt-get update && \
    apt-get install -y python3-pip && \
    rm -rf /var/lib/apt/lists/*

# ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
COPY ./requirements.txt /requirements.txt
RUN pip install --no-cache-dir -r /requirements.txt && \
    rm /requirements.txt

# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ณต์‚ฌ
COPY ./ /app

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
ENV TOKEN=ABCDEF1234GHI

# ๋‚ด๋ถ€ ํฌํŠธ ์„ค์ •
EXPOSE 80

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
CMD ["python3", "app.py"]

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

728x90
๋ฐ˜์‘ํ˜•
Liky