Intro
์ง์ธ๋ค๊ณผ ์ฌ์ด๋ ํ๋ก์ ํธ๋ก ๊ฐ๋ฐํ Django ์ฑ์ deploy ํด๋ณด๋ ์์ ๋ก Docker Image๋ฅผ ๋ฐฐํฌํ๋ ๊ฐ๋จํ hands on ์ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค. Docker Image๋ก ๊ด๋ฆฌํ๋๊ฒ ๋ฐฐํฌํ ๋ ๋ฒ์ ๊ด๋ฆฌ๋ ํ๊ฒฝ ๊ตฌ์ถ ์์ ํธ๋ฆฌํ ๊ฒ ๊ฐ์์ Imageํํ์์ต๋๋ค. ์๋์ Git Repository ๊ฐ ๊ฐ๋ฐํ Django ์ฑ ์ ๋๋ค.
https://github.com/FoodieZone/Backend
์์ ๋ฐ ๋ฐฐํฌ ํ๊ฒฝ
- Host Server : ubuntu 22.04
- Cloud Service : AWS EC2 ์ธ์คํด์ค
- Docker Engine ์ ๊ฒฝ์ฐ, Host Server ์ ๋ง์ถ์ด ์ค์นํ์ต๋๋ค.
Django ์ฑ์ Docker Image๋ก ๋ง๋ค๊ธฐ ์ํด์๋ Dockerfile์ ์์ฑํด์ฃผ์ด์ผ ํฉ๋๋ค.
FROM python:3.9.16
LABEL maintainer="freemjstudio <mjwoo001@gmail.com>"
RUN apt-get -y update
RUN python3 -m venv venv && . venv/bin/activate
RUN mkdir /srv/dev-server
ADD src /srv/dev-server
COPY requirements.txt /srv/dev-server/requirements.txt
WORKDIR /srv/dev-server
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"]
EXPOSE 8080
FROM
Python Base Image๋ฅผ ์ง์ ํฉ๋๋ค. Dockerfile์์ ๋ฐ๋์ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
LABEL maintainer
๊ธฐ์กด์ MAINTAINER ํค์๋๋ก, ํด๋น docker Image์ ์์ ์๊ฐ ๋๊ตฌ์ธ์ง ์ ๋ณด๋ฅผ ๋จ๊ธธ ์ ์์ต๋๋ค.
RUN
shell ๋ช ๋ น์ด ๋๋ list ์ ๋ด๋ exec ํ์์ผ๋ก ์คํ์ํฌ ๋ช ๋ น์ ์ง์ ํ ์ ์์ต๋๋ค.
ADD vs COPY
ADD์ COPY ๋ชจ๋ ํ์ผ์ ํ์ฌ ํ์ผ ์์คํ (local) ์์ ๋์ปค ์ปจํ ์ด๋ ๋ด๋ถ์ ํ์ผ ์์คํ ์ผ๋ก ๋ณต์ฌํฉ๋๋ค. ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- COPY : ์์ค ํ์ผ์ด๋ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ง์ ๋ ๊ฒฝ๋ก๋ก ๋ณต์ฌํฉ๋๋ค.
- ADD : COPY ์ ๋ค๋ฅธ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก URL ์ ๋ณต์ฌํ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
WORKDIR
ํด๋น ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ์์ ์ ์งํํฉ๋๋ค.
EXPOSE
Docker ์ปจํ ์ด๋๊ฐ ๋ฆฌ์ค๋ํ ํฌํธ๋ฅผ ์ง์ ํ๋ค. ๊ทธ๋ ์ง๋ง EXPOSE ์์ฒด๋ก๋ ์ค์ ๋ก port ๋ฅผ ์ฌ๋ ๊ฒ์ด ์๋๋ผ, ์ปจํ ์ด๋๊ฐ ์ด๋ค ํน์ ํฌํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
Dockerfile์ ์์ฑํ ๊ฒฝ๋ก์ ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค. Docker Image ์์ฑ์ ์ํ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐ๋ก ํ๋ ์์ฑํ ํ ๊ทธ ๋๋ ํ ๋ฆฌ์์ ๋ถ๋ฆฌํ์ฌ ์์ ํด์ฃผ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
$ docker build -t NEW_IMAGE_NAME .
์คํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Dockerfile์ ๋ช ๋ น ํ์ค๋ง๋ค ์ด๋ฏธ์ง๋ฅผ ํ๋์ฉ ์์ฑํฉ๋๋ค. docker history ๋ช ๋ น์ด๋ก ์คํ๋ ์์ ๋ด์ฉ ํ์คํ ๋ฆฌ๋ฅผ ์กฐํํด๋ณผ ์ ์์ต๋๋ค.
๋์ปค ์ด๋ฏธ์ง๊ฐ ์ ๋๋ก ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค. docker images ๋ช ๋ น์ด๋ ํ์ฌ host server์ ์ ์ฅ๋์ด ์๋ image๋ฅผ list up ํฉ๋๋ค.
$ docker images
repository ์ ์ฌ๋ฆฌ๊ธฐ ์ํด์ tag ๋ฅผ ๋ณ๊ฒฝํด์ค๋๋ค. '๋ณธ์ธ์ Docker Hub ID/'๋ฅผ ์ ๋์ด๋ก ์ถ๊ฐํ์ฌ ๋ณ๊ฒฝํฉ๋๋ค.
$ docker image tag DOCKER_IMAGE_ID YOUR_DOCKER_HUB_ID/DOCKER_IMAGE_NAME
docker Hub ID/PW๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ์ docker hostํ๊ฒฝ์์ hub ๋ก ์ธ์ฆ์ ํ ํ, ์์ฑํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ Hub์ ์ฌ๋ฆฝ๋๋ค.
$ docker push freemjstudio/foodie-django
์์ฑํ Docker Image ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํ์ํต๋๋ค. ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋์์ ๋์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ Docker Compose ๋ฅผ ํ์ฉํด๋ณผ ์ ์์ต๋๋ค. -p ๋๋ --publish ํ๋๊ทธ๋ ๋์ปค ํธ์คํธ์ ๋์ปค ์ปจํ ์ด๋ ๊ฐ์ ํฌํธ ๋งคํ์ ์ค์ ํด์ฃผ๋ ๋ช ๋ น์ด ์ ๋๋ค. ์ด ๊ฒฝ์ฐ 8080 ํฌํธ๋ก ํฌํธํฌ์๋ฉํด์ฃผ์๋๋ฐ, ๋์ปค ํ์ผ์ ์์ฑ์์ 'EXPOSE 8080' ์ผ๋ก Django App์ 8080 ํฌํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ๋ช ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
$ docker run -d -p 8080:8080 DOCKER_IMAGE_NAME
๋ฐฐํฌ ํ, YOUR_HOST_ADDRESS:8080 ์ผ๋ก ์ ์์ ์ผ๋ก ์ ์์ด ๋๋์ง ํ ์คํธํด ๋ณผ ์ ์์ต๋๋ค.
์ด๋ก์จ, Django ์ฑ์ Dockerfile ์์ฑ์ ํตํด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ๋์ปค ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ ์ปจํ ์ด๋๋ก ์ฑ์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋ํด ์์๋ณด์์ต๋๋ค. Django ์ฑ ๋ฟ๋ง ์๋๋ผ, ์ด๋ ํ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ Dockerfile ์์ฑ ํ ๋น์ทํ ๊ณผ์ ์ผ๋ก ๋ฐฐํฌํด๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
- Docker Hub์ ์ฌ๋ผ๊ฐ ์ฅ๊ณ ์ฑ ๋ฐฐํฌ ๋์ปค ์ด๋ฏธ์ง์ ๋๋ค.
https://hub.docker.com/r/freemjstudio/foodie-django
'Cloud Engineering > Docker ๐ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MongoDB] Ubuntu ์์ Docker Compose๋ก MongoDB ReplicaSet ๊ตฌ์ฑํ๊ธฐ (0) | 2023.06.18 |
---|---|
[Docker] Harbor HTTP ๊ตฌ์ฑ์ผ๋ก ๊ตฌ์ถํ๊ธฐ (0) | 2023.02.06 |
[Docker] Docker Registry ๋ฅผ ์ด์ฉํ Private Registry ๊ตฌ์ถํ๊ธฐ (0) | 2023.02.06 |
[Docker] Harbor HTTPS ๊ตฌ์ฑ์ผ๋ก ๊ตฌ์ถํ๊ธฐ (0) | 2023.02.06 |
[Docker] Docker ์ ์ฅ์์ ์ด๋ฏธ์ง ์ ๋ก๋ํ๊ธฐ (0) | 2023.02.03 |