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์ ์์ฑํ ๋, ๋ช ๊ฐ์ง ํ์ ๊ธฐ์ตํ๋ฉด ๋น๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค:
- ๋น๋ฒํ๊ฒ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ ๋ค์ชฝ์ ๋ฐฐ์นํ๊ธฐ: ๋ ์ด์ด ์บ์ฑ์ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด, ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ช ๋ น์ด๋ค์ ์์ชฝ์, ๋น๋ฒํ ์์ ๋๋ ๋ถ๋ถ์ ๋ค์ชฝ์ ๋ฐฐ์นํ์ธ์.
- ๋ฉํฐ์คํ ์ด์ง ๋น๋ ํ์ฉํ๊ธฐ: ํ์ ์๋ ํ์ผ์ด๋ ์์กด์ฑ์ ์ด๋ฏธ์ง์ ํฌํจํ์ง ์๊ธฐ ์ํด, ๋ฉํฐ์คํ ์ด์ง ๋น๋๋ฅผ ์ฌ์ฉํด ์ต์ข ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฆผํ๊ฒ ๋ง๋์ธ์.
- ์ต์ํ์ ๋ ์ด์ด ์ฌ์ฉํ๊ธฐ: ๋ถํ์ํ ๋ ์ด์ด๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ช
๋ น์ด๋ฅผ ํ ์ค๋ก ์์ฑํ๊ฑฐ๋,
&&
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ ๋ช ๋ น์ ํ๋์ 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์ ์ ์์ฑํ๋ ๊ฒ์ ๋ง์น ํผ์ฆ์ ํธ๋ ๊ฒ๊ณผ ๊ฐ์์, ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํด ๋ณผ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๋์ปค๋ฅผ ๋์ฑ ๊น์ด ์ดํดํ๊ณ , ํจ์จ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ค ์ ์์ ๊ฒ์ ๋๋ค.