이번 포스팅에서는 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
'Linux > Docker' 카테고리의 다른 글
Docker 사용해보기 - 4 (오케스트레이션 도구소개) (0) | 2021.05.24 |
---|---|
Docker 사용해보기 - 2 (Nginx Docker 예제) (0) | 2021.04.22 |
Docker 사용해보기 - 1 (Why Docker 2편 + CentOS 7.9 Docker 설치) (0) | 2021.04.17 |
Docker 를 사용한 이유 (Why Docker?) (0) | 2021.04.06 |
최근댓글