Development Artist

[웹 서비스 A-Z][Deployment] #20 Docker 본문

Project_Personal

[웹 서비스 A-Z][Deployment] #20 Docker

JMcunst 2023. 3. 29. 20:12
728x90
반응형

이제 백엔드 장고 서버를 배포할 시간입니다.

장고의 경우 Docker를 사용해 컨테이너 환경으로 배포를 하도록 하겠습니다.

https://medium.com/swlh/what-exactly-is-docker-1dd62e1fde38 해당 링크는 Docker에 대한 글로써, 컨테이너 환경에 대한 전반적인 지식을 얻을 수 있을 것입니다.

https://jmcunst.tistory.com/292 해당 링크를 참고하셔서 Docker를 설치하시면 됩니다.

다시 한번 확인하지만, Centos 7 환경입니다.

Docker 설치가 완료되면, 명령어를 사용해보겠습니다.

위와 같이 뜬다면 정상적으로 동작하고 있는 것입니다.

Django 배포를 위한 Docker image를 만들겠습니다.

도커 이미지를 만들기 위해서는 ‘Dockerfile’이라는 파일이 필요합니다. Local의 pyCharm에서 프로젝트 최상위 경로에 ‘Dockerfile’을 만들고 아래 코드를 넣어줍니다.

FROM python:3

RUN apt-get -y update
RUN apt-get -y install vim

RUN mkdir /srv/django-server
ADD . /srv/django-server

WORKDIR /srv/django-server

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python","./test_server/manage.py","runserver","0.0.0.0:8000"]

그리고, Django에서 배포를 위한 설정들을 해주도록 하겠습니다.

  • requirements.txt 확인 및 업데이트.
  • DB 설정 변경.
  • DEBUG 설정 변경.

Requirements.txt

requirements.txt는 이미지를 만들때, 필요한 패키지들을 적어주는 곳입니다. Dockerfile 최상단을 보시면, ‘FROM python:3’이 보입니다. 이미지를 만들때, python:3 이미지를 불러와서 만들겠다는 것을 의미합니다.

python:3 은 기본적인 패키지들만 있기 때문에, 우리가 원하는 Django 서버를 위한 패키지들은 따로 설치를 해줘야 합니다. Dockerfile의 조금 더 아래 ‘RUN pip install -r requirements.txt’ 라는 부분에서 설치를 해주게 됩니다.

현재 설치된 패키지들을 확인하여 ‘requirements.txt’에다가 써줍니다.

DB Setting

이전 시간에 DB를 설치하고 DB Name과 User 등을 확인했었습니다.

settings.py에 가서 DATABASE 부분을 수정해주겠습니다.

Default로 로컬의 Postgresql을 바라보고 있습니다. 우리가 서버에 설치한 DB를 바라보게 하겠습니다.

해당 코드를 스테이징, 커밋 그리고 푸쉬까지 하고 django EC2(’jmcunst-delp-django’)에서 pull을 해줍니다.

# .git가 있는 경로에서
git pull origin master

자, 이제 Docker 명령어를 통해 image를 만들어 봅시다.

tag는 0.0.1로 하겠습니다.

태그를 통해 image 버전 관리를 할 수 있습니다.

docker build -t test_portal:0.0.1 .

# build 완료 후 image 생성 확인
docker images

이미지가 만들어 졌습니다. 이제 컨테이너로 서버를 올려봅시다.

docker run -d -p 8000:8000 --name portal test_portal:0.0.1
# 현재 올라와있는 docker 확인
docker ps -a

다음과 같이 올라와 있는 것을 볼 수 있습니다.

STATUS에 Exit 등 다른 상태가 보인다면 로깅을 통해 원인을 유추해볼 수 있습니다.

# 로깅
# docker logs [container name]
docker logs portal

이제 배포가 완료 되었습니다.

 

다음 시간에는 ALB를 통해 웹에서 백엔드 요청을 정상적으로 할 수 있도록 해보겠습니다.

 

감사합니다.

728x90
반응형
Comments