๐Ÿ“ ์„œ๋ฒ„์ดˆ๋ณด์˜ Dockerfile

์ด์ง€์›ยท2024๋…„ 1์›” 15์ผ

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-thumbnail

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 ์‚ฌ์šฉ๋ฒ•

# ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋””๋ ‰ํ† ๋ฆฌ
WORKDIR /home/ubuntu/
# ๋ช…๋ น์–ด
...

WORKDIR ./settings/
# ๋ช…๋ น์–ด
...

WORKDIR /home/Deploy/
# ๋ช…๋ น์–ด
...

๋™์ž‘ ๊ตฌ์กฐ
๐Ÿ“ cd /home/ubuntu/ 
๐Ÿ“ cd /home/ubuntu/settings/
๐Ÿ“ cd /home/Deploy/  

ARG : ๋นŒ๋“œ์— ์‚ฌ์šฉ๋  ๋ณ€์ˆ˜๋ฅผ ์„ค์ •

๐Ÿ”Ž 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

๐ŸŒฐ Django ์„œ๋ฒ„ ์ตœ์ข… ์ฝ”๋“œ

# ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋  ์ด๋ฏธ์ง€
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/

profile
์ถœ๊ทผํ›„ ์ฝ”๋”ฉ ํ‡ด๊ทผํ›„ ์ฝ”๋”ฉ

0๊ฐœ์˜ ๋Œ“๊ธ€