본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] Python 프로젝트에 Docker 적용하기: 개발과 배포를 혁신하는 방법

by Papa Martino V 2025. 7. 25.
728x90

Python 프로젝트에 Docker 적용하기: 개발과 배포를 혁신하는 방법
[PYTHON] Python 프로젝트에 Docker 적용하기

 

Docker는 애플리케이션과 그 실행 환경을 하나의 이미지로 묶어, 어디서나 동일하게 실행할 수 있도록 해주는 컨테이너 기술이다. Python 개발자는 Docker를 통해 복잡한 라이브러리 의존성 문제를 해결하고, 테스트 및 배포 환경을 표준화할 수 있다. 이 글에서는 Python 기반 프로젝트에 Docker를 적용하는 방법을 설계 → 작성 → 빌드 → 실행 → 배포의 순서로 체계적으로 설명한다. 초보자도 이해할 수 있도록 실용적인 예제 중심으로 구성하되, 전문가 수준의 컨테이너 전략까지 아우른다.

1. Docker란 무엇인가?

Docker는 애플리케이션을 격리된 환경에서 실행할 수 있는 컨테이너 기반 플랫폼이다. 가상머신과 달리 가볍고 빠르며, 이미지 기반으로 환경을 코드처럼 버전 관리할 수 있는 것이 특징이다.

비교 항목 가상 머신 Docker 컨테이너
부팅 속도 수 분 수 초
용량 수 GB 수백 MB
호환성 높음 (별도 OS) 호스트 커널 공유
이식성 낮음 매우 높음

2. Python 프로젝트 구조 예시

my-python-app/
├── app.py
├── requirements.txt
└── Dockerfile
  • app.py: 실행할 Python 코드
  • requirements.txt: 필요한 패키지 목록
  • Dockerfile: Docker 이미지 정의 파일

3. Dockerfile 작성하기

# Dockerfile
FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]

Dockerfile은 이미지 생성의 설계도이다. Python 공식 이미지를 기반으로, 작업 디렉토리를 설정하고, 의존 패키지를 설치한 후, 실행 명령을 지정한다.

4. requirements.txt 예시

flask==2.3.3
numpy>=1.24
pandas

의존성 관리에 있어 명확한 버전 명시는 안정성 확보에 필수적이다.

5. Docker 이미지 빌드

docker build -t my-python-app .
  • -t: 이미지 이름을 지정
  • .: 현재 디렉토리를 빌드 컨텍스트로 사용

6. Docker 컨테이너 실행

docker run -it --rm my-python-app

컨테이너 실행 시 --rm 옵션은 종료 시 자동 삭제, -it는 대화형 실행을 의미한다.

7. Docker와 Python 개발 연동 전략

7.1. 코드 변경을 자동 반영 (볼륨 마운트)

docker run -it --rm -v ${PWD}:/app my-python-app

7.2. Flask 개발 서버 실행

# app.py 내부
from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return "Hello from Docker + Python!"

7.3. 포트 매핑

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

호스트 포트 5000을 컨테이너 포트에 매핑하여 웹 브라우저로 접근 가능

8. 도커 컴포즈(docker-compose) 활용

# docker-compose.yml
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    command: python app.py
docker-compose up

복잡한 설정을 한 파일에 모아두고, 여러 서비스를 동시에 실행할 수 있는 것이 강점이다.

9. Docker로 Python 테스트 자동화

CI/CD 환경에서 Docker 컨테이너를 이용한 테스트 자동화는 필수다. 예를 들어 pytest를 기반으로 한 테스트 컨테이너를 만들 수 있다:

# Dockerfile.test
FROM python:3.10

COPY . /app
WORKDIR /app

RUN pip install pytest

CMD ["pytest"]

10. Python + Docker 실전 적용 예시

활용 분야 설명 기술 스택
웹 서버 배포 Flask/Django 앱을 컨테이너화 Nginx, Gunicorn, Docker
데이터 파이프라인 ETL 작업 단위를 독립된 이미지로 구성 Airflow + Docker
머신러닝 서빙 모델 예측 서버 패키징 FastAPI, scikit-learn, ONNX, Docker
테스트 자동화 테스트 컨테이너로 환경 통일 pytest, GitHub Actions, Docker

결론: Docker는 Python 개발의 미래다

Docker는 단순히 배포용 도구가 아니다. 개발, 테스트, 팀 협업, 운영까지 Python 애플리케이션 전 주기에 혁신을 제공하는 기술이다. 특히 환경 재현성과 이동성이라는 강력한 장점을 통해 누구나 어디서든 동일한 결과를 얻을 수 있다. 지금 이 순간, 당신의 Python 프로젝트에 Docker를 도입해보자. 코드 그 자체보다 환경이 더 중요해지는 시대, Docker는 그 필수 도구다.


출처 (References)

728x90