Docker 003 | Docker 서버에 배포하기
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 통해 디렉토리로 이동
- 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 => 명령어 치면 잘 붙여졌는지 확인 가능
- .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 입력해서 저장하고 빠져나와주면 됨
- 아까 복붙한 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로 빠져나오기
- DB 최초 실행 (db 생성, 사용자 등록 등 진행)
sudo docker-compose up db
완료되면 컨트롤 c로 중지
- 잘 작동 되는지 테스트
sudo docker-compose up
- 장고앱 다운 등등..
==>내IP:8000 접속 되는지 확인
- 백그라운드 모드로 전환
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포트가 성공적으로 연결된거고 잘 접속이 된다
Author And Source
이 문제에 관하여(Docker 003 | Docker 서버에 배포하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@myway00/Docker-003-Docker-서버에-배포하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)