Docker 003 | Docker 서버에 배포하기

13396 단어 dockerdocker

Docker 서버 배포

1. 준비 사항

1) EC2 인스턴스 (AWS EC2 전반부 참고) & 서버 연결

도커 이미지를 EC2 인스턴스에 등록시키는 방법

  • 인스턴스 만들고 삭제 안하고 1년동안 돌리면 요금청구되니 결제없애기

  • 장고는 tcp로 받아줘야 하기 때문에 (8000으로 띄워서) TCP로 설정해주고 8000 입력

  • 그 다음 이 창이 뜰텐데, 이 KEY PAIR이 있어야 서버에 접속이 가능
  • 새 키 생성 한 다음, 이름 정해주면 파일이 다운로드 되는데 이 파일이 있어야 접속이 가능하기에 무조건 지우면 안됨

=> 인스턴스 잘 생성됨

  • 이때 서버 생성되는 동안 해야 할 것 : 인스턴스 아이디 복사해 ELASTIC IPs로 넘어가기

  • lastic IP 받기
    (이유 : ec2 는 서버 끄고 켜질 때마다 IP주소가 바뀜, 그래서 얘 받아놓으면 유지가 ㅇㅇ)

Network & Security > Elastic IPs

  • Allocate Elastic IP address

  • Allocate

  • 아이피 할당 받은 후

  • Associate Elastic IP address

  • Instance > 아까 생성된 인스턴스 선택

  • Associate (하단의 연결)

  • 이 아이피는 이제 인스턴스에 연결이 완료된 것

  • SSH 연결하기 !!
    ssh ubuntu@아까_받은_Elastic_IP -i 다운받은_PEM_FILE

=> 계속 거부돼서 짱났었는데

If you are on Public Network, Firewall will block all incoming connections by default. check your firewall settings or use private network to SSL
=>라고 한다..! 도서관이라서 공용 와이파이라 되지 않는 상황인가보다

(+) => https://victorydntmd.tistory.com/62
이걸로 시도하기

==> 해결 ! 잘 연결이 된다

2) Docker Hub에 등록된 이미지


2. 서버 세팅

1) Docker 설치

 curl -fsSL https://get.docker.com | bash

2) Docker Compose 설치
=> 도커 편하게 이용하게 도와주는 아이

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # docker-compose 바이너리 다운로드

sudo chmod +x /usr/local/bin/docker-compose # docker-compose 바이너리에 실행 권한 부여

=> 다운받은 도커 컴포즈에 실행권한 주는 기능

우분투는 파일 다운받는다고 실행가능한게 아니라 실행권한아이도 설정해줘야 한다

3) 앱 설치 폴더 지정
=> 도커 콤포즈 파일이 들어가있는 폴더

sudo mkdir /opt/django-app
cd /opt/django-app

=> 도커의 경우 하나의 폴더에 하나의 파일만 두는 것을 이상적으로 여김 & cd 통해 디렉토리로 이동

  1. docker-compose.yml 생성
vi docker-compose.yml

그럼 이런창 생긴다

(=> 이 창에서 나가기 :q! 입력)

version: "3.9"
services:
 db:
   image: postgres
   environment:
     - POSTGRES_DB=${DB_NAME}
     - POSTGRES_USER=${DB_USER}
     - POSTGRES_PASSWORD=${DB_PASSWORD}
 web:
   image: DockerHubId/django-app
   environment:
     - DB_NAME=${DB_NAME}
     - DB_USER=${DB_USER}
     - DB_PASSWORD=${DB_PASSWORD}
     - DB_HOST=db
     - DEBUG=${DEBUG}
   ports:
     - "8000:8000"
   depends_on:
     - db
  • 저 내용을 그대로 터미널에 복사 & 붙여넣기 할 경우 띄어쓰기 문제가 발생할 수 있음
  • 따라서 pastebin.com 등의 서비스에 업로드후 wget 사용 추천
sudo wget https://pastebin.com/raw/pasteId -O docker-compose.yml

wget: invalid option -- '0'
Usage: wget [OPTION]... [URL]...
Try `wget --help' for more options.
=> -0 아니고 -O (영어 대문자 'O' 임)

cat docker-compose.yml => 명령어 치면 잘 붙여졌는지 확인 가능

  1. .env 파일 생성

=> 도커는 환경변수 이용하고자 할 때 달러+중괄호로 사용 (%{})
=> 환경변수는 같은 파일 안에 .env 파일 있으면 자동으로 불러와짐

1) env 파일 만들기

vi .env

2) 우분투랑 사용자는 권한이 없어서 수도로 권한 넘겨주기

sudo vi .env

3) 인서트 키 눌러서 (i) 인서트 모드로 전환 & 아래 내용 복붙

DB_NAME=django
DB_USER=django
DB_PASSWORD=django
DEBUG=False

=> esc 키 누르기 (인서트 모드 끝내기)
=> :wq 입력해서 저장하고 빠져나와주면 됨

  1. 아까 복붙한 compose.yml 에서
version: "3.9"
services:
 db:
   image: postgres
   environment:
     - POSTGRES_DB=${DB_NAME}
     - POSTGRES_USER=${DB_USER}
     - POSTGRES_PASSWORD=${DB_PASSWORD}
 web:
   image: DockerHubId/django-app
   environment:
     - DB_NAME=${DB_NAME}
     - DB_USER=${DB_USER}
     - DB_PASSWORD=${DB_PASSWORD}
     - DB_HOST=db
     - DEBUG=${DEBUG}
   ports:
     - "8000:8000"
   depends_on:
     - db

=> image: DockerHubId/django-app

부분에서 저 앞에 도커허브아이디부분에 내 아이디를 등록해줘야 하므로 수정작업 필요

1) sudo vi docker-compose.yml

  • 명령자 권한으로 파일로 이동

2) 인서트 모드로 변환 후 도커허브아이디 부분에 자기 아이디 넣기

  • 마찬가지로 저장하고 빠져나와야 하니깐 wq로 빠져나오기
  1. DB 최초 실행 (db 생성, 사용자 등록 등 진행)
sudo docker-compose up db

완료되면 컨트롤 c로 중지

  1. 잘 작동 되는지 테스트
sudo docker-compose up
  • 장고앱 다운 등등..

==>내IP:8000 접속 되는지 확인

  1. 백그라운드 모드로 전환
sudo docker-compose up -d

ssh: connect to host 13.125.77.89 port 22: Connection timed out

  • 그동안 계속해서 인스턴스 연결이 안되는 상황이었어서 계속 포기하고 있었다.

ssh: connect to host 13.125.77.89 port 22: Connection timed out

  • 계속 이렇게 떴음

그래서 인스턴스 > 하단의 '모니터링' > 세부 모니터링

눌러서 확인해보면 자신이 왜 연결이 안되어있는지 알려준다
이때 나의 경우는

현재 연결된 보안 그룹에 포트 22이(가) 열려 있지 않습니다

였음 그래서 이 포트 22는 어떻게 추가해줘야 하냐면

이 보안그룹 링크 클릭해주면

이렇게 뜬다 (에러가 났을 당시에는 규칙이 5개였음)

그러면 맨 오른쪽에 EDIT INBOUND RULES를 누르고 2개의 규칙을 만들어야 한다

1) 규칙 추가 - SSH 설정 - 저 돋보기 눌러서 0.0.0.0/0 선택

2) 규칙 추가 - SSH 설정 - 돋보기 눌러서 ::/0 선택

해주면 22포트가 성공적으로 연결된거고 잘 접속이 된다

좋은 웹페이지 즐겨찾기