Django프로젝트를 Docker로 AWS서버에 배포하기-1

코변·2022년 7월 11일
2
post-thumbnail

Photo by Chema Photo on Unsplash

오늘은 djnago프로젝트를 docker를 이용해 aws서버에 배포하는 과정을 간단하게 다뤄보겠다.

가능하다면 가볍게 컨테이너에 띄우는 것부터 github action을 통한 ci/cd까지 시리즈로 정리해보려고 한다.

우선 도커파일을 프로젝트폴더에 만들어준다.(manage.py가 있는 폴더 꼭 이 곳일 필요는 없지만 굳이 workdir 구문을 추가로 써가며 다른 폴더에 둘 이유를 찾지 못함)

내가 만든 도커파일은 다음과 같다.

FROM python:3.10-slim-buster

ENV PYTHONUNBUFFERED = 1

RUN mkdir /app

WORKDIR /app

COPY requirements.txt /app/

RUN pip install -r requirements.txt

COPY . /app/

CMD python manage.py runserver o.o.o.o:8000
혹은
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

도커파일을 한 줄 한 줄 훑어보자.

  1. FROM python:3.10-slim-buster 우리 프로젝트의 파이썬 버전은 3.10이므로 파이썬 3.10을 다운받으면 좋겠지만 좋은 서버 컴퓨터를 빌리지 못하는 관계로 이미지 크기를 작게 잡기 위해서 python-slim-buster를 받아준다.
  2. ENV PYTHONUNBUFFERED = 1 도커 run을 통해 django 앱을 구동시키려고 하면 출력이 한참 지나서야 나와서 구글링해보니 파이썬이 자체적으로 주고 있는 출력 버퍼와 겹치는 상황이 생겨 출력이 늦어지고 이를 해결하기 위해서는 이 라인이 필요하다고 하여 적어주었다.
  3. RUN mkdir /app, WORKDIR /app 이 두 줄은 폴더를 생성하고 그 폴더로 이동하는 명령어다.
  4. COPY requirements.txt /app/, RUN pip install -r requirements.txt requirements.txt를 app이라는 폴더에 복사하고 pip install을 실행하는 명령어
  5. COPY . /app/ 현재폴더의 모든 폴더, 파일을 app폴더에 복사하는 명령어
  6. CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] 마지막으로 이 코드는 직접 aws에 컨테이너를 띄울 때는 쓰지 않을 명령어이지만 도커 run을 통해 8000번 포트에 정상적으로 작동하는지 테스트하기 위해 써놓은 코드다.

이제 터미널창에 테스트를 위해서 django-test라는 이름으로 latest태그를 달아서 이미지를 빌드해본다.

docker build -t django-test:latest .

그 후에 도커 런을 통해서 장고 테스트 이미지가 컨테이너에 잘 띄워지는지 확인해본다.

docker run -p 80:8000 django-test:latest

-p 이후에 적은 코드는 80번 포트로 들어온 요청을 8000번으로 리디렉션하겠다는 의미로 http://localhost에 접속하면 장고의 로켓 페이지를 볼 수 있다.

오늘은 도커파일을 작성하며 한 줄 한 줄 뜯어보는 시간을 가졌다. 내일은 간단한 docker-compose.yml 파일을 만들어서 compose 명령어를 통해 컨테이너에 이미지를 띄우고 runserver가 아닌 구니콘을 통해서 8000번 포트에 접근하려고 한다.

https://velog.io/@aboutjoo/Django%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-Docker%EB%A1%9C-AWS%EC%84%9C%EB%B2%84%EC%97%90-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-2

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글