Python - Docker Running Python

파이썬을 실행 시키는 Docker Image 구성하기

최근 discord bot을 python 을 통해 실행시키도록 구성하는 작업을 하고 나서 실제 서비스를 하기 위한 준비를 하게 되었다.

해당 py 파일을 계속 실행 시키고 이벤트 기반으로 대기하는 형태여서 이를 실행시키고 있을 서버가 필요했다.

내가 원하는 것은 다음과 같았다.

  1. 파이썬 파일을 구동할 수 있는 환경
  2. 해당 파일을 서버에서 계속 구동할 수 있어야 함
  3. 다만 서버 환경에서 서버 자체에 무언가 추가하거나 환경 구성을 하기가 싫었음

따라서, 해당 파일을 가지고 Docker 에 이미지 형태로 구성하여 구동되는 서버가 필요했다. 어차피 통신만 가능하면 Docker로 구동하여도 호스트 포트와 컨테이터 포트연관성은 상관 없을 듯 하였다.

Python 환경을 갖는 서버 이미지 구성하기

우선, 해당 파이썬 파일을 실행 시킬 서버 환경을 구성해야 했다. 간단하게 Cent OS 7 이미지를 구동해서, 그 안에 파이썬 환경을 갖춘 후 파일을 실행 시키려고 하였다.

그래서 우선 https://hub.docker.com/_/centos 에서 Cent OS 7 을 다운로드 해서 작업하려고 하였다.

우선 이런 형태를 가지고 이미지를 구성하려고 하였다.

  1. CentOS7 이미지를 구동하고, Python을 설치한다.
  2. 해당 이미지에서 파이썬 파일을 실행 할 수 있도록 한 후, 이미지화 한다.
  3. 커스터마이징 한 이미지를 실행해서 인수로 해당 파일을 실행 할 수 있도록 한다.

그런데, 이렇게 하려니 너무 할 작업이 많았다. Cent OS 7 이미지를 받아서 해당 환경 내에서 다시 개발 환경을 구성하려니 필요한 모듈이 너무 많았다.

따라서, Docker Python Official Image를 받아서 사용하기로 하였다.

https://hub.docker.com/_/python

여기서 버전 별로 파이썬이 설치된 환경의 이미지를 받을 수 있다. 별도의 환경을 구성하지 않아도 파이썬 환경이 설치된 채로 이미지를 구동하기 때문에 별도의 작업 없이 해당 이미지를 사용하여 컨테이너를 구동할 때, 내 파일만 실행되게끔 하면 되었다.

Python 이미지를 활용한 실행 환경 Dockerfile 구성하기

Dockerfile을 다음과 같이 구성했다. 라인 별 설명은 주석으로 달아 놓았다. 어쨋든 파이썬 파일 하나를 실행하면서 올라가기 때문에 나중에 다른 파이썬 파일을 실행해야하는 경우에도 이를 계속 활용할 수 있을 것이다.

## python 3.10.8 환경 이미지 사용
FROM python:3.10.8-buster
## 호스트의 dockerfile이 있는 경로 전체를 컨테이너의 /app 경로로 옮긴다.
COPY . /app
## 컨테이너 실행 시, 작업 디렉토리를 /app으로 지정한다.
WORKDIR /app
## 작업 디렉토리에서 아래 명령을 실행한다.
## 파이썬 라이브러리 환경을 갖는 파일을 읽어 필요 라이브러리를 다운로드 한다.
RUN pip3 install -r requirements.txt
## 명령 실행의 진입점을 python3 로 지정한다.
ENTRYPOINT ["python3"]
## 위의 명령 실행에 대한 인수를 지정한다.
CMD ["interview-bot-ver2.0.py"]
## 위 명령 기준으로 컨테이너 구동 후 아래 명령을 실행한다.
## python3 interview-bot-ver2.0.py

예를 들어, 위의 dockerfile과 같이 동일 경로에

  • requirements.txt
  • {구동할 파이썬 파일}.py

파일을 올려놓고 해당 dockerfile을 이미지화 하여 구동하면 된다.

## dockerfile 이미지화
docker build . -t pyContainer:1.0

## docker run
docker run -d -it --name pyCon pyContainer:1.0

결론

해당 이미지를 활용하면 빠르게 파이썬 파일을 실행하는 서버 환경을 구축하여 구동할 수 있다. 간단하게 파이썬 파일 하나만 실행시키는 정도면 크게 무리는 없을 듯 하지만 현재 저렇게 이미지를 구성하여 러닝하는 경우 용량이 약 1.0GB 정도 된다.

원래 파이썬에서 제공하는 공식 이미지 자체가 저 정도 크기이다 보니.. 용량을 줄일 수 있다면 더 획기적이겠지만 미니멀하게 이미지를 만드려는 시도 자체가 너무 번거롭다보니 우선 저렇게라도 구동해놓고 사용하고 있다.

구동할 파이썬 파일이 많아지면 단일 컨테이너 서버에서 nginx나 다른 서버를 이용해 파이썬 파일을 구동시키는 것도 나쁘지 않을 것 같다.


© 2024. Chiptune93 All rights reserved.