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

Docker 실제 프로젝트 예제/ 파이썬 Flask 간단 프로그램 컨테이너화

by Maccrey Coding 2024. 9. 14.
반응형

 

Docker는 파이썬 개발자들에게 매우 유용한 도구입니다.

애플리케이션을 컨테이너로 패키징하여 환경에 구애받지 않고 실행할 수 있기 때문에, 개발 및 배포 과정이 훨씬 수월해집니다.

이번 블로그에서는 간단한 파이썬 프로그램을 Docker로 컨테이너화하는 방법을 소개하고, 이를 초보자가 이해할 수 있도록 단계별로 설명하겠습니다.

1. 프로젝트 개요

이번 예제는 간단한 Flask 웹 애플리케이션을 Docker 컨테이너로 실행하는 방법을 다룹니다.

Flask는 파이썬으로 작성된 경량 웹 프레임워크로, 매우 직관적이고 간단합니다.

1.1 프로젝트 디렉토리 구조

프로젝트 디렉토리 구조는 다음과 같습니다.

docker-python-flask/
│
├── app/
│   ├── Dockerfile
│   ├── requirements.txt
│   └── app.py
├── docker-compose.yml
└── README.md

2. 파이썬 프로그램 작성

2.1 Flask 애플리케이션 작성

우선 Flask로 간단한 웹 애플리케이션을 작성해보겠습니다.

 

app/app.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "안녕하세요! Docker로 실행된 Flask 웹 애플리케이션입니다."

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

이 코드는 기본 경로 '/'로 접속할 때 "안녕하세요! Docker로 실행된 Flask 웹 애플리케이션입니다."라는 메시지를 반환하는 간단한 서버입니다.

host='0.0.0.0' 설정을 통해 외부에서 접근할 수 있도록 되어 있습니다.

2.2 Flask 의존성 설정

Flask 애플리케이션을 실행하기 위해 필요한 파이썬 패키지를 명시하는 파일인 requirements.txt 파일을 작성합니다.

 

app/requirements.txt

Flask==2.0.1

이 파일은 애플리케이션에서 필요한 의존성 라이브러리 버전을 명시합니다. 이 예제에서는 Flask 2.0.1을 사용합니다.

3. 파이썬 프로그램 컨테이너화

파이썬 프로그램을 컨테이너로 만들기 위해 Dockerfile을 작성합니다.

3.1 Dockerfile 작성

Dockerfile은 Docker 컨테이너를 빌드하기 위한 설정 파일입니다. 파이썬 애플리케이션을 컨테이너로 실행할 수 있도록 다음과 같은 내용을 작성합니다.

 

app/Dockerfile

# 베이스 이미지로 파이썬 3.9 사용
FROM python:3.9-slim

# 작업 디렉토리 설정
WORKDIR /app

# 의존성 파일 복사 및 설치
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# 애플리케이션 파일 복사
COPY . .

# Flask 애플리케이션 실행
CMD ["python", "app.py"]
  • FROM python:3.9-slim: 파이썬 3.9가 설치된 경량 버전의 이미지를 베이스로 사용합니다.
  • WORKDIR: /app 디렉토리를 작업 디렉토리로 설정합니다.
  • COPY requirements.txt ./: requirements.txt 파일을 컨테이너로 복사하고 의존성을 설치합니다.
  • RUN pip install --no-cache-dir: 의존성 설치 시 캐시를 사용하지 않도록 설정해 이미지 크기를 줄입니다.
  • COPY . .: 현재 디렉토리의 모든 파일을 컨테이너의 /app 디렉토리로 복사합니다.
  • CMD ["python", "app.py"]: 컨테이너가 시작될 때 app.py 파일을 실행하여 Flask 애플리케이션을 시작합니다.

4. Docker Compose로 컨테이너 관리

여러 컨테이너를 동시에 관리하거나, 컨테이너 설정을 쉽게 관리하기 위해 Docker Compose를 사용할 수 있습니다. 이 예제에서는 docker-compose.yml 파일을 작성해 Flask 애플리케이션을 실행해 보겠습니다.

4.1 Docker Compose 파일 작성

docker-compose.yml

version: '3'

services:
  web:
    build: ./app
    ports:
      - "5000:5000"
    environment:
      - FLASK_ENV=development

docker-compose.yml 파일은 단일 web 서비스를 정의하며, 다음과 같은 설정을 포함합니다:

  • build: ./app: app 디렉토리의 Dockerfile을 기반으로 이미지를 빌드합니다.
  • ports: "5000:5000": 호스트 머신의 5000번 포트를 컨테이너의 5000번 포트에 매핑합니다.
  • environment: FLASK_ENV=development: Flask 애플리케이션을 개발 모드로 실행합니다.

4.2 Docker Compose로 컨테이너 실행

이제 Docker Compose를 사용해 Flask 애플리케이션을 실행할 수 있습니다. 프로젝트 루트 디렉토리에서 다음 명령어를 실행합니다.

docker-compose up --build

이 명령어는 Flask 애플리케이션을 Docker로 빌드하고, 컨테이너를 실행합니다.

5. 결과 확인

컨테이너가 성공적으로 실행되면, 브라우저에서 http://localhost:5000 접속할 수 있습니다. 웹 페이지에 다음과 같은 메시지가 표시됩니다

안녕하세요! Docker로 실행된 Flask 웹 애플리케이션입니다.

이 메시지는 Flask 애플리케이션이 정상적으로 실행되었음을 나타냅니다.

Flask 애플리케이션은 MySQL, PostgreSQL 등 다른 데이터베이스와 연결하는 것도 가능합니다.

6. Docker 컨테이너 최적화 및 관리 팁

  1. 멀티스테이지 빌드(Multi-stage Build) 사용: 필요하지 않은 빌드 관련 파일을 최종 이미지에서 제외하고, 애플리케이션 크기를 줄일 수 있습니다.
  2. 환경 변수 관리: docker-compose.yml에서 환경 변수를 직접 설정하는 대신, .env 파일을 사용해 관리할 수 있습니다.
  3. Docker 볼륨 사용: 파일 시스템의 변경 사항을 유지하려면 Docker 볼륨을 사용해 데이터를 저장할 수 있습니다.

 

이 블로그에서는 Flask 웹 애플리케이션을 Docker로 컨테이너화하는 실전 예제를 살펴보았습니다.

Docker는 파이썬 애플리케이션을 패키징하여, 개발 및 배포 환경에서 동일하게 실행할 수 있도록 도와주는 강력한 도구입니다.

Flask 외에도 Django, FastAPI 등 다양한 파이썬 웹 프레임워크에도 적용할 수 있으니, Docker를 활용해 더욱 유연한 개발 환경을 만들어 보세요.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형