본문 바로가기

Web

Docker 배포하기

도커 이미지를 docker hub에 올리고 AWS EC2에서 다운로드 받아 서버를 실행하는 과정

준비물: 만들어둔 AWS EC2, RDS

RDS에서 할 것

RDS 접속

$ mysql -h <RDS 엔드포인트 주소> -u <user명> -p

user명은 대개 root로 설정해둔 경우가 많다. 위를 실행하고 비밀번호를 입력하면 RDS에 접속할 수 있다.

DB 생성

> create database <DB명> character set utf8mb4 collate utf8mb4_general_ci;

로컬에서 할 것

프로젝트 DB 설정 수정

name -> RDS에 만들어둔 DB명

user, password -> RDS user, password

host -> RDS 엔드포인트 주소

그리고 RDS에 만들어둔 DB에 데이터를 채워 넣는다. 기존 로컬 DB를 mysqldump로 sql 파일을 만들어 옮기기도 하고 db_uploader가 있다면 실행해서 데이터를 넣기도 한다.

도커 이미지 만들기

Dockerfile을 만들고 도커 이미지를 빌드한다. 이 이미지로 컨테이너를 실행해 상태를 본다.

도커 컨테이너 실행이 안 되거나 실행한 뒤 조금 있다 꺼진다면

1. Dockerfile에 문제가 있는 경우

    -> Dockerfile부터 확인하자. Dockerfile 마지막 줄에서 wsgi 앞에 들어가는 장고 프로젝트 명을 잘못 입력해서 에러가 난 적이 있다. 문제 원인을 수정하고 이미지를 다시 빌드한다.

2. 그 외 파일에 문제가 있는 경우

    -> requirements.txt가 업데이트 된 상태가 아닐 수도 있다.

3. 다른 서버가 해당 포트를 사용하고 있는 경우

    -> 다른 포트를 주면서 컨테이너를 다시 실행해준다.

4. 백그라운드 실행으로 돌리지 않고 터미널을 끈 경우

    -> 로컬에서 테스트할 때 보다 EC2에서 서버를 실행시 발견할 수 있는 실수다. daemon화 하는 옵션을 주며 컨테이너를 다시 실행하거나 nohup을 사용해서 백그라운드 실행으로 돌린다.

 

이 중 2번의 경우로 requirements.txt에 gunicorn이 없어서 에러가 난 적이 있다.

로컬에서 테스트할 때 runserver만 사용하다가 Dockerfile에서는 gunicorn을 사용해 서버를 연다는 CMD를 넣어 놓고 requirements.txt에서는 누락했다. requirements.txt에 gunicorn을 추가한 뒤 이미지를 다시 빌드했다.

docker hub에 도커 이미지 올리기

로그인

$ docker login

password: 라고 나오면 docker 계정의 비밀번호를 입력한다. 이전에 로그인한 적이 있다면 자동로그인이 된다.

다른 아이디로 로그인하기

자동로그인이 걸려있는 기존 계정 외의 다른 계정을 사용하고 싶다면 옵션을 줘야 된다.

$ docker login --username <docker 계정명>

도커 이미지 올리기 (push)

$ docker push <dockerhub 계정명>/<이미지명>:<버전>

dockerhub에 올리려는 이미지의 계정과 같은 유저로 로그인 되어 있어야 됨. 아니면 push할 때 denied 됨


EC2에서 할 것

EC2 접속

ubuntu를 사용하는 EC2 인스턴스 접속

$ ssh -i <pem파일 경로> ubuntu@<인스턴스의 퍼블릭IPv4주소>

도커 설치

도커 시작하기에서 설치한 것과 동일

도커 이미지 다운로드 (pull)

$ docker pull <docker 계정명>/<이미지명>:<버전>

다운로드가 끝나면 이 이미지로 도커 컨테이너를 실행한다. 정상적으로 실행되고 있는지, 조금 켜져 있다가 꺼지지는 않는지, EC2 터미널을 끈 뒤에도 서버가 유지되고 있는지 확인한다.

EC2에서 나가기

$ exit

'Web' 카테고리의 다른 글

EC2 포트 열기  (2) 2021.03.24
Docker 시작하기  (0) 2021.03.23
소셜로그인 - kakao API  (0) 2021.03.14
RESTful API  (0) 2021.03.01
Style We 프로젝트 이미지 2  (0) 2021.02.24