이번 포스팅에서는 Docker 를 사용하여 Python 모듈을 실행하는 예제를 진행해보겠습니다.


2021.04.06 - [Linux/Docker] - Docker 를 사용한 이유 (Why Docker?)

2021.04.17 - [Linux/Docker] - Docker 사용해보기 - 1 (Why Docker 2편 + CentOS 7.9 Docker 설치)

2021.04.22 - [Linux/Docker] - Docker 사용해보기 - 2 (Nginx Docker 예제)


필요한 이미지 다운로드하기 (Pull Docker Image)

 

오늘도 Docker Hub 에서 필요한 이미지를 다운로드해봅시다.

저는 python 3.7 버전을 다운로드 하겠습니다.

Docker Hub 에서 python 검색 후 Tags 탭에서 검색!

 

 

3.7 버전을 검색하면 뒤에 모드가 여러개가 있습니다.

stretch, slim, buster, alpine...

 

Image Variants 

 

저는 기본모드를 선택했습니다.

alpine 모드가 용량이 적어 사용해봤으나

모듈에서 사용하는 다른 오픈소스를 사용할 때 문제가 있어서 사용하지 않았습니다.

 

기본모드는 Debian 계열 리눅스를 사용합니다.

 

 

 

Pull Python Image

$ sudo docker pull python:3.7.10

 

 

간단한 python 프로그램을 만들어봅시다.

예시는 flask 를 이용한 웹서버입니다.

 

 

requirements.txt 작성

$ vi requirements.txt
Flask

(예제에서는 Flask 만 사용합니다. 다른 라이브러리나 버전이 확정된다면 fix 해주세요)

 

app.py 작성

$ vi app.py
from flask import Flask

app = Flask(__name__)

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

 

Dockerfile 작성

$ vi Dockerfile
FROM python:3.7.10

WORKDIR /usr/src/app

COPY . .

RUN pip install --upgrade pip setuptools wheel
RUN pip install -r requirements.txt

EXPOSE 5000

CMD ["python", "./app.py"]

 

Docker Image Build

$ sudo docker build -t flask_app .

 

Warning 에 대해 검색해보니 dependency 의 버전을 명시하지 않으면 나올 수 있다고 한다.

 

 

Run Flask App

$ sudo docker run --name flask_app -d -p 5000:5000 --restart unless-stopped flask_app

 

 

Check Docker Container

$ sudo docker ps -a

 

잘 실행되어 있는 것을 확인할 수 있다.

 

실제로 Docker Container 를 만들 때는

로컬에서 Virtualenv 를 사용하여 패키지를 관리하고 requirements.txt 를 만들어서 사용하기를 권장한다.

 

2021.03.26 - [Python] - virtualenv 로 패키지 관리하기 (anaconda 를 안쓰는 이유)

 

 

다음 포스팅에서는 오케스트레이션 도구를 사용하여 컨테이너를 운영하는 예제를 다뤄볼 예정입니다.

 

Reference

pythonspeed.com/articles/dockerizing-python-is-hard/

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기