๐[Docker] Docker๋ก MSA ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ
๊ธฐ๋ฅ ๋ณ ๊ธฐ์ (ํ๋ ์์ํฌ)์ด ๋ค๋ฅผ ๊ฒฝ์ฐ, Docker๋ฅผ ์ฌ์ฉํด MSA๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ?!
์ฐ์ Django
๊ธฐ๋ฅ 1๊ฐ์ FastAPI
๊ธฐ๋ฅ 1๊ฐ๋ฅผ ์กฐํฉํ์ฌ MSA๋ฅผ ๊ตฌ์ถํด๋ณด์!
ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
DOCKER_MSA/
โโโ django_web/
โ โโโ Dockerfile
โ โโโ manage.py
โ โโโ config/
โ โโโ requirements.txt
โโโ chatbot/
โ โโโ Dockerfile
โ โโโ main.py
โ โโโ requirements.txt
โโโ docker-compose.yml
โโโ .gitmodules
โโโ .env
๋๋ git submodule
์ ์ฌ์ฉํด ๊ฐ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํ๋์ ๋ ํฌ์งํ ๋ฆฌ(Docker_MSA)์์ ๊ด๋ฆฌํ๊ณ , ์ด ๋ ํฌ๋ฅผ Docker-Compose
๋ฅผ ์ฌ์ฉํด ๋ฐฐํฌ๋ฅผ ์งํํ๋ค!
์ด ํ๋ก์ ํธ๋ ํ์ฌ ์งํ ์ค(24.07.22)์ด๋ฏ๋ก, ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐํ ์์ ์ด๊ณ , ์ฐ๊ฒฐ ์ค ๋ฐ์ํ ์๋ฌ ๋ํ ์ ๋ฆฌํ ์์ ์ด๋ค.
Docker_MSA/.env
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=
OPENAI_API_KEY=
chatbot
๊ธฐ๋ฅ์ chatGPT๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์OPENAI_API_KEY
๋ฅผ ์ฌ์ฉํ๋ค.
Docker_MSA/.gitmodules
[submodule "chatbot"]
path = chatbot
url = [Repository URL]
[submodule "django_web"]
path = django_web
url = [Repository URL]
branch = test
django_web
์ด๋ผ๋ ๋ ํฌ๋ ํ ์คํธ๋ฅผ ์ํดtest
๋ผ๋ ๋ธ๋์น๋ฅผ ๋ง๋ค์๊ณ , ์ด ๋ธ๋์น๋ฅผ ์ฐ๊ฒฐํจDocker_MSA
๋ ํฌ์์ ์ด๋ ๊ฒ ์์ฑํ๋ฉดchatbot
๊ณผdjango_web
๋ ํฌ๋ฅผ ํ ๋ฒ์ ๋ถ๋ฌ์ ๊ด๋ฆฌํ ์ ์๋ค!git submodule update --init --recursive
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด,chatbot
๊ณผdjango_web
๋ ํฌ์งํ ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ด
Docker_MSA/docker-compose.yml
version: '3.8'
services:
db:
image: postgres:16
restart: always
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- "${DB_PORT}:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
django_web:
build:
context: ./django_web
ports:
- "8000:8000"
command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
env_file:
- .env
depends_on:
- db
networks:
- app-network
chatbot:
build:
context: ./chatbot
ports:
- "8001:8000"
env_file:
- .env
depends_on:
- db
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
postgres_data:
- ์ฌ๊ธฐ์ ๊ฐ
service
์ports
๋ฅผ ์ฃผ์ํด์ผ ํ๋ค!- ๊ฐ ports๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํด์ค์ผ ํฌํธ ์ถฉ๋์ด ๋ฐ์ํ์ง ์๊ฒ ๋ฐฐํฌํ ์ ์์
django_web/Dockerfile
FROM python:3.9-slim
WORKDIR /app
# ํ์ ํจํค์ง ์ค์น
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000"]
chatbot/Dockerfile
FROM python:3.8
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
์ด๋ ๊ฒ ์์ฑํ ํ, docker-compose up --build
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก ๋น๋๋ฅผ ๋ง์น ์ ์๋ค!
๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด?
๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด ์ด๋ป๊ฒ ์ ๊ทผํ๋ฉด ๋ ๊น?
์๊น docker-compose.yml
์์ ๊ฐ ์๋น์ค ๋ณ๋ก port
๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ค.
์ฆ, ๊ฐ ์๋น์ค ๋ณ๋ก ์ ๊ทผํ๊ณ ์ถ์ผ๋ฉด docker-compose.yml
์์ ์ง์ ํ port
๋ก ์ ๊ทผํ๋ฉด ๋๋ค!
django_web
: http://0.0.0.0:8000chatbot
: http://0.0.0.0:8001
๐กย ๋๋ฌด๋๋ ๊ธฐ์ด์ ์ธ ์ ๋ณด์ผ ์ ์๊ณ , ์๋ชป๋ ์ ๋ณด ํน์ ๋ถ์กฑํ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ฐพ๊ณ ๊ณ ์ณ ์ฝ๋์ ๊ธ ๋ชจ๋ ์์ ํด ๋์๊ฐ ์์ !
๋๊ธ๋จ๊ธฐ๊ธฐ