August 06, 2020
Django로 생성된 프로젝트를 Docker로 배포하는 튜토리얼이다. 다만 몇일전 부터 AWS의 Free Tier에 한계가 다다랐다는 압박 메일이 날라왔고 울며 겨자먹기로 보유하고 있던 시놀로지 나스에 도커를 올려보기로 했다.
너무 무서운것…
여기서 설치하자
다음과 같은 명령으로 설치하자 이는 AWS의 EC2역시 리눅스 환경이라면 필요한 부분이다.
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
단, 한줄 한줄 명령어를 입력할것!
pip install gunicorn
gunicorn
에서 백그라운드에서 실행될 예정이므로 해당 패키지를 설치해준다.pip freeze > requirements.txt
# Base Docker지정
FROM python:3
# 프로젝트가 실행될 경로 지정
WORKDIR /usr/src/app
# requirements.txt 경로 지정 및 실행
COPY requirements.txt ./
RUN pip install -r requirements.txt
# 복사할 프로젝트 내용물 지정
COPY . .
# 어플리케이션이 실행될 포트 지정
EXPOSE PORT
# gunicorn 실행 설정
CMD ["gunicorn", "-b", "0.0.0.0:PORT", "chanel.wsgi:application"]
만약 데이터베이스 서버를 local환경에서 사용하고 있었다면 이를 AWS의 RDS나 나같이 Free Tier 경고가 무서워 NAS로 옮긴 상태라면 해당 경로로 지정해줘야 한다.
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_name',
'USER': 'User_name',
'PASSWORD': 'User_password',
'HOST': 'Database host address',
'PORT': 'Database PORT',
}
}
$ (sudo) docker build -t yongineer/chanel_backend:0.1.0 .
이때 유저명 (yongineer
)이 다르다면 docker hub에 push되지 않으므로 반드시 도커 유저명을 명시해야 하며 해당 이미지의 버전 또한 반드시 명시되어야 한다.
빌드가 끝났다면 이미지가 생성 되었는지 확인한다.
$ (sudo) docker images
$ (sudo) docker run --name chanel -d -p PORT:PORT yongineer/chanel_backend:0.1.0
도커가 잘 올라갔는지 확인해보자.
$ (sudo) docker ps
만약 정상적으로 실행되지 않았다면 에러가 발생했을 것이다.
일단 로그부터 확인해보자
$ (sudo) docker logs CONTAINER ID
⚠️ 모든 컨테이너 실행 내역 확인 하기
아래 명령을 실행하면 STATUS에 에러 코드가 기록되어 있다.
$ (sudo) docker ps -a
내가 만난 에러코드
Exited (126)
wsgi
이름을 잘못 적어서 해당 에러가 발생했었다.Exited (127) : docker Container 내부에서 Command를 발견하지 못하였을 경우 발생
gunicorn
설정을 잘못해 해당 에러가 발생했었다.$ (sudo) docker stop CONTAINER ID
$ (sudo) docker rm CONTAINER ID
⚠️ 이미지 삭제
$ (sudo) docker rmi IMAGE ID
$ (sudo) docker login
$ (sudo) docker push yongineer/chanel_backend:0.1.0
작업이 완료 된 후 도커허브에 있는 자신의 Repository에 업로드 된 것을 확인할 수 있다.
⚠️ Docker hub는 Public repository는 무제한이지만 Private repository는 계정당 1개 무료로 제공된다.
일단 위에서 언급한 Linux 설치 방법으로 설치할 수 있지만 시놀로지 패키지 센터에서 도커를 받아서 설치 할 수있다.
설치가 완료 되었으면 시놀로지 나스에 ssh로 접근해 docker hub에 있는 이미지를 pull 받을 수 있는데 앞서 했던것 처럼 로그인이 선행되어야 한다.
로그인
$ (sudo) docker login
pull
$ (sudo) docker pull yongineer/chanel_backend:0.1.0
실행 하기 앞서 애플리케이션이 실행될 컨테이너의 포트를 포트포워딩으로 열어줘야 한다.
$ (sudo) docker run --name chanel -d -p PORT:PORT yongineer/chanel_backend:0.1.0
정상적으로 실행이 됐다면 아까 언급한 $ (sudo) docker ps
명령으로 확인 할 수 있고 DSM에서 도커 어플리케이션을 실행하면 다음과 같이 나오는 것을 볼 수 있다.
도커 컨테이너가 실행되었으면 요청과 응답이 잘 되는지 확인해보자
굿, 이제 AWS의 무서운 메일을 받지 않아도 될 거 같다 …
나같은 경우 DB 서버 또한 NAS에 올려놨는데 이것도 기회가 되면 포스팅 해봐야겠다.