이제 docker로 django의 이미지를 만들고 run해보도록 하겠습니다.
먼저 이전에 했던 과정을 모두 다 진행해 보도록 하겠습니다. 간단히 리스트업 해보자면
- ec2환경을 하나 만듭니다.
- ssh-keygen으로 deploy key와 ssh key를 만들어 줍니다.
- Django-Deploy를 cloning해 옵니다.
- requirements.txt에 uwsgi를 추가해 줍니다.
- docker for linux를 curl을 통해 설치해 줍니다.
- docker의 권한을 올려줍니다. ( + docker Version check )
- 루트 파일에 Dockerfile을 만들어 주고 내용을 수정해 줍니다.
- docker build를 통해 이미지를 생성해 줍니다.
- image를 통해 container를 실행해 줍니다.
이 과정을 진행해 주어야 합니다. 굵직한 내용만 다루겠습니다.
우선 docker를 curl로 설치하는 명령어는 아래와 같습니다.
$curl -fsSL https://get.docker.com/ | sudo sh
그리고 설치하고 docker에 대한 권한을 설정하는 것은 아래와 같습니다.
$sudo usermod -aG docker $USER
그리고 Django-Deploy의 requirements.txt는 아래와 같이 작성해 주었습니다.
/requirements.txt
asgiref==3.4.1
certifi==2022.6.15
Django==3.2.5
djangorestframework==3.13.1
mysqlclient==2.0.3
pip==21.2.4
pytz==2022.1
sqlparse==0.4.1
typing_extensions==4.1.1
wheel==0.37.1
uwsgi
그리고 Dockerfile은 아래와 같이 간단히 작성해 주었습니다.
/Dockerfile
FROM python:3.6.7
ENV PYTHONUNBUFFERED 1
RUN apt-get -y update
RUN apt-get -y install vim
RUN mkdir /srv/docker-django
ADD . /srv/docker-django
WORKDIR /srv/docker-django
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
이에 대한 간단한 의미를 파악해 보도록 하겠습니다.
FROM python:3.6.7은 python3.6.7이라는 이미지를 pull해서 여기서 수정해서 container를 시작하자 라는 의미입니다.
그리고 ENV는 환경변수를 설정한거고
RUN은 docker의 container가 실행되고 바로 실행될 명령어 들입니다. vim을 깔고 docker의 프로젝트 파일이 시작할 /srv/docker-django라는 폴더를 만들고 해당 Django-deploy를 /srv/docker-django로 옮기는 과정을 거치게 되는 것입니다.
그래서 WORKDIR즉 실제로 우리가 작업할 디렉토리는 /srv/docker-django임을 명시해줍니다.
그리고 또한 pip를 업데이트 시켜주고 requirements.txt에 명시된 의존성을 설치해 주는 과정을 거칩니다.
그리고 EXPOST 8000는 컨테이너의 8000번 포트를 노출시켜라 즉 열어줘라 라는 의입니다.
그리고 맨 마지막은 띄워쓰기를 기준으로 python manage.py runserver 0.0.0.0:8000을 실행해라 라는 의미입니다.
그리고 이 Dockerfile을 통해 이미지를 만들기 위해 docker build명령어를 쳐줍니다.
$docker build -t docker/django .
이는 이미지의 이름은 docker/django ( 폴더 아님 )인데, 현제 디렉토리에서 이를 실행시켜라 라는 의미입니다. 그러면 Dockerfile의 모든 내용이 순차적으로 진행하게 됩니다.
그리고 마지막으로 아래의 명령어를 통해 위에서 만든 django image를 run하면 됩니다.
$docker run -p 8000:8000 docker/django
이는 저번에도 다루었지만 -p는 Host의 8000번 포트와 컨테이너의 8000번 포트와 연결 즉 포트포워딩 시켜주는 작업입니다. 그리고 이전에 만든 docker/django 이미지를 실행시키는 명령어 입니다.
위와 같이 퍼블릭 ip의 8000번 포트로 들어가면 docker container의 배포 파일이 정상적으로 작동하는 것을 보실 수 있습니다.
하지만 여기서 아직 문제점이 있습니다. 서버를 끄면 docker의 container도 꺼져서 서버도 종료됩니다. 이를 막기 위해 Nginx 웹 서버를 구축하는 작업을 진행해 보도록 하겠습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS ECR에 컨테이너 업로드 (0) | 2022.07.05 |
---|---|
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Nginx Docker Build (0) | 2022.07.05 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) Docker 개요 (0) | 2022.07.04 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (백엔드) Django Session 활용2 (0) | 2022.07.04 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (백엔드) Django Session 활용1 (0) | 2022.07.03 |