본문 바로가기

프로그래밍 언어/파이썬

Docker로 Python 애플리케이션 배포 및 스케일링하는 방법

Docker로 Python 애플리케이션 배포 및 스케일링하는 방법

Python 애플리케이션을 Docker로 배포하고 스케일링하는 것은 빠르고 효율적인 방법으로, 복잡한 설정 없이 일관된 개발 및 운영 환경을 보장할 수 있습니다. 이 가이드에서는 Docker를 사용하여 Python 애플리케이션을 배포하는 단계부터 스케일링하는 방법까지 상세히 다룹니다.

 

 

목차

  1. Docker란 무엇인가?
  2. Docker로 Python 애플리케이션 환경 구성
  3. Dockerfile 작성
  4. Python 애플리케이션 Docker 이미지 빌드 및 실행
  5. Docker Compose로 멀티 컨테이너 애플리케이션 관리
  6. Python 애플리케이션 스케일링
  7. 실용적인 배포 및 스케일링 전략

 

Docker란 무엇인가?

Docker는 애플리케이션을 컨테이너라는 독립된 환경에서 실행할 수 있도록 해주는 플랫폼입니다. 컨테이너는 운영 체제에서 독립적으로 애플리케이션과 그 종속성을 격리하여 실행할 수 있으며, 이를 통해 일관된 개발, 테스트, 배포 환경을 제공합니다. 특히 Python과 같은 언어로 작성된 애플리케이션을 배포할 때, Docker는 매우 유용한 도구입니다.

 

 

Docker로 Python 애플리케이션 환경 구성

Docker로 Python 애플리케이션을 배포하려면 먼저 Docker를 설치하고, 애플리케이션이 필요한 모든 의존성을 갖춘 이미지를 빌드해야 합니다. 이를 위해 필요한 것은 Dockerfile로, 이 파일은 컨테이너를 만들기 위한 청사진 역할을 합니다.

Docker 설치

  • Linux: sudo apt-get install docker.io
  • macOS: Docker Desktop 설치
  • Windows: Docker Desktop 설치

 

 

Dockerfile 작성

Dockerfile은 Docker 이미지를 빌드하기 위한 설정 파일입니다. Python 애플리케이션의 Dockerfile 예시는 다음과 같습니다.

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]
  • FROM: Python 3.9 환경을 기반으로 이미지를 빌드합니다.
  • WORKDIR: 컨테이너 내에서 작업할 디렉토리를 설정합니다.
  • COPY: 로컬의 requirements.txt 파일을 컨테이너로 복사하고, 해당 파일을 통해 종속성을 설치합니다.
  • CMD: 컨테이너 실행 시 app.py 파일을 Python으로 실행합니다.

 

 

Python 애플리케이션 Docker 이미지 빌드 및 실행

Dockerfile을 작성한 후에는 Docker 이미지를 빌드하고, 컨테이너로 실행할 수 있습니다.

이미지 빌드

docker build -t my-python-app .

위 명령어는 현재 디렉토리에 있는 Dockerfile을 기반으로 my-python-app이라는 이름의 이미지를 빌드합니다.

컨테이너 실행

docker run -d -p 5000:5000 my-python-app

이 명령어는 my-python-app 컨테이너를 백그라운드에서 실행하고, 호스트의 5000번 포트를 컨테이너의 5000번 포트에 매핑합니다. Python 애플리케이션이 Flask 같은 웹 프레임워크로 구동된다면, 이 포트를 통해 애플리케이션에 접근할 수 있습니다.

 

 

Docker Compose로 멀티 컨테이너 애플리케이션 관리

Python 애플리케이션이 데이터베이스 같은 추가 서비스를 필요로 한다면, Docker Compose를 사용하여 여러 컨테이너를 손쉽게 관리할 수 있습니다. docker-compose.yml 파일을 사용해 애플리케이션의 여러 컨테이너를 정의할 수 있습니다.

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  db:
    image: postgres
    environment:
      POSTGRES_USER: example
      POSTGRES_PASSWORD: example

위 파일은 web이라는 이름의 Python 애플리케이션 컨테이너와 db라는 Postgres 데이터베이스 컨테이너를 정의합니다.

Compose 실행

docker-compose up

이 명령어를 실행하면 정의된 모든 컨테이너가 한 번에 시작됩니다.

 

 

 

 

Python 애플리케이션 스케일링

Docker는 컨테이너의 수평 확장을 통해 애플리케이션을 스케일링할 수 있습니다. 이를 위해 Docker Swarm이나 Kubernetes와 같은 오케스트레이션 도구를 사용할 수 있습니다.

Docker Compose로 스케일링

docker-compose up --scale web=3

위 명령어는 web 컨테이너를 3개로 확장하여 실행합니다. 이를 통해 여러 인스턴스를 동시에 운영할 수 있습니다.

Docker Swarm으로 스케일링

Docker Swarm은 내장된 클러스터링 및 스케일링 솔루션으로, 여러 노드에 걸쳐 컨테이너를 배포할 수 있습니다. docker swarm init으로 Swarm을 초기화한 후, docker service scale 명령을 통해 서비스를 스케일링할 수 있습니다.

 

 

실용적인 배포 및 스케일링 전략

대규모 애플리케이션의 경우, 도커 컨테이너의 수를 관리하고 로드 밸런싱을 통해 트래픽을 효율적으로 분산시키는 전략이 필요합니다. 이 과정에서 NGINX 같은 로드 밸런서를 사용하거나, Kubernetes와 같은 복잡한 오케스트레이션 도구를 활용할 수 있습니다.

로드 밸런서 설정

NGINX를 사용해 여러 Python 컨테이너로 분산 요청을 처리하는 방법은 다음과 같습니다.

upstream backend {
    server web1:5000;
    server web2:5000;
    server web3:5000;
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
    }
}

이 설정은 3개의 Python 애플리케이션 인스턴스에 트래픽을 분산하여 처리합니다.

 

 

결론

Docker는 Python 애플리케이션을 효율적으로 배포하고 스케일링하는 데 매우 유용한 도구입니다. 이를 통해 개발 환경을 일관되게 유지하면서도, 애플리케이션의 수평적 확장이 가능합니다. 이 가이드를 통해 Docker의 기본적인 개념부터 스케일링 전략까지 이해하고, 더 나은 Python 애플리케이션 운영을 위한 첫걸음을 내딛을 수 있을 것입니다.