
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)
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] setup.py vs pyproject.toml : Python 패키징의 과거와 미래 (0) | 2025.07.25 |
|---|---|
| [PYTHON] AWS Lambda로 서버리스 Python 애플리케이션 구축하기 (0) | 2025.07.25 |
| [PYTHON] CSV 파일 읽기 & 쓰기 완벽 가이드 : csv 모듈부터 pandas까지 (0) | 2025.07.25 |
| [PYTHON] numpy reshape 완벽 가이드: 다차원 배열을 자유자재로 다루는 법 (0) | 2025.07.25 |
| [PYTHON] 파이썬 메모리 관리 완벽 가이드 : 참조부터 최적화까지 (0) | 2025.07.25 |