도커 이미지를 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 |