본문 바로가기
Tools/Docker

Docker | 3주차 서비스 배포하기 (2)

by JUNG씨 2022. 11. 13.

🔍  더 작은 이미지로 배포하기

 

1. docker 이미지는 용량 최적화를 위해 컨테이너 실행에 필요한 최소한의 파일만 들어있는 slim 이미지를 지원

2. 이미지의 태그별 특징

  • buster, jessie, stretch
    • debian에서 만든 linux를 기반으로 만들어진 이미지.
    • buster, jessie, stretch는 os의 codename
    • python:3.8과 python:3.8-buster는 동일. (약 300~350mb)
  • slim
    • 실행에 필요한 환경만 만들어둔 이미지.
    • 이미지가 기본이미지에 비해서는 작다. (약 40~50mb)
    • 보통 python 실행환경에서 가장 많이 쓰이는 이미지.
  • alpine
    • 용량이 작고, 보안에 집중한 alpine-linux 기반으로 만들어진 이미지.
    • 이미지들 중에서 가장 작다. (약 15~20mb)
    • python기준으로 봤을 때, pip install을 할 때 불리한 점이 있다.

3. backend/Dockerfile : 파이썬 버젼에 slim 추가

# python 3.10.8-slim버전 이미지를 사용해 빌드
FROM python:3.10.8-slim

4. docker-compose.yml : postgress와 nginx의 이미지를 alpine 이미지로 지정

postgres:
    container_name: postgres
    image: postgres:14.5-alpine # alpine 이미지를 지정해줍니다.
    
nginx:
    container_name : nginx
    image: nginx:1.23.2-alpine # alpine 이미지를 지정해줍니다.

5. 이미지 용량 변경 비교

변경된 이미지 크기 확인
안쓰는 이미지 정리 => sudo docker image prune -a

 

 

 

🔍  도메인 구매하기

https://www.freenom.com/

 

Freenom - A Name for Everyone

Cost Price Free Special

www.freenom.com

위 홈페이지에서 무료로 도메인 구매하기

 

 

🔍 도메인을 사용해 배포 서버에 접속하기

 

1. freenom에서 nameserver 설정하기

AWS 의 Route 53에 접속해 호스팅 영역을 생성한다.
이 주소들을 nameserver에 입력
freenom 마이페이지에서 nameservers 탭으로 들어가 nameserver를 입력해준다.

2. AWS에서 route53 설정하기

레코드 생성 버튼을 눌러 두개의 레코드를 생성한다. A유형과 CNAME 유형

3. nginx/default.conf 수정하기 : 내가 구매한 도메인을 입력해준다.

server {
  listen 80;
  server_name www.spartacodingclub.cf; # www.spartacodingclub.cf 도메인으로 들어오는 요청을 처리해줍니다.

  location / {
    proxy_pass http://backend:8000/;
  }

  location /static/ {
    alias /static/;
  }

  location /media/ {
    alias /media/;
  }
}

server {
  listen 80;
  server_name spartacodingclub.cf; # www가 없는 url로 요청 했을 때
  return 301 http://www.spartacodingclub.cf$request_uri; # www를 붙인 url로 redirection 해줍니다.
}

4. 도메인 입력해보기

 

 

 

🔍 https 적용하기

 

1. https 란?

  • 웹 서버에서 데이터를 전송하기 위한 http 프로토콜에 보안을 의미하는 secure를 붙여 http 통신을 더 안전하게 할 수 있도록 해주는 프로토콜이다.
  • 보안적인 특성 때문에 배포를 하는 서비스에는 https 필수!!
  • https를 적용하기 위해서는 SSL 인증서를 발급받고 웹서버에서 인증서를 지정해줘야함.

2. SSL 인증서 발급 받기

3. 대상 그룹 설정하기

4. 로드 밸런서 설정하기

5. route53 설정하기 - 레코드 편집하기

6. http 요청을 https로 redirect 하도록 설정하기

7. django settings.py 설정해주기