[PROJECT] AIRBNB CLONING #6
도커(Docker)
컨테이너는 소프트웨어를 개발, 배포, 운영하기 위한 단순하면서 빠르고 강력한 방법을 제공해주는 컨테이너 가상화기술 입니다. 이번 블로그에서는 docker image
를 생성하여 Docker Container
를 활용해 배포 해보겠습니다.
Docker
Install Docker
다음 페이지에서 도커를 설치합니다. brew를 통해서도 설치가 가능합니다.
Setting
RDS를 생성하고 RDS mysql 서버에 접속합니다.
mysql -h 'RDS Database Endpoint 주소' -u root -p
그리고 데이터베이스를 생성합니다.
mysql> create database 'DATABASE 이름' character set utf8mb4 collate utf8mb4_general_ci;
데이터베이스를 생성한 후에 RDS 데이터베이스에 맞게 DATABASES
의 정보를 수정합니다.
DATABASES = {
'default' : {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'DATABASE 명',
'USER' : 'DB 접속 계정명',
'PASSWORD' : 'DB 접속 비밀번호',
'HOST' : 'RDS Database Endpoint 주소',
'PORT' : 'DB PORT'
}
}
setting_up.sh 을 생성합니다.
# !/bin/sh
# create conda virtual environment
echo y | conda create -n docker_train python=3.9 && conda activate docker_train
# install dependency packages
pip install -r requirements.txt
# create table
python manage.py migrate
# upload dependency data
python db_upload/db.py
# find server IP Address
echo 'ip주소 입력'
# echo | ipconfig getifaddr en0
# runserver
python manage.py runserver 0:8000
setting_up.sh 을 실행하면 테이블 및 데이터를 생성합니다.
서버에 http request를 보내서 RDS MySQL 서버에 데이터가 잘 들어갔는지 확인합니다.
Create Docker Image
DockerFile 작성
Docker image를 생성하기 위한 Dockerfile
를 현재 프로젝트 폴더 안에 작성합니다.
# 기반이 될 이미지
FROM python:3
# 작업디렉토리(default)설정
WORKDIR /usr/src/app
## Install packages
# 현재 패키지 설치 정보를 도커 이미지에 복사
COPY requirements.txt ./
# 설치정보를 읽어 들여서 패키지를 설치
RUN pip install -r requirements.txt
## Copy all src files
# 현재경로에 존재하는 모든 소스파일을 이미지에 복사
COPY . .
## Run the application on the port 8080
# 8000번 포트를 외부에 개방하도록 설정
EXPOSE 8000
# gunicorn 사용해서 서버를 실행
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "'프로젝트명'.wsgi:application"]
마지막에 gunicorn을 사용해서 서버를 실행하는데 "'프로젝트명'.wsgi:application"
는 python manage.py startproject '이름'
에서 '이름'에 해당하는 내용이 입력되어야 합니다. 그렇지 않으면 gunicorn이 파일을 찾지 못해 다음과 같은 에러를 냅니다.
따라서 다음과 같이 입력해줍니다. 프로젝트 이름은 config입니다. CMD ["gunicorn", "--bind", "0.0.0.0:8000", "config.wsgi:application"]
Build Image
Dockerfile을 이용해 image를 build합니다.
docker build -t 'DockerHub username'/'image name(project name)':'version' 'Dockerfile path' .
예) docker build -t robbins4bos/yhim2:0.1.0 .
Push Image
DockerHub
에 다음의 명령어로 이미지를 푸쉬합니다.
docker push robbins4bos/yhim2:0.1.0
EC2 배포
다음의 과정을 진행합니다.
EC2에 접속해 Docker install
우선 EC2 instance에 접속합니다.
# 생성한 EC2 instance 접속
# get-docker.sh 다운로드
$ curl -fsSL https://get.docker.com -o get-docker.sh
# ll 명령어로 현재 디렉토리에 get-docker.sh 파일 확인
$ ll
# get-docker.sh 실행하여 Dokcer 설치
$ sh get-docker.sh
처음 EC2에 ssh 접속할 때 Permission Error가 발생한다면 다음과 같이 해결합니다.
# 해당 에러는 pem 파일이 너무 많은 권한 설정이 되어있어 발생함
# pem 파일을 최소한의 권한으로 설정
$ sudo chmod 400 'Key 이름'.pem
또는 sudo chmod 666 /var/run/docker.sock
을 입력해 파일의 권한을 666으로 변경해 그룹 내 다른 사용자도 접근 가능하게 변경합니다. 해당 블로그를 참고하였습니다.
Docker Image Pull
docker pull robbisn4bos/yhim2:0.1.0
Docker Container 실행
아래와 같은 명령어를 입력할 시 local에서 image를 먼저 찾아본 뒤, 없으면 DockerHub에서 자동으로 image를 찾습니다. 그 후 곧바로 image를 불러와 명령어가 실행됩니다. (바로 컨테이너를 실행하기 위해선 Pull 명령어가 필요없습니다.)
docker run --name api -p 8000:8000 robbisn4bos/yhim2:0.1.0
--name
옵션을 붙여주어 해당 이름으로 컨테이너를 만든 후에 실행합니다.이미 컨테이너가 생성된 경우 docker run -p 8000:8000 robbisn4bos/yhim2:0.1.0
과 같이 실행합니다.
Error
도커 배포 끄읕~!
도커 배포 꼭 하고 싶어서 멘토님 잡고 여쭤본 흔적...!
짜릿해
Author And Source
이 문제에 관하여([PROJECT] AIRBNB CLONING #6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tritny6516/PROJECT-AIRBNB-CLONING-6저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)