Docker์ Dockerfile
๊ธฐ๋ณธ์ ์ธ ์ ์๋ถํฐ ์๊ณ ๊ฐ์
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ฑฐ๋ ๋ฐฐํฌํ ์์๋ ํ๋ซํผ์ธ๋ฐ
์ปจํ
์ด๋ ๋ผ๋ ํ์คํ๋ ์ ๋์ผ๋ก ํจํค์ง ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋์ฝ๋ ๋ฐํ์๋ฑ
ํ์ํ ์๋น์ค ๋ชจ๋ ๊ฒ์ด ํฌํจ๋์ด์์ด์ ๊ตฌ์ถ๋ ํธํ๊ณ ์ฌ์๋ณ๊ฒฝ์ด ๋ฌ์๋๋ ํธํ๊ฒ ์์ ์ด ๊ฐ๋ฅํ ์ํํธ์จ์ด ํจํค์ง๋ค.
Windows / Ubuntu / Mac ์ด๋ค ํ๊ฒฝ์์๋ ์ฝ๊ฒ ๊ตฌ์ถ์ด ๊ฐ๋ฅํ๋ค!

Dockerfile
์ฐ๋ ๋ฐฉ๋ฒ์ ์์์ผํ๋๋ฐ...
Docker๋ Dockerfile์ ํตํด์ ๊ตฌ์ถ ๋ฐ ๋ฐฐํฌ๊ฐ ์งํ์ด ๋๋๋ฐ
๊ฐ์ธ์ ์ผ๋ก๋ ์์คํฌ๋ฆฝํธ(*.sh) ๋ ๋น์ทํ๋ค๊ณ ๋๊ผ๋ค.
Django ์๋ฒ ๊ธฐ์ค ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ์ด๋ฌํ๋ฐ
# ์์ฑํ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋ ์ด๋ฏธ์ง
# ๊ตฌ์ถํ ์๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ
FROM python:3.10
# ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ ํ ๋ฆฌ
WORKDIR /home/ubuntu/
# ๋ช
๋ น์ด
...
# ํด๋น ์ด๋ฏธ์ง๋ก ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ ์ด๋ค ๋ช
๋ น์ด๋ฅผ ํตํด ์ํํ ๊ฒ์ธ์ง
# ํ๋์ Dockerfile์์ ํ๋ฒ๋ง ์ํ๊ฐ๋ฅ
CMD ["/bin/bash","-c", "/home/ubuntu/start-up.sh"]
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ๋ง ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์๊ณ ๊ฐ์!
FROM : Docker๋ ๋น๋๋ฅผ ์์ํ๋ฉด ์ด๋ฏธ์ง๊ฐ ์์ฑ๋๊ณ ํด๋น ์ด๋ฏธ์ง๋ฅผ ํตํด ๊ตฌ์ถ/๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ฐ, From์ ๋น๋ ๋จ๊ณ๋ฅผ ์ด๊ธฐํํ์ฌ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๋ฅผ ์ค์ ํ๋ฉฐ Dockerfile์ FROM ๋ช
๋ น์ผ๋ก ์คํํด์ผํ๋ค
WORKDIR : ํด๋น Dockerfile์ด ์์
ํ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๋๋ฐ Dockerfile์์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉ๋ ์ ์๋ค!
# ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ ํ ๋ฆฌ
WORKDIR /home/ubuntu/
# ๋ช
๋ น์ด
...
WORKDIR ./settings/
# ๋ช
๋ น์ด
...
WORKDIR /home/Deploy/
# ๋ช
๋ น์ด
...
๋์ ๊ตฌ์กฐ
๐ cd /home/ubuntu/
๐ cd /home/ubuntu/settings/
๐ cd /home/Deploy/
ARG : ๋น๋์ ์ฌ์ฉ๋ ๋ณ์๋ฅผ ์ค์
# ๋ณ์ ์ง์
ARG foo
ARG user=test_user
# ๋ณ์ ํธ์ถ
RUN Echo $foo
RUN Echo $user
# ๋น๋ ํ ๋ ๋ณ์๋ฅผ ์ ๋ฌ
# ์ง์ ์ ๋ฌ๋ณด๋ค๋ GitSecret์ ํตํ ๋ณ์ ์ ๋ฌ์ด๋ ํ๊ฒฝ๋ณ์๋ฅผ ํตํด ๋ณ์๋ฅผ ์ ๋ฌํ๋๊ฒ์ด ๋ณด์์ ์์ ํ๋ค.
docker build --build-arg foo=test_foo
๐ ARG ๊ฒฐ๊ณผ
test_foo
test_user
RUN : ๋น๋ ๋ช
๋ น์ ์คํํ ๋ช
๋ น์ด. ์ ์คํฌ๋ฆฝํธ ์์ฑํ๋ฏ์ด ํด์ค๋๋๋ค. ์ฌ๋ฌ์ค ์คํํ ๊ฒฝ์ฐ Here-Documents๋ก ํ๋ฒ์ ์ฌ๋ฌ์ค ๋๋ ์ฌ๋ฌํ์ผ ์ฌ์ฉ๊ฐ๋ฅํ๋ค
์ฐธ๊ณ : Here-Documents
# ์์ฑํ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋ ์ด๋ฏธ์ง
FROM python:3.10
# ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ ํ ๋ฆฌ
WORKDIR /home/ubuntu/
RUN apt-get update -y
# git repo clone
RUN git clone git@<git-ssh-url>
WORKDIR /home/ubuntu/<git-repo-name>
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
RUN pip install -r requirements.txt
RUN python3 manage.py collectstatic
# ํด๋น ์ด๋ฏธ์ง๋ก ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ ์ด๋ค ๋ช
๋ น์ด๋ฅผ ํตํด ์ํํ ๊ฒ์ธ์ง
# ํ๋์ Dockerfile์์ ํ๋ฒ๋ง ์ํ๊ฐ๋ฅ
CMD ["/bin/bash","-c", "gunicorn Application.wsgi --bind 0.0.0.0:8000"]
๋ฐฐํฌ
๋๋์ด ํ๋ ์๋ฒ ๊ตฌ์ถ
์์ Dockerfile์ ์์ฑํ๊ณ , ์ต์ข
์ ์ผ๋ก ๋น๋ํ๊ธฐ ์ํด์๋ ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ๋ฅผ ์ง์ ํด์ค์ผํ๋ค.
docker build -t MyDjango:latest
docker run -p 127.0.0.1:8000:8000 MyDjango:latest
์ด๋ก์จ ๋์ปค ์ฅ๊ณ ๊ฐ ์ ๋๋ก ๋์ํ๋๊ฒ์ ํ์ธํ ์ ์๋ค!
์ฐธ๊ณ ์๋ฃ
https://docs.docker.com/engine/reference/builder/
https://docs.docker.com/build/building/context/