본문 바로가기
카테고리 없음

[파이썬 심화] Docker 사용법 , Github Action, 실전 활용 팁

by 개발자를 꿈꾸는 사람들과 함꼐 2025. 4. 17.

Docker로 파이썬 앱을 컨테이너화하는 방법

Docker는 파이썬 애플리케이션을 OS에 독립적인 컨테이너로 감싸 배포하는 기술입니다.
Python 코드, 라이브러리, 설정까지 하나의 이미지로 패키징하면 어디서든 동일한 환경으로 실행할 수 있습니다.

1. 기본 프로젝트 구조

myapp/
├── app.py
├── requirements.txt
└── Dockerfile

2. app.py 예제

from flask import Flask
app = Flask(__name__)

@app.route("/")
def home():
    return "Hello, Docker!"

3. requirements.txt

flask==2.3.2

4. Dockerfile 작성

# Python 이미지 기반
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은 앱 실행을 위한 일련의 명령어를 정의한 파일입니다.
CMD는 컨테이너가 실행될 때 기본으로 실행할 명령입니다.

5. Docker 이미지 빌드 & 실행

# 이미지 빌드
docker build -t myapp .

# 컨테이너 실행
docker run -p 5000:5000 myapp

 

GitHub Actions로 Docker 이미지 자동 빌드 및 배포하기

CI/CD 자동화를 통해 코드 푸시 시 Docker 이미지를 자동 빌드하고
Docker Hub에 배포하거나, EC2/서버에 자동 푸시하는 작업도 가능합니다.

1. Docker Hub 연동을 위한 GitHub Secret 등록

      
  1. GitHub Repository → Settings → Secrets → Actions
  2.   
  3. DOCKER_USERNAME, DOCKER_PASSWORD 등록

2. GitHub Actions 워크플로우 예시

📁 .github/workflows/docker-build.yml

name: Build and Push Docker Image

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout Code
      uses: actions/checkout@v3

    - name: Set up Docker
      uses: docker/setup-buildx-action@v2

    - name: Login to DockerHub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build and Push
      uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: ${{ secrets.DOCKER_USERNAME }}/myapp:latest

해석:

      
  • 코드를 푸시하면 자동으로 Docker 이미지를 빌드
  •   
  • Docker Hub에 myapp:latest 태그로 푸시됨
  •   
  • 비밀번호는 절대 노출되지 않도록 GitHub Secrets에 등록 필수

3. 배포 서버에서 자동 Pull 및 재시작

# 서버에서 주기적으로 최신 이미지 Pull
docker pull yourname/myapp:latest

# 기존 컨테이너 중지 및 새로 실행
docker stop myapp && docker rm myapp
docker run -d --name myapp -p 80:5000 yourname/myapp:latest

이 과정을 cron이나 watchtower로 자동화하면 완전 자동 배포가 가능합니다.

실전 활용을 위한 팁

1. .dockerignore로 이미지 최적화

__pycache__/
*.pyc
*.log
.env

.dockerignore 파일을 추가하면 불필요한 파일이 이미지에 포함되지 않아 용량이 줄고 속도도 향상됩니다.

2. 멀티스테이지 빌드로 경량 이미지 만들기

FROM python:3.10-slim AS base
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

FROM base
COPY . .
CMD ["python", "app.py"]

첫 단계에서 빌드 후, 두 번째 단계에서 필요한 결과만 복사하여 경량 이미지를 만들 수 있습니다.
특히 빌드 툴이나 테스트 도구가 많은 경우 유용합니다.

3. private registry 또는 AWS ECR로 배포

      
  • AWS CLI 또는 GitHub Actions에 ECR 인증 설정 가능
  •   
  • 회사 내부 서버 혹은 보안 환경에서 안전하게 배포 가능