WbMango의 파이썬

"초보자를 위한 파이썬 강의부터 실무 팁까지! 실력 향상에 도움이 되는 실전 콘텐츠 제공."

  • 2025. 3. 19.

    by. wbmango

    목차

      파이썬 개발자를 위한 Docker 활용법

      1. Docker란 무엇이며, 왜 파이썬 개발자에게 필요한가?

      현대 소프트웨어 개발 환경에서 배포 및 관리의 효율성은 매우 중요한 요소입니다. 과거에는 소프트웨어를 배포하기 위해 운영 체제(OS), 패키지, 라이브러리를 직접 설치하고 설정해야 했지만, 이러한 과정은 시간이 많이 걸리고 오류가 발생하기 쉬웠습니다. 특히, **"개발 환경에서는 잘 작동하는데 배포하면 문제가 발생하는 경우"**는 많은 개발자들이 겪는 대표적인 문제입니다.

      이를 해결하기 위해 등장한 기술이 바로 Docker입니다. Docker는 애플리케이션을 가상화하는 컨테이너(Container) 기술을 제공하여, 운영 체제와 무관하게 동일한 환경에서 소프트웨어를 실행할 수 있도록 합니다. 특히, 파이썬 개발자들은 Docker를 활용하여 개발 환경을 표준화하고, 손쉽게 애플리케이션을 배포 및 관리할 수 있습니다.

      Docker는 다음과 같은 주요 장점을 제공합니다.

      • 일관된 환경 제공: 개발 환경과 운영 환경이 동일하여, "내 로컬에서는 잘 되는데 서버에서는 안 된다"라는 문제가 발생하지 않습니다.
      • 경량 컨테이너 기술: 기존의 가상 머신(VM) 보다 가볍고 빠르게 실행됩니다.
      • 손쉬운 확장성: 여러 개의 컨테이너를 손쉽게 배포하고 관리할 수 있으며, 마이크로서비스 아키텍처(MSA)에 최적화되어 있습니다.
      • 빠른 배포 및 롤백 가능: 코드 변경 사항을 빠르게 반영하고, 필요하면 이전 버전으로 손쉽게 롤백할 수 있습니다.

      이제부터 파이썬 개발자가 Docker를 활용하여 배포 환경을 구축하고 관리하는 방법을 심층적으로 알아보겠습니다.


      2. Docker 기본 개념과 파이썬 개발자가 알아야 할 핵심 요소

      Docker를 효과적으로 활용하려면, 파이썬 개발자가 반드시 이해해야 할 핵심 개념들이 있습니다.
      이러한 개념을 숙지하면 파이썬 애플리케이션을 보다 안정적으로 배포하고, 일관된 개발 환경을 유지할 수 있습니다.

       

      📍 1. Docker 이미지(Docker Image)

      Docker 이미지는 파이썬 애플리케이션과 그 실행에 필요한 모든 요소(코드, 라이브러리, 환경 설정 등)를 포함한 불변(Immutable)한 템플릿입니다.
      예를 들어, python:3.10-slim과 같은 이미지를 기반으로 파이썬 프로젝트를 컨테이너 화할 수 있으며, 동일한 이미지로 여러 개의 컨테이너를 만들 수 있습니다.

       

      📍 2. Docker 컨테이너(Docker Container)

      Docker 컨테이너는 이미지로부터 생성된 실행 단위로, 격리된 환경에서 파이썬 애플리케이션을 독립적으로 실행할 수 있습니다.
      컨테이너는 가상 머신보다 훨씬 가볍고 빠르며, 운영체제에 구애받지 않고 동일한 파이썬 코드가 어디서든 똑같이 동작하도록 보장해 줍니다.

       

      📍 3. Dockerfile

      Dockerfile은 파이썬 프로젝트의 실행 환경을 코드로 정의하는 구성 파일입니다.
      예를 들어, requirements.txt를 설치하고 app.py를 실행하는 등의 작업을 Dockerfile에 정의해 두면, 누구나 동일한 환경에서 애플리케이션을 실행할 수 있습니다.

      FROM python:3.10  
      WORKDIR /app  
      COPY . .  
      RUN pip install -r requirements.txt  
      CMD ["python", "app.py"]

       

      📍 4. Docker Hub

      Docker Hub는 Docker 이미지의 중앙 저장소이며, 공식 파이썬 이미지(python:3.11, python:3.9-alpine 등)를 제공합니다.
      개발자는 자신만의 파이썬 애플리케이션 이미지를 생성한 후, Docker Hub에 업로드하여 협업하거나 배포에 활용할 수 있습니다.
      또한, 오픈소스 프로젝트에서 제공하는 다양한 파이썬 환경 이미지를 바로 사용할 수 있어 매우 유용합니다.


      3. 파이썬 애플리케이션을 Docker로 컨테이너 화하는 실습

      이제 Docker를 활용하여 파이썬 애플리케이션을 컨테이너 화하는 방법을 실습해 보겠습니다.
      파이썬 애플리케이션을 Docker 컨테이너로 패키징하면 개발 환경을 어디서든 동일하게 유지할 수 있으며, 손쉽게 배포 및 실행할 수 있는 장점이 있습니다.

      이번 실습에서는 파이썬 Flask 웹 애플리케이션을 예제로 사용해 Docker 컨테이너를 만드는 과정을 단계별로 알아보겠습니다

       

      📍 1단계: 파이썬 프로젝트 폴더 및 애플리케이션 코드 준비

      우선, 새로운 프로젝트 폴더를 생성하고, 파이썬 애플리케이션 파일을 준비합니다.

      mkdir python-docker-app
      cd python-docker-app

      이제 아래와 같이 app.py 파일을 생성합니다:

      # app.py
      from flask import Flask
      
      app = Flask(__name__)
      
      @app.route('/')
      def home():
          return "Hello, Docker!"
      
      if __name__ == '__main__':
          app.run(host='0.0.0.0', port=5000)

      이렇게 하면 파이썬 Flask 기반의 웹 애플리케이션이 준비됩니다.

       

      📍 2단계: Dockerfile 작성 (파이썬 애플리케이션 실행 환경 정의)

      다음으로, 파이썬 앱이 실행될 Docker 환경을 설정하는 Dockerfile을 생성합니다.

      # 베이스 이미지로 파이썬 사용
      FROM python:3.9
      
      # 작업 디렉토리 설정
      WORKDIR /app
      
      # 의존성 설치
      COPY requirements.txt .
      RUN pip install -r requirements.txt
      
      # 애플리케이션 코드 복사
      COPY . .
      
      # 앱 실행
      CMD ["python", "app.py"]

      이 Dockerfile은 컨테이너가 실행될 때 필요한 파이썬 환경과 앱 실행 방식을 정의합니다.

       

      📍 3단계: requirements.txt 생성 (파이썬 의존성 명시)

      Flask 라이브러리를 명시한 requirements.txt 파일을 작성합니다.

      echo "Flask" > requirements.txt

      이 파일을 통해 Docker는 파이썬 패키지를 자동 설치할 수 있게 됩니다.

       

      📍 4단계: Docker 이미지 빌드

      이제 Docker 이미지를 생성합니다. 아래 명령어를 실행하면 python-docker-app이라는 이름의 Docker 이미지가 생성됩니다.

      docker build -t python-docker-app .

      Docker는 Dockerfile과 프로젝트 구조를 기반으로 파이썬 애플리케이션 실행 환경을 포함한 이미지를 생성합니다.

       

      📍 5단계: Docker 컨테이너 실행 (파이썬 앱 배포 테스트)

      빌드한 이미지를 실행하여 컨테이너를 생성합니다:

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

      이제 브라우저에서 아래 주소에 접속해 보세요:

      📎 http://localhost:5000

      "Hello, Docker!"라는 메시지가 출력되면, 파이썬 Flask 애플리케이션이 Docker 컨테이너에서 성공적으로 실행된 것입니다.


      4. Docker를 활용한 파이썬 애플리케이션 배포 및 운영 전략

      Docker는 파이썬 애플리케이션을 안정적이고 확장 가능한 방식으로 배포하고 운영할 수 있는 핵심 도구입니다.
      운영 환경에서도 동일한 실행 환경을 유지할 수 있어, 테스트 환경과의 차이로 인한 문제를 줄이고, 배포 자동화 및 관리 효율성을 크게 높여줍니다.

       

      📍 1. Docker Compose를 활용한 다중 파이썬 컨테이너 관리

      실무에서는 파이썬 웹 애플리케이션 외에도 데이터베이스, 캐시 서버, 메시지 중개인 등 다양한 서비스가 함께 실행됩니다.
      docker-compose.yml 파일을 사용하면 이러한 파이썬 애플리케이션 구성 요소를 손쉽게 정의하고 동시에 실행할 수 있습니다.

      version: '3'
      services:
        web:
          build: .
          ports:
            - "5000:5000"
          depends_on:
            - db
      
        db:
          image: postgres
          environment:
            POSTGRES_USER: user
            POSTGRES_PASSWORD: password
            POSTGRES_DB: mydatabase

      위 설정을 통해 Flask 같은 파이썬 웹 프레임워크와 PostgreSQL을 동시에 실행할 수 있으며, 명령어는 단 한 줄입니다:

      docker-compose up -d

      이 방식은 파이썬 기반 백엔드 프로젝트나 머신러닝 API 서버 구성에도 매우 유용합니다.

       

      📍 2. 파이썬 Docker 컨테이너를 클라우드 환경에 배포하기

      Docker 이미지를 빌드한 후에는 AWS, GCP, Azure 같은 클라우드 환경에 파이썬 애플리케이션을 쉽게 배포할 수 있습니다.

      먼저 Docker Hub에 이미지를 업로드합니다:

      docker tag python-docker-app mydockerhub/python-docker-app:v1
      docker push mydockerhub/python-docker-app:v1

      서버에서는 아래 명령어로 손쉽게 파이썬 컨테이너를 배포할 수 있습니다:

       

       

      docker pull mydockerhub/python-docker-app:v1
      docker run -d -p 5000:5000 mydockerhub/python-docker-app:v1

      이렇게 하면 어디서든 동일한 파이썬 환경을 그대로 실행할 수 있어, 배포가 훨씬 간편해집니다.

       

      📍 3. CI/CD 파이프라인 구축 (파이썬 앱 자동 배포)

      코드 변경 시 자동으로 Docker 이미지를 빌드하고 배포하는 CI/CD 파이프라인을 구축하면 운영 효율성이 크게 향상됩니다.
      아래는 GitHub Actions를 활용해 파이썬 프로젝트를 자동 빌드 및 Docker Hub에 배포하는 예시입니다:

      name: Deploy Docker App
      
      on:
        push:
          branches:
            - main
      
      jobs:
        build:
          runs-on: ubuntu-latest
          steps:
            - name: Checkout Repository
              uses: actions/checkout@v2
      
            - name: Build Docker Image
              run: docker build -t mydockerhub/python-docker-app .
      
            - name: Push to Docker Hub
              run: docker push mydockerhub/python-docker-app

      이 설정을 통해 파이썬 코드가 main 브랜치에 푸시될 때마다 자동으로 Docker 이미지가 배포됩니다.
      FastAPI, Django, Streamlit 등 다양한 파이썬 프레임워크에서 동일한 방식으로 적용할 수 있습니다.

       

      📍 4. Docker 컨테이너 모니터링 및 파이썬 서비스 운영 관리

      운영 환경에서는 컨테이너가 안정적으로 작동하는지 지속적인 모니터링과 자동 복구 설정이 필요합니다.

      • Docker Logs: 컨테이너 로그를 확인하여 오류를 빠르게 진단할 수 있습니다.
      docker logs -f python-docker-app
      • Docker Stats: 컨테이너의 CPU, 메모리 사용량을 모니터링할 수 있습니다.
      docker stats
      • 컨테이너 자동 재시작: 컨테이너가 예상치 못하게 종료되었을 때 자동으로 다시 시작하도록 설정할 수 있습니다.
      docker run -d --restart unless-stopped python-docker-app

      이러한 운영 전략을 통해 파이썬 애플리케이션의 안정성과 가용성을 향상할 수 있습니다.