Docker 컨테이너 배포하기 - 수동 배포
1. 배포 프로세스 & 프로바이더
1) 리모트 서버 설정
2) SSH 연결
3) 로컬 호스트 머신에서 도커 이미지 푸시
4) 리모트 호스트에서 컨테이너 실행 후 웹에 포트 노출
5) 리모트 서버, 머신 찾기 ~ 대표적인 프로바이더 : AWS, Azure, Google Cloud Platform
2. AWS EC2를 리모트 서버로 활용
1) 인스턴스 생성
2) 가상 공개 클라우드와 보안 그룹 생성, 포트 노출을 보안 그룹에 구성
3) SSH를 통해 인스턴스에 연결
3. 프로덕션에서 바인드마운트
- 프로덕션은 로컬 호스트 머신에 있지 않고 리모트 머신에 있고, 컨테이너는 스탠드얼론으로 작동하며 리모트 머신의 환경과 독립적이여야 한다.
이미지를 통해 컨테이너를 실행하면 애플리케이션에 필요한 모든 것을 얻을 수 있어야 된다. 빌드되는 이미지에는 소스 코드와 필요한 애플리케이션의 모든 환경이 들어가며 그렇기 때문에 바인드 마운트가 아닌 COPY로 빌드하는 것이다.
도커 컴포즈를 사용하는 경우 다중 컨테이너를 사용하며 바인드 마운트를 사용할 수 있다.
4. EC2 인스턴스 생성
1) 리모트 머신 운영체제 결정
2) 인스턴스 유형 결정
3) 보안 그룹 선택
4) SSH 연결을 위해 키 페어가 필요하다 ~ 키는 pem 형식
SSH : 로컬 머신의 터미널 등을 통해 리모트 머신에 연결하는 프로토콜
~ 맥이나 리눅스에서는 기본으로 제공하지만 윈도우에서는 WSL2를 설정해야 한다. 또는 PuTTY
pem 키 연결 명령 : chmod 400 KEYPAIR NAME
~ change mode
~ 4 : 읽기, 2 : 쓰기, 1: 실행 -> 6 : 읽기/쓰기, 7 : 읽기/쓰기/실행
~ 숫자의 순서대로 사용자/그룹/전체 : 400 ~ 사용자만 읽기 권한
cf) PuTTY는 이 단계를 건너 뛸 수 있음
인스턴스 연결 명령어를 통해 로컬과 리모트 머신 연결 ~ 해당 터미널은 리모트 머신에서 실행하는 터미널이 된다.
5. 리모트 머신에 도커 설치하기
1) sudo yum update -y : 리모트 머신의 모든 필수 패키지 설치
2) sudo yum install docker -y: 도커 설치
3) sudo service docker start : 도커 시작
sudo : root 사용자 권한으로 명령 실행
4) 도커 명령
cf) 다른 프로바이더를 사용하고 싶은 경우
https://docs.docker.com/engine/install/
서버란 참고하기
6. 로컬 이미지를 클라우드로 푸시하기
1) 소스 코드를 배포 : 로컬에 있는 프로젝트 폴더의 모든 파일을 리모트로 복사해 리모트에서 이미지 빌드 및 컨테이너 실행 ~ 비효율적
2) 로컬에서 이미지를 빌드한 후 그 이미지를 리모트 머신에 배포
- 도커 허브에 레포지토리 생성
- 로컬에서 도커 허브에 이미지 푸시
빌드 전 .dockerignore에 다른 파일과 *.pem 추가 : 보안
docker push 도커허브 아이디/ 레포지토리:tagname
푸시할 때 터미널에서 도커 허브에 로그인이 되어있어야 한다.
- An image does not exist locally with the tag ~ docker image tag 복사할 이미지:태그 도커허브아이디/레포지토리:태그로 이미지를 새로 복사한 후 푸시해야 한다(로컬에 아이디/레포지토리를 이름으로 한 이미지가 생성된다). 도커허브의 레포지토리는 로컬 이미지와 이름이 같아야한다.
7. 앱 실행 & EC2에서 게시하기
- 리모트에서 시작하기 : sudo docker run -d --rm -p 80:80 IMAGE NAME
- 원격에서 실행된 컨테이너의 노출된 포트에 접속하기 : EC2의 IPv4 퍼블릭 IP 사용, 커스텀 도메인을 사용할 수 있다.
- 기본적으로 EC2 인스턴스는 웹과 연결되어있지 않다. ~SSH 사용자만 엑세스 가능
- 보안 그룹의 기본 역할 : 인스턴스에 허용되는 트래픽 제어, 아웃바운드 규칙
~ 다른 인스턴스 대기열에서 오는 트래픽 제어
모든 아웃바운드 트래픽이 허용되는 현 보안 그룹 규칙 상 이미지 다운로드가 가능
- 인바운드 규칙 : 해당 인스턴스의 대기열(큐)에 허용된 모든 트래픽 제어 ~ 인바운드 규칙에서 어용하는 포트로만 EC2에 접근할 수 있다. 예제의 80번 포트에서는 애플리케이션이 포트 수신대기 중이지만, 리모트 머신은 해당 포트를 규칙에서 허용하고 있지 않기 때문에 차단 중이다. -> 애플리케이션의 포트를 규칙에서 허용해줘야 한다.
인바운드 규칙 : HTTP 프로토콜을 선택하면 포트 80이 기본적으로 선택된다. + Anyware IPv4를 선택
-> EC2의 퍼블릭 IPv4 주소를 통해 애플리케이션에 엑세스할 수 있다.
8. 컨테이너/ 이미지 관리 & 업데이트
1) 리모트 머신에 코드 변경사항 푸시하기
-> 이미지 재빌드 -> 도커 허브 푸시 -> 리모트에서 이미지 다시 받아 컨테이너 재실행
리모트 머신의 이미지는 최신 버전을 수동으로 가져와야 한다.
9. 수동 배포 방식의 단점
보안과 리모트 머신에 대한 책임을 가져야 한다. 네트워크, 운영체제, 보안 그룹 관리에 대한 실력을 갖추고 SSH를 통한 배포 절차를 거쳐야 한다.
10. 관리형 서비스
AWS ECS. 컨테이너 관리 서비스를 사용하면 수동으로 배포할 필요가 없고, 도커 명령을 사용하지 않는다.
'개발공부 > Docker & Kubernetes 실전 가이드 강의' 카테고리의 다른 글
Udemy : Docker & Kubernetes 실전 가이드 (8) (0) | 2023.04.13 |
---|---|
Udemy : Docker & Kubernetes 실전 가이드 (7) (0) | 2023.04.12 |
Udemy : Docker & Kubernetes 실전 가이드 (6) (0) | 2023.04.11 |
Udemy : Docker & Kubernetes 실전 가이드 (5) (0) | 2023.04.10 |
Udemy : Docker & Kubernetes 실전 가이드 (4) (0) | 2023.04.10 |