Flask 애플리케이션 Docker로 배포하기
Flask는 가볍고 유연한 Python 기반의 웹 프레임워크로, 개발에서 배포까지 손쉽게 사용할 수 있습니다. 이번 포스팅에서는 Flask 애플리케이션을 Docker를 이용해 컨테이너로 배포하는 과정을 단계별로 설명하겠습니다.
Docker는 애플리케이션과 필요한 환경을 컨테이너라는 형태로 패키징하여, 어디서든 동일한 환경에서 실행할 수 있도록 합니다. 이를 통해 Flask 애플리케이션의 배포를 더욱 간단하고 효율적으로 만들 수 있습니다.
1. Flask 애플리케이션 준비하기
우선, 배포할 Flask 애플리케이션을 준비합니다. 예제를 위해 간단한 Flask 애플리케이션 코드를 작성해 보겠습니다.
예제: app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Dockerized Flask!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
이 코드는 Flask 서버를 실행하고, 루트 경로에서 간단한 문자열을 반환합니다.
2. Dockerfile 작성하기
Dockerfile은 Docker 이미지를 생성하기 위한 설정 파일입니다. Flask 애플리케이션을 컨테이너화하기 위해 아래와 같은 Dockerfile을 작성합니다.
Dockerfile
# Python 3.9 이미지를 기본 이미지로 사용
FROM python:3.9-slim
# 컨테이너 내부 작업 디렉토리 설정
WORKDIR /app
# 의존성 파일 복사 및 설치
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# 애플리케이션 코드 복사
COPY . .
# Flask 서버 실행 명령
CMD ["python", "app.py"]
requirements.txt
Flask 애플리케이션에서 필요한 Python 패키지를 requirements.txt
파일에 기록합니다. 이번 예제에서는 Flask만 필요합니다.
Flask==2.2.3
3. Docker 이미지 생성하기
Dockerfile과 애플리케이션 파일을 준비한 후, Docker 이미지를 생성합니다.
터미널에서 아래 명령어를 실행합니다:
docker build -t flask-docker-demo .
이 명령은 현재 디렉토리(.
)를 기준으로 Docker 이미지를 빌드하며, 이미지는 flask-docker-demo
라는 이름으로 생성됩니다.
4. Docker 컨테이너 실행하기
이미지 생성이 완료되면, 컨테이너를 실행하여 Flask 애플리케이션을 확인할 수 있습니다.
docker run -d -p 5000:5000 flask-docker-demo
위 명령은 컨테이너를 백그라운드에서 실행하며, 호스트의 5000번 포트를 컨테이너의 5000번 포트에 매핑합니다.
브라우저에서 http://localhost:5000
에 접속하면 "Hello, Dockerized Flask!" 메시지를 확인할 수 있습니다.
5. Docker Compose로 배포 간소화하기
Docker Compose를 사용하면 다중 컨테이너를 관리하거나 설정을 더욱 간소화할 수 있습니다. 아래는 Flask 애플리케이션을 위한 docker-compose.yml
예제입니다.
docker-compose.yml
version: '3.8'
services:
flask-app:
build: .
ports:
- "5000:5000"
Docker Compose 실행
Docker Compose를 사용해 Flask 애플리케이션을 실행하려면 아래 명령어를 실행합니다:
docker-compose up -d
이 명령은 Docker Compose 설정에 따라 컨테이너를 빌드하고 실행합니다. http://localhost:5000
에서 애플리케이션을 확인할 수 있습니다.
6. 최적화 및 배포 전략
Docker 이미지를 최적화하려면 다음과 같은 사항을 고려하세요:
- 최소한의 기본 이미지 사용:
python:3.9-slim
처럼 경량 이미지를 사용합니다. - 캐시 활용: Dockerfile 단계별 캐싱을 활용하여 빌드 속도를 개선합니다.
- 환경 변수 관리: Flask의 환경 변수를
docker-compose.yml
또는.env
파일로 관리합니다.
.env 파일 예제
FLASK_ENV=production
PORT=5000
docker-compose.yml 수정
version: '3.8'
services:
flask-app:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=${FLASK_ENV}
- PORT=${PORT}
결론
이번 포스팅에서는 Flask 애플리케이션을 Docker로 컨테이너화하고 배포하는 과정을 살펴보았습니다. Docker는 애플리케이션의 이식성을 높이고 배포를 간소화하는 강력한 도구입니다. Flask와 Docker를 활용해 안정적이고 재현 가능한 배포 환경을 만들어 보세요.
'Python Flask' 카테고리의 다른 글
Flask에서 WebSocket 구현하기 (0) | 2025.02.12 |
---|---|
Flask Blueprint로 애플리케이션 구조화하기 (0) | 2025.02.11 |
Flask 애플리케이션 배포 - Gunicorn 및 Nginx를 활용한 배포 방법 (0) | 2025.02.09 |
Flask 배포 가이드[ 개발 환경과 배포 환경 설정 ] (0) | 2025.02.08 |
Flask Caching으로 애플리케이션 성능 최적화하기 (0) | 2025.02.07 |