SportsMate의 Flask API 서버를 Gunicorn으로 실행하는 Docker 이미지입니다.
함께 사용하는 프론트엔드 이미지는
seungchan1122/sportsmate-frontend에서 확인할 수 있습니다.
컨테이너 내부에서는 Gunicorn이 Flask 애플리케이션을 5000번 포트로 실행합니다.
docker pull seungchan1122/sportsmate-backend:1.0
백엔드 실행 전 .env 파일을 준비해야 합니다.
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE?sslmode=require
실제 프로젝트에서는 데이터베이스 연결 정보 외에도 인증 키와 외부 API 설정 등이 필요할 수 있습니다.
환경변수 파일은 이미지에 포함하지 않고 컨테이너 실행 시 전달합니다.
--env-file ./backend/.env
.env 파일은 Git 저장소에 커밋하지 않습니다.
docker run -d \
--name sportsmate-backend \
--restart unless-stopped \
--env-file ./backend/.env \
-p 5001:5000 \
seungchan1122/sportsmate-backend:1.0
macOS에서는 AirPlay Receiver가 5000번 포트를 사용하는 경우가 있어 호스트 포트를 5001로 연결했습니다.
localhost:5001 → container:5000
먼저 Docker 네트워크를 생성합니다.
docker network create sportsmate-network
백엔드 컨테이너를 실행합니다.
docker run -d \
--name sportsmate-backend \
--network sportsmate-network \
--network-alias backend \
--restart unless-stopped \
--env-file ./backend/.env \
-p 5001:5000 \
seungchan1122/sportsmate-backend:1.0
프론트엔드 컨테이너를 실행합니다.
docker run -d \
--name sportsmate-frontend \
--network sportsmate-network \
--restart unless-stopped \
-p 5002:80 \
seungchan1122/sportsmate-frontend:1.0
--network-alias backend는 프론트엔드 Nginx가 백엔드 컨테이너를 다음 주소로 찾을 수 있게 합니다.
http://backend:5000
백엔드 직접 요청:
curl -i http://localhost:5001/api/health
정상 응답:
{
"status": "ok"
}
프론트엔드 Nginx를 경유한 요청:
curl -i http://localhost:5002/api/health
두 요청이 모두 200 OK를 반환하면 컨테이너 간 연결도 정상입니다.
docker exec sportsmate-backend \
flask --app run routes
docker logs --tail 100 sportsmate-backend
실시간 로그:
docker logs -f sportsmate-backend
docker ps
docker restart sportsmate-backend
docker rm -f sportsmate-backend
Content type
Image
Digest
sha256:f44f93ab1…
Size
160.5 MB
Last updated
about 2 months ago
docker pull seungchan1122/sportsmate-backend:1.0