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 |