Python Flask

Flask 애플리케이션 Docker로 배포하기

PyExplorer 2025. 2. 10. 00:46

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를 활용해 안정적이고 재현 가능한 배포 환경을 만들어 보세요.