
Docker 로 배포하기
지난 포스트에서 NCP서버를 열고 필요한 파이썬 버전 설치까지 진행하였다. 이제 이 서버에 내가 만든 django서버를 배포해보려고 한다.
- python version : 3.11
- Django version : 5.0
- djagno rest framwork version : 3.14.0
- 사용한 NCP server 이미지 : Ubuntu 20.04

도커파일이란?
- 도커 이미지를 생성하기 위한 DSL으로서 몇가지 명령어들 커스텀 이미지를 만들 수 있게 한다.

Docker image란?
- 배포 컨테이너(Docker container)를 만드는 데 사용되는 일기 전용 템플릿.
- 배포 컨테이너(Docker container)는 이런 템플릿에서 생성된 배포된 인스턴스이다.
- Image가 콜라병의 레시피라면, container는 그 레시피를 보고 공장(docker)에서 찍어낸 콜라병이다.
docker login
# docker build '옵션' '도커에 가입한 계정'/'프로젝트명':'버전' '경로'
docker build -t lsjmc0225/blink-was:0.1.0 .
이때, '.'은 현재 경로를 나타낸다.

이미지를 실행은 이미지를 컨테이너화한다는 것과 같은 맥락이다.
# 내 로컬의 도커 이미지 모두 확인하기
docker images
# 내 로컬에 있는 이미지 컨테이너로 만들어 실행시키기
docker run --name '컨테이너명' -d -p 'host 포트번호':'컨테이너 포트번호' '도커에 가입한 계정'/'프로젝트명':'버전'
# 현재 가동중인 컨테이너 목록 확인하기
docker ps -a

-d : 지속적으로 실행한다는 옵션-p : 포트포워딩한다는 옵션-a : 정지된 컨테이너 확인한다는 옵션컨테이너 내에서 발생한 로그를 확인
docker logs '컨테이너명'

__init__.py 제외 모든 migrations 파일 삭제# manage.py 가 있는 경로에서
python manage.py makemigrations
python manage.py migrate
# 컨테이너 확인
docker ps -a
# 컨테이너 삭제 (이때, 컨테이너가 종료되었는지 확인하세요)
docker rm '컨테이너명'
# 현재 이미지 확인
docker images
# 이미지 삭제
docker rmi '이미지명'
# docker build '옵션' '도커에 가입한 계정'/'프로젝트명':'버전' '경로'
docker build -t lsjmc0225/blink-was:0.1.0 .
# 내 로컬의 도커 이미지 모두 확인하기
docker images
# 내 로컬에 있는 이미지 컨테이너로 만들어 실행시키기
docker run --name '컨테이너명' -d -p 'host 포트번호':'컨테이너 포트번호' '도커에 가입한 계정'/'프로젝트명':'버전'
# 현재 가동중인 컨테이너 목록 확인하기
docker ps -a

docker ps -a를 하였을 때 위의 사진처럼 STATUS에 Up n seconds라고 보이면 정상적으로 컨테이너가 작동중이라는 뜻이다.docker logs '컨테이너명'을 이용해 로그를 확인하고 해결해야한다.로컬에서 컨테이너가 작동하는 것을 확인했으므로 docker hub에 푸시하여 NCP서버에서도 활용가능하게 하자.
# 이미지 푸시
docker push '도커에 가입한 계정'/'프로젝트명':'버전'

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
sudo docker login
sudo docker pull '도커에 가입한 계정'/'프로젝트명':'버전'
docker run --name '컨테이너명' -d -p 'host 포트번호':'컨테이너 포트번호' '도커에 가입한 계정'/'프로젝트명':'버전'
# 컨테이너 실행 잘 됐나 확인
sudo docker ps -a
NCP ACG inbound 규칙에 8000번 포트를 추가하자

이번 포스트에서는 docker를 이용해 로컬의 프로젝트를 서버에 배포하는 것까지 하였다. 그림으로 나타내면 밑의 사진과 같다
- 다음 시간에는 본격적으로 구매한 도메인을 이용해 https 서버를 배포하는 것까지 진행하겠다.
