Django+Docker 이미지 만들어 배포하기
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 # 이미지 삭제