도커 기반 실행 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 모노 컨테이너 방식
-
Dockerfile
FROM python:3.10 WORKDIR /app COPY . . RUN pip install -r requirements.txt CMD bash -c "redis-server & python fastapi_server.py & python worker.py"
- 장점: 구조 단순, 배포 쉬움
- 단점:
리소스 제한은 컨테이너 전체에만 적용 가능
- 각 구성요소(FastAPI/Worker/Redis)에 별도 CPU/메모리 제한 불가능
- 장애 격리 불가, 확장성 없음
2. 멀티 컨테이너 구조
-
컨테이너 각각 실행
docker run -d --name redis redis:6.2 docker run -d --name fastapi \ --cpus="1.0" --memory="1g" \ -p 8000:8000 \ my-fastapi-image docker run -d --name worker \ --cpus="1.5" --memory="1g" \ my-worker-image
-
각 컨테이너에 리소스 제한 개별 적용
-
사용자 정의 브리지 네트워크를 이용함으로써 각각의 컨테이너에서 이름으로 서로 접근 가능하다
docker network create my-network docker run -d --name redis --network my-network redis:6.2 docker run -d --name fastapi --network my-network my-fastapi-image
project/ ├── docker-compose.yml ├── fastapi_server/ │ └── Dockerfile ├── worker/ │ └── Dockerfile
-
docker-compose.yaml
version: "3.9" services: redis: image: redis:6.2 container_name: redis ports: - "6379:6379" fastapi: build: ./fastapi_server ports: - "8000:8000" depends_on: - redis worker: build: ./worker depends_on: - redis deploy: resources: limits: cpus: '1.5' memory: 1g
-
docker-compose.yaml에서 deploy.resource는 Swarm에서만 유효
-
docker swarm은 컨테이너 오케스트레이션 툴로, 추후 쿠버네티스로의 확장을 고려하는 상황에서 docker swarm을 이용하는 것은 추후 완전히 수정되어야 하는 부분으로 적합하지 않음