S E P H ' S

[AWS & Django] Ubuntu EC2 Django Docker 이미지로 배포하기 본문

Cloud Service/AWS Cloud

[AWS & Django] Ubuntu EC2 Django Docker 이미지로 배포하기

yoseph0310 2021. 9. 19. 23:47

이 글은 웹 페이지나 정적파일은 다루지 않고 REST API만을 다룬 Django 프로젝트를 Docker로 빌드 한 것을 기록한 것입니다.

만약 여러분이 웹 페이지, 정적파일까지 다루는 프로젝트를 배포하기 위해 이 글만 보고 Docker 이미지로 배포하려 한다면 빌드가 잘 이뤄지지 않거나 css가 적용되지 않은 페이지가 여러분에게 문안 인사를 올릴 수도 있다는 점을 말씀드립니다.

 

또한, Django 프로젝트를 Docker Image로 빌드하여 EC2 인스턴스에 배포하는 것을 중점으로 작성됐기 때문에 Docker 설치, Docker Hub 계정 생성 그리고 Django 프로젝트 생성은 선행되어야 합니다.

 

1. 마이그레이션 진행

- 변경된 점 적용

python3 manage.py makemigrations
python3 manage.py migrate

 

 

2. requirement.txt

- Django는 pip로 install 된 환경으로 작동됩니다. 구성된 환경을 Docker에서도 동일하게 구성하도록 해야합니다.

pip freeze > requirements.txt

- pip freeze 만 쳐보면 현재 환경에 pip로 install된 목록을 확인할 수 있고 위의 명령어로 설치 목록들을 requirements.txt에 적어 관리할 수 있습니다.

 

3. Dockerfile 작성

- Django 프로젝트 최상단에 Dockerfile 이라는 이름으로 파일을 작성해줍니다. 이 때, 파일명이 틀리면 안됩니다!

- Django 프로젝트 최상단이라는 것은 쉽게 말해 manage.py 가 있는 경로 위치와 같은 위치입니다.

 

FROM python:3 # 생성하는 Docker의 python 버전
ENV PYTHONUNBUFFERED 1 
RUN apt-get -y update
RUN apt-get -y install vim # Docker 안에서 vi 설치 안해도 됨

RUN mkdir /srv/docker-server # Docker 안에 srv/docker-server 폴더 생성
ADD . /srv/docker-server # 현재 디렉토리를 srv/docker-server 폴더에 복사

WORKDIR /srv/docker-server # 작업 디렉토리 설정

RUN pip install --upgrade pip # pip 업그레이드
RUN pip install -r requirements.txt # 필수 패키지 설치

EXPOSE 8000 # 8000 port 개방
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] # 실행

 

 

4. Docker image 생성

- 현재 경로에서 Docker image build를 진행합니다.

docker build -t [생성하고자 하는 도커 이미지이름] .

- 이미지가 정상적으로 만들어졌는지 확인하기 위해 docker images를 입력합니다.

docker images

 

5. Docker run

- 제대로 실행되는지 테스트 해보기 위해 실행시켜서 확인합니다. 

docker run -p [호스트포트]:[컨테이너포트] [생성한 이미지이름]

# 예시
docker run -p 8000:8000 dockerdjango

 

- 백그라운드 실행은 다음과 같이 하면 됩니다.

docker run -d -p [호스트포트]:[컨테이너포트] [생성한 이미지이름]

# 예시
docker run -d -p 8000:8000 dockerdjango

 

- 제대로 실행됐다면 도커 허브에 올려서 서버에서 실행시켜 봅시다.

 

6. DockerHub 에 이미지 push하기

- 시작글에서 말했듯이 DockerHub 계정이 있어야합니다.

- 도커 허브 계정이 있다면

docker login
docker tag [도커이미지이름]:latest [도커허브아이디]/[도커이미지이름]:latest
docker push [도커허브아이디]/[도커이미지이름]:latest

- 도커허브에서 확인해보면 새로운 레포지토리에 도커 이미지가 생성되었을 것입니다.

 

7. AWS EC2 서버에서 실행하기

- 도커 허브에 푸쉬된 이미지를 가져와서 백그라운드 실행만 시키면 배포는 끝납니다. 

docker run -d -p [호스트포트]:[컨테이너포트] [생성한 이미지이름]

# 예시
docker run -d -p 8000:8000 dockerdjango

- 여러분의 서버 프록시 설정에 따라 다르겠지만, 별다른 설정이 없다면 서버 도메인 : [실행된 도커 이미지 포트 번호] 로 접속하면 됩니다.

 

 

참고링크

https://cholol.tistory.com/489
https://blog.siner.io/2019/02/25/django-docker-custom-image/