[도구/환경#4] Docker로 파이썬 개발 환경 컨테이너화

한줄 요약:
파이썬 프로젝트를 Docker로 컨테이너화하여, 어디서나 동일한 개발 환경을 유지하고 쉽게 배포할 수 있는 방법을 배우자!


1. 목표

  • Docker를 사용해 파이썬 개발 환경을 컨테이너화
  • Dockerfile 작성 및 이미지 빌드 방법 익히기
  • Docker Compose를 활용하여 여러 서비스를 함께 실행하는 방법 배우기
  • 컨테이너 배포환경 공유 방법

2. Docker 설치 및 설정

1️⃣ Docker 설치

  • Windows / macOS: Docker Desktop 다운로드
    다운로드 후 설치하고, Docker Desktop을 실행합니다.
  • Linux:
    • Ubuntu: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce

설치 후, docker --version 명령어로 Docker가 잘 설치되었는지 확인합니다.


3. Dockerfile 작성

DockerfileDocker 이미지를 만들기 위한 설정 파일입니다.
파이썬 프로젝트를 컨테이너화하려면, Dockerfile을 작성하여 필요한 설정을 정의합니다.

1️⃣ 파이썬용 Dockerfile 예시

# 1. 기본 이미지로 파이썬 공식 이미지를 사용
FROM python:3.9-slim

# 2. 작업 디렉토리 생성
WORKDIR /app

# 3. 필수 파일 복사 (requirements.txt)
COPY requirements.txt /app/

# 4. 필수 라이브러리 설치
RUN pip install --no-cache-dir -r requirements.txt

# 5. 나머지 코드 복사
COPY . /app/

# 6. 애플리케이션 실행 (웹 서버, 스크립트 등)
CMD ["python", "app.py"]

2️⃣ requirements.txt 예시

Flask==2.0.2
requests==2.26.0

3️⃣ Docker 이미지 빌드

Dockerfile을 작성한 후, 이미지로 빌드합니다.

docker build -t my-python-app .

my-python-app은 이미지 이름이며, .은 현재 디렉토리를 의미합니다.


4️⃣ Docker 컨테이너 실행

이미지를 빌드한 후, 컨테이너를 실행합니다.

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

이 명령은 5000 포트를 컨테이너와 로컬 머신 간에 매핑하여, 애플리케이션이 로컬에서도 접근 가능하도록 만듭니다.


4. Docker Compose 활용 (다중 서비스 실행)

Docker Compose는 여러 컨테이너를 동시에 실행하고 관리할 수 있는 도구입니다. 여러 서비스를 실행할 때 유용합니다.

1️⃣ docker-compose.yml 예시

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    environment:
      - FLASK_APP=app.py
      - FLASK_ENV=development
  db:
    image: postgres:13
    environment:
      - POSTGRES_USER=example
      - POSTGRES_PASSWORD=example
    ports:
      - "5432:5432"

이 예시에서는 웹 애플리케이션PostgreSQL 데이터베이스를 실행하는 두 개의 서비스가 정의됩니다.

2️⃣ Docker Compose로 서비스 시작

docker-compose up

이 명령어는 docker-compose.yml 파일을 기반으로 두 개의 컨테이너를 동시에 실행합니다. -d 옵션을 사용하면 백그라운드에서 실행됩니다.

docker-compose up -d

3️⃣ 서비스 중지

docker-compose down

5. Docker 이미지 관리

1️⃣ 이미지 목록 보기

docker images

2️⃣ 이미지 삭제

docker rmi my-python-app

이미지를 삭제하려면 docker rmi 명령을 사용합니다.


6. 컨테이너 관리

1️⃣ 실행 중인 컨테이너 보기

docker ps

2️⃣ 컨테이너 중지

docker stop <container_id>

3️⃣ 컨테이너 삭제

docker rm <container_id>

7. 자주 묻는 질문(FAQ)

Q. Docker에서 포트가 잘 안 열려요.
A. Docker에서 포트를 외부와 연결하려면 -p 옵션을 사용해야 합니다. 예를 들어, docker run -p 5000:5000으로 포트를 매핑합니다.

Q. Dockerfile에서 여러 명령을 실행하려면 어떻게 하나요?
A. Dockerfile에서 여러 명령어를 실행하려면, RUN을 여러 번 사용할 수 있습니다. 또는 여러 명령을 하나의 RUN 명령으로 합칠 수도 있습니다:

RUN apt-get update && apt-get install -y curl

Q. Docker Compose로 데이터베이스와 함께 앱을 실행하는데 문제가 발생해요.
A. 네트워크 문제일 수 있습니다. depends_on을 사용하여 서비스 간의 시작 순서를 설정하거나, wait-for-it와 같은 스크립트를 사용해 DB가 완전히 시작된 후 웹 애플리케이션을 시작할 수 있도록 할 수 있습니다.


8. 최종 점검 체크리스트

  • Dockerfile 작성하여 파이썬 애플리케이션 컨테이너화 완료
  • Docker Compose를 사용하여 다중 서비스 실행 가능
  • PostgreSQL과 같은 데이터베이스와 연동하여 파이썬 앱 실행 가능
  • Docker 이미지 및 컨테이너 관리 방법 숙지

9. 요약 한 줄

Docker를 사용하여 파이썬 애플리케이션을 컨테이너화하고, Docker Compose로 다중 서비스를 관리하며, 어디서나 동일한 개발 환경을 쉽게 공유하고 배포할 수 있습니다. ✅


이전 강좌 👈 [도구/환경#3] Git과 GitHub 연동 (버전 관리 시작하기)
다음 강좌 👉 [도구/환경#5] 테스트 자동화 (unittest, pytest)

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.