AI 웹 개발 과정/Docker

django 프로젝트 docker 사용하여 ec2 배포까지

만 기 2022. 7. 29. 15:43

 

1. django 프로젝트 폴더에 Dockerfile 생성하기

 

Dockerfile

FROM python:3.8-alpine
ENV PYTHONDONTWRITEBYTECODE=1   
ENV PYTHONUNBUFFERED=1

# alpine 리눅스 패키지 업데이트
RUN apk update
# 필요한 패키지 추가
RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev 

# .txt 파일을 컨테이너의 다음 경로에 복사한다.
COPY requirements.txt /usr/src/app/
# 작업 경로
WORKDIR /usr/src/app
# 경로에서 복사한 파일 실행
RUN pip install -r requirements.txt

# 현재 폴더에 있는 파일들을 컨테이너의 해당 경로에 복사한다.
COPY . /usr/src/app/

django 프로젝트에서는 Dockerfile 에 

ENV PYTHONDONTWRITEBYTECODE=1   
ENV PYTHONUNBUFFERED=1

를 추가해줘야한다.

 

* 참조

https://docs.docker.com/samples/django/

 

Quickstart: Compose and Django

 

docs.docker.com

 

 

2. docker image build 

docker build -t dnwnmin/docker-ec2:version1 .

 

 

3. docker hub login 하기

docker login

 

 

4. docker hub 에 push하기

docker push dnwnmin/docker-ec2:version1

 

 

5. docker hub 에서 생성되었는지 확인하기

 

 

6. AWS ec2 생성

1) ec2 name : docker-ec2

2) os : Amazon Linux 2 AMI

3) 인스턴스 유형 : t2.micro

4) 키페어 선택

5) 보안그룹 규칙 추가

  • ssh - TCP - 22 
  • 사용자지정 TCP - 80 - 0.0.0.0/0 , ::/0
  • 사용자지정 TCP - 8000 - 0.0.0.0/0 , ::/0

 

 

7. puttygen 으로 keypair 파일 속성 변경

1) Load 눌러서 인스턴스 키페어 로드하기 (확장자all로 변경해야함)

2) Save private key

3) 기존 키페어 이름과 동일하게해서 저장

 

 

8. putty 를 사용하여 인스턴스에 연결

1) Session 작성

  • Host Name 형식은 ec2-user@퍼블릭 IPv4 DNS 로 넣어준다. Port 는 22
  • ec2-user 부분은 인스턴스 AMI 에 따라 다르다.
    • Amazon Linux 2 또는 Amazon Linux AMI의 경우 사용자 이름은 ec2-user입니다.
    • CentOS AMI의 경우 사용자 이름은 centos 또는 ec2-user입니다.
    • Debian AMI의 경우 사용자 이름은 admin입니다.
    • Fedora AMI의 경우 사용자 이름은 fedora 또는 ec2-user입니다.
    • RHEL AMI의 경우 사용자 이름은 ec2-user 또는 root입니다.
    • SUSE AMI의 경우 사용자 이름은 ec2-user 또는 root입니다.
    • Ubuntu AMI의 경우 사용자 이름은 ubuntu입니다.
    • Oracle AMI의 경우 사용자 이름은 ec2-user입니다.
    • Bitnami AMI의 경우 사용자 이름은 bitnami입니다.

2) 변환한 키페어 넣기

3) 오픈을 누르면 창이 열리고 인스턴스에 연결된다.

 

 

9. ec2에 docker 설치하기

1) docker 설치

sudo yum update -y
sudo amazon-linux-extras install docker -y

2) docker 실행하기

sudo service docker start

3) docker 상태 확인

service docker status

4) sudo 없이 docker 사용하기

sudo usermod -a -G docker ec2-user

# 실행 후에 exit 입력하여 종료 후 재실행 해야한다.

 

 

10. docker-compose 사용하기

1) docker-compose 설치하기

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

2) docker-compose.yaml 작성하기

vi docker-compose.yaml

'a' 눌러서 수정 진행

version: "3.8"
services:
  web:
    image: dnwnmin/docker-ec2:version2
    ports:
      - 80:8000
    working_dir: /usr/src/app
    command: python manage.py runserver 0.0.0.0:8000

'esc' 누르고 :wq 입력해서 저장 후 빠져나온다.

 

3) docker-compose 실행

docker-compose up -d

** docker logs {container_id} 로 에러 내역을 볼 수 있다.

 

 

에러

* DisallowedHost 에러 :

Invalid HTTP_HOST header: '43.200.191.185'. You may need to add '43.200.191.185' to ALLOWED_HOSTS.

docker-compose 실행 후 run은 되어 있는데, ec2 ip 주소로 진입시에 발생한 에러이다.

django 프로젝트 폴더의 settings.py 에 ALLOWED_HOSTS 항목에 ec2 ip 주소를 추가해주어 해결 할 수 있었다.

ALLOWED_HOSTS = ['43.200.191.185']

 

 

* python: can't open file 'manage.py': [Errno 2] No such file or director  에러 :

docker-compose를 실행했지만 run이 되지않았다. docker logs {container_id} 로 에러를 확인 할 수 있었고 경로에 문제가 있을때 발생하는 에러인것을 알았다.

version: "3.8"
services:
  web:
    image: dnwnmin/docker-ec2:version2
    ports:
      - 80:8000
    working_dir: /usr/src/app
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./:/usr/src/app

docker-compose.yaml 파일의 volumes ./ 경로가 문제였던것 같다. 일단은 실습 단계라 volumes 을 지워줘서 실행은 성공했지만 정확한 원인과 이유를 찾아내서 기록해야한다.

'AI 웹 개발 과정 > Docker' 카테고리의 다른 글

django - docker - postgreSQL  (0) 2022.08.09
docker 명령어  (0) 2022.08.08
Docker 실무 - 3주차  (0) 2022.07.11
Docker 실무 - 2주차  (0) 2022.07.10
Docker 실무 - 1주차 [image, container, registry, 실행, 공유]  (0) 2022.07.09