잡다구리/웹 & 서버

Django+Docker 이미지 만들어 배포하기

홍루피 2021. 4. 12. 20:15

Docker를 처음 써보는 초보자 기억 복기용이므로 틀린 부분이 있을 수 있습니다.

Docker와 Docker 이미지의 개념에 대한 부분은 추후 업데이트 예정입니다.

IDE : Pycharm / 터미널: zsh / 파이썬 버전 3.9

 

 

venv 생성 및 활성화

- venv (virtual environment) : 프로젝트 별 독립된 파이썬 실행 환경(runtime/interpreter)을 사용 보장

- 버전 충돌을 방지할 수 있기 때문에 venv에 pip로 패키지를 설치하고 사용하는 것을 권장합니다.

- Django 프로젝트 파일로 들어간 후 venv를 생성하고 actiavte시킵니다.

activate하지 않으면 pip로 설치한 패키지가 제대로 원하는 venv에 설치되지 않을 수 있으며

Docker로 이미지를 빌드하고 실행시켰을 때 'Module not found'와 같은 오류를 만날 수 있습니다.

 

cd 프로젝트 폴더
python -m venv .venv 
source ./venv/bin/activatecd

 

- 가상환경을 활성화 한 후 pip를 최신으로 업그레이드 합니다. (필수는 아니지만 문제가 생길 수 있으니 주기적으로 해주시길 바랍니다.)

- pip 업그레이드 후 원하는 패키지를 설치합니다. 

pip install --upgrade pip

 

Requirements.txt 작성

 

프로젝트 폴더 안에 requirements.txt를 작성합니다.

저는 Django와 openCV를 위해 opencv-python, 그 외 필요한 패키지를 작성했습니다.

직접 작성해서 저장해도 되고 터미널에서 pip freeze > requirements.txt 명령어를 사용해 생성할 수 있습니다.

*pip freeze, pip list 명령어는 설치된 패키지와 버전을 확인할 수 있는 명령어입니다.

 

 

DockerFile 작성

- 배포 시 가장 중요한 부분입니다. ( 이 부분에서 잘못 작성할 시 많은 오류를 겪게 되니 주의..(경험자..))

- 가상환경에 설치되어 있는 중요 패키지들은 requirements.txt에 저장되어 있습니다.

- 이를 Docker 컨테이너에 복사하고 pip로 목록에 있는 패키지들을 설치합니다.

- 포트는 원하는 포트를 작성하면 됩니다.

** 여기서 apt-get이 붙은 것들은 python-opencv 설치시 발생하는 오류를 해결하기 위함이니 해당되지 않으면 작성하지 않아도 됩니다. 

FROM python:3.9

COPY requirements.txt ./
RUN apt-get update ##[edited]
RUN apt-get install ffmpeg libsm6 libxext6  -y
RUN pip3 install -r requirements.txt

WORKDIR /usr/src/app

COPY . .

EXPOSE 8888


CMD ["python3", "manage.py", "runserver", "0.0.0.0:8888"]

 

프로젝트  폴더 확인

- DockerFile과 requirements.txt가 같은 경로에 있는지 파악합니다.

 

 

Docker 이미지 빌드 및 실행

- Repository는 Dockerhub Repository, TAG는 주로 버전정보등을 사용합니다.

- 제대로 빌드가 되면 Docker images 명령어를 사용해 이미지가 생성되었는지 확인하고 실행시킵니다.

- 실행 후 설정한 URL로 접속해 제대로 실행되는지 확인합니다.

docker build . -t Repository:TAG # 빌드
docker images # 이미지 목록 확인
docker run Repository:TAG # 실행

docker rmi Repository:TAG # 이미지 삭제