๐[Docker] Dockerfile ๊ธฐ๋ณธ๊ตฌ์กฐ์ ์์ฑ ๋ฐฉ๋ฒ
Dockerfile ๊ธฐ๋ณธ ๊ตฌ์กฐ
Dockerfile
์ ๊ฐ ์ค์ด ๋ช
๋ น์ด๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๋ช
๋ น์ด๋ ์ด๋ฏธ์ง์ ํ ๋ ์ด์ด๋ฅผ ์ ์ํ๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ช
๋ น์ด๋ FROM
, COPY
, RUN
, CMD
, EXPOSE
, ENTRYPOINT
, ENV
๋ฑ์ด ์๋ค!
Dockerfile ๋ช ๋ น์ด
1. FROM
FROM ubuntu:20.04
- ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ง์ ํจ.
- Dockerfile์ ํญ์
FROM
์ผ๋ก ์์ํ๋ค.
2. RUN
RUN apt-get update && apt-get install -y python3
- ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ช ๋ น์ด๋ฅผ ์คํํจ.
- ์ผ๋ฐ์ ์ผ๋ก ํจํค์ง ์ค์น์ ๊ฐ์ ์์ ์ ์ฌ์ฉ๋จ.
3. COPY
COPY . /app
- ๋ก์ปฌ ํ์ผ์ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์ผ๋ก ๋ณต์ฌํจ.
4. ADD
ADD <https://example.com/file.tar.gz> /app
COPY
์ ์ ์ฌํ์ง๋ง, URL์์ ํ์ผ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์์ถ ํ์ผ์ ์๋์ผ๋ก ํด์ ํ ์ ์์.
5. CMD
CMD ["python3", "/app/main.py"]
- ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํ๋ ๋ช ๋ น์ ์ง์ ํจ.
- Dockerfile์์ ํ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅํจ!
6. ENTRYPOINT
ENTRYPOINT ["python3", "/app/main.py"]
- ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํ๋ ๋ช ๋ น์ ์ง์ ํจ.
CMD
์ ์ฐจ์ด์ ?- ์ค์ ํ ๋ช ๋ น์ด๋ ์ปจํ ์ด๋ ์คํ ์, ์ถ๊ฐ ์ธ์๋ก ๋ฎ์ด์ธ ์ ์๋ค๋ ์ ์ด๋ค!
7. ENV
ENV APP_HOME /app
- ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํจ.
8. EXPOSE
EXPOSE 80
- ์ปจํ ์ด๋์์ ๋ ธ์ถํ ํฌํธ๋ฅผ ์ง์ ํจ.
- ๋ฌธ์ํ๊ฐ ๋ชฉ์ ์ด๋ฉฐ, ์ค์ ํฌํธ ๋ฐ์ธ๋ฉ์
docker run -p
๋ช ๋ น์ด๋ก ์ํ๋๋ค!
9. WORKDIR
WORKDIR /app
- ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๋ค.
RUN
,CMD
,ENTRYPOINT
๋ช ๋ น์ด๋ ์ด ๋๋ ํ ๋ฆฌ์์ ์คํ๋จ.
10. USER
USER appuser
- ๋ช ๋ น์ด๋ฅผ ์คํํ ์ฌ์ฉ์์ ๊ณ์ ์ ์ค์ ํจ.
11. VOLUME
VOLUME /data
- ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ์ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ณต์ ํจ.
12. ARG
ARG VERSION=1.0
- ๋น๋ ์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ฅผ ์ค์ ํจ.
Dockerfile ์์ฑ ์์
Python & Flask ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ Dockerfile ์์
# ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก Python 3.10์ ์ฌ์ฉ
FROM python:3.10-slim
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
# ์์กด์ฑ ํ์ผ์ ํ์ฌ ์์
๋๋ ํ ๋ฆฌ(./)์ ๋ณต์ฌํ๊ณ ์ค์น
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# ์ ํ๋ฆฌ์ผ์ด์
ํ์ผ ๋ณต์ฌ
COPY . .
# ์ปจํ
์ด๋ ์คํ ์ ์คํํ ๋ช
๋ น์ด
CMD ["python3", "app.py"]
FROM python:3.10-slim
slim
๋ฒ์ ์ ํ์ ์๋ ํจํค์ง๊ฐ ํฌํจ๋์ง ์์ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ์์.
WORKDIR /app
- ์ปจํ ์ด๋ ๋ด์์ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ .
/app
๋๋ ํ ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ํ์ผ์ด ๋ณต์ฌ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ฏธํจ.
pip install --no-cache-dir -r requirements.txt
--no-cache-dir
์ต์ ์ผ๋ก pip ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ํ์ฌ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ค์.
COPY . .
- ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ปจํ ์ด๋์ ํ์ฌ ์์ ๋๋ ํ ๋ฆฌ(โ/appโ)๋ก ๋ณต์ฌํจ.
- ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ํ์ํ ํ์ผ๋ค์ด ์ปจํ ์ด๋์ ๋ณต์ฌ๋จ.
CMD ["python3", "app.py"]
- ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์คํํ ๋ช
๋ น์ด๋ก,
python3 app.py
๋ช ๋ น์ด๊ฐ ์คํ๋๋ค!
- ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์คํํ ๋ช
๋ น์ด๋ก,
Dockerfile ๋น๋ํ๊ธฐ
# Dockerfile์ ๋น๋ํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑ
docker build -t myapp:latest .
t
: ์์ฑํ ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ์ง์ .
: Dockerfile์ ์์น๋ฅผ ์ง์
๋๊ธ๋จ๊ธฐ๊ธฐ