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

코변·2022년 7월 12일
0
post-thumbnail

Photo by Chema Photo on Unsplash

오늘은 어제에 이어 이미지를 컨테이너에 띄우는 과정을 간소화 시켜준 도커 컴포즈를 활용하여 컨테이너에 이미지를 띄우고 무중단 배포까지 해보려고 한다. aws에서 다음과 같은 조건의 ec2 인스턴스를 하나 생성한다.

  • 서울 리전
  • t2.micro
  • 80번 포트와 22번 포트를 염
  • 인증방식은 미리 생성해둔 .pem 키페어를 사용함

이제 생성한 ec2에 아래와 같은 명령어로 (나는 ubuntu os가 깔린 컴퓨터를 빌려서 ubuntu지만 빌린 컴퓨터의 os에 따라 user명은 달라진다 ex - amzonlinux = ec2-user) ec2컴퓨터의 터미널은 연다.

ssh -i {다운받은 pem파일 path} ubuntu@ip주소

이제 도커허브에 접속해서 도커 아이디를 생성하고 프로젝트명에 맞게 repo를 생성해준다. {도커아이디}/{프로젝트명}:{태그} 이런 형식으로 도커 허브에 업로드 되므로 이름을 맞춰 docker build를 해준다. 도커 빌드가 생각이 나지 않는다면 1편을 다시 보고 와도 좋다.

빌드를 해준 후 docker login 명령어를 통해 로그인을 해주고 docker push {도커아이디}/{프로젝트명}:{태그} 명령어를 통해 도커 허브에 push를 해준다. 잘 push가 되었다면 도커허브 tags and scans에 내가 올린 이미지가 잘 올라가 있는 것을 확인할 수 있다.

다음으로 ec2 컴퓨터에서 다음과 같은 명령어로 docker를 다운받아준다. 출처 : docker공식홈페이지

 $ sudo apt-get update
 $ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

apt를 업데이트하고 repository를 참조하여 다운받기 때문에 https package들을 받아준다.

sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

docker의 공식 GPG키를 더해주고

 $ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

repository를 등록한 후

 $ sudo apt-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io

마지막으로 도커를 다운 받아준다. 도커를 다운 받은 후에는 sudo 없이 도커를 사용하기 위해 다음과 같은 명령어를 입력해준다.

sudo usermod -a -G docker ubuntu

이제 마지막으로 도커 컴포즈를 다운로드 해준다.
출처 : https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-22-04

우분투 22.04에 다운로드 할것이고 만약 버전이 다르다면 출처페이지에서 버전마다 다운로드하는 법을 제공하니 그걸 참고하기 바란다.

$ mkdir -p ~/.docker/cli-plugins/
$ curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
$ chmod +x ~/.docker/cli-plugins/docker-compose

위와 같이 다운로드를 받고 권한을 주고나면

$ docker compose version

버전 명령어를 통해 설치가 잘 되었는지 확인할 수 있다. 설치가 잘 되었다면 docker login을 통해 인증을 해주고 아래의 명령어로 도커 컴포즈.yml 파일을 만들어준다.

$ vi docker-compose.yml

vi편집기에 docker-compose.yml파일이 열리면 i 를 눌러 insert 기능을 활성화 시키고 아래의 코드를 붙여 넣어준다.

version: '3.9'
services:
  아무이름:
    image: {도커아이디}/{프로젝트명}:{태그}
    ports:
      - "80:8000"
    command: gunicorn --bind 0.0.0.0:8000 mail_box.wsgi:application &

이렇게 yml파일 설정을 마치고 나면 너무너무 간단하게 도커헙에서 이미지를 당겨오고 또 컨테이너에 띄울수 있고 위 코드에서 미리 추가한 command 명령어를 통해 구니콘을 (아 물론 도커 빌드를 할 때 당연히 구니콘을 다운받아 requirements.txt에 넣어줘야 하겠지만) 실행시켜 무중단 배포(-d 명령어를 통해서)를 실행할 수 있다.

$ docker-compose pull 
$ docker-compose up -d

도커 컴포즈를 통해서 도커헙에 올려둔 이미지를 가져와 배포하는 것 까지 해보았다. 내일은 git actions를 통해 ci/cd를 설명해보려고 한다.

https://velog.io/@aboutjoo/Django-Docker%EB%A1%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

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

0개의 댓글