*본 포스트는 성신여자대학교 [클라우드 컴퓨팅] 강의 기반으로 작성됨을 알립니다.
목차
1. 사전 준비
2. 첫 마이크로서비스 만들기
3. 첫 마이크로서비스 게시
1️⃣ 사전 준비
본 실습에서는 GCP(Google Cloud Platform)에서 VM 인스턴스를 만들어서 SSH 연결을 통해 실습을 진행하였다.
- GCP credit 적용하기
- Compute Engine → VM 인스턴스 만들기
- 부팅 디스크→ 우분투로 설정 (현업에서 많이 사용하는 디스크는 안정적인 CentOS이다.)
- 액세스 범위는 “모든 cloud API”에 대한 전체 액세스 허용
- 방화벽 모두 허용 (HTTP, HTTPS)
- 인스턴스 생성 후에 compute engine API 사용
- 인스턴스 초기 설정 (하단의 코드)
- 방화벽 설정
- 소스 IPv4 범위 : 0.0.0.0/0
- 프로토콜 및 포트 : TCP 8080, 3000-3005
//인스턴스 초기 설정
sudo apt update
sudp apt upgrade
sudp apt install build-essentail
2️⃣ 첫 마이크로서비스 만들기
Chapter-2. Hello World 확인하기
- 예제 Repository에서 git clone을 한다. (chapter-2, chapter-3)
- FlixTube v0.1를 사용. (스트리밍 비디오를 사용자가 웹 브라우저를 통해 보는 간단한 HTTP 서버이다.)
- 예제 repository : https://github.com/bootstrapping-microservices
- Node.js 런타임 설치
- https://nodejs.org/en/
- Linux Binaries (x64) LTS version 다운로드 링크를 복사
- GCP VM 인스턴스에서 런타임 설치 (하단 코드 참고)
- Example-1의 루트(/)에서 get 요청에 대한 응답을 웹 브라우저에서 확인한다. (자신의 외부 IP:3000)
//Node.js 런타임 다운로드
wget https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.xz
//압축해제 및 설정
tar xf node-v20.11.1-linux-x64.tar.xz
cd node-v20.11.1-linux-x64
sudo cp -Rvi ./{bin,include,lib,share} /usr/local/
//npm 설치
cd example-1
npm install
Chapter-3. Video-streaming
- 스트리밍 비디오늘 브라우저에 전송하기 위한 REST API
//실행코드
cd example-3
npm install
node index.js
- 환경변수를 사용하는 마이크로서비스 설정
- process.env 필드를 통해 접근 가능
//환경변수 설정
export PORT=3000
node index.js
3️⃣ 첫 마이크로서비스 게시
배포를 위한 마이크로서비스의 패키징 전체 그림이다. 마이크로서비스를 하나의 도커 이미지를 패키징하고 이를 도커 허브 컨테이너에 푸시를 하는 과정이다. 이후에 로컬에 도커 이미지가 없어도 도커 허브 컨테이로부터 이미지를 다운받을 수 있다.
1. Docker 설치 및 기본 설정
// 자동 설치 스크립트를 활용한 Docker 런타임 설치
$ sudo wget -qO- https://get.docker.com/ | sh
$ sudo systemctl start docker
$ sudo systemctl enable docker
// 현재 계정을 docker 그룹에 포함
$ sudo usermod -aG docker ${USER}
$ sudo systemctl restart docker
$ sudo systemctl status docker
$ sudo systemctl status containerd.service
2. Dockerfile을 통한 이미지 생성
Dockerfile은 도커 이미지를 만들기 위한 스크립트이다. Dockerfile을 실행하면 각 라인이 도커 이미지로 마이크로서비스와 그 종속성 및 관련 파일을 지정한다.
아래 코드는 예제 Dockerfile로 아래 코드를 통해 Docker 이미지를 생성한다.
FROM node:12.18.1-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY ./src ./src
COPY ./videos ./videos
CMD npm start
3. Docker 이미지 패키징
-t는 이미지의 태그나 이름
--file은 사용할 Docker 파일 이름
마지막 온점(.)은 build context로 기본 참조가 될 디렉토리이다.
//Docker 이미지 패키징
docker build –t video-streaming --file Dockerfile .
//빌드된 이미지 확인
docker image ls
4. 컨테이너에서 마이크로서비스 부팅하기
'docker run' 명령으로 컨테이너에 포함된 도커 이미지를 생성한다.
//컨테이너에서 마이크로서비스 부팅하기
docker run -d -p 3000:3000 video-streaming
//컨테이너 동작 확인
docker container ls
//마이크로서비스 동작 확인
docker logs <container-id>
5. 마이크로서비스 게시하기
- 1) 레지스트리 로그인
- Docker 허브 가입
- VM인스턴스에서 레지스트리 로그인
- 2) 이미지에 태그하기
- 3) 이미지를 레지스트리에 푸시하기
- 4) 레지스트리의 이미지 확인 (Docker 허브)
//로그인
docker login
//이미지 태그
docker tag video-streaming <본인의 repo>/video-streaming:latest
//이미지를 레지스트리에 푸시하기
docker push <본인의 repo>/video-streaming:latest
6. 레지스토리에서 마이크로서비스 부팅하기
개발 환경에 이미지가 없음을 가정하고, 레지스트리에서 이미지를 가져와서 직접 컨테이너를 실행한다. (로컬에 이미지 다운받아서 컨테이너 실행하기)
//컨테이너 삭제
docker ps
docker kill <your-container-id>
docker rm <your-container-id>
//이미지 삭제
docker image rm <your-image-id> --force
//레지스트리로부터 직접 컨테이너 실행
docker run -d -p 3000:3000 <본인의 repo>/video-streaming:latest
🛠️ Trouble shooting
https://github.com/occidere/TIL/issues/116
'Study > Cloud Computing' 카테고리의 다른 글
[Cloud] 마이크로서비스 간의 통신 (2) (0) | 2024.03.29 |
---|---|
[Cloud] 마이크로서비스 간의 통신 (1) (1) | 2024.03.29 |
[Cloud] 마이크로서비스 데이터 관리 (2) (0) | 2024.03.28 |
[Cloud] 마이크로서비스 개요 (0) | 2024.03.24 |
[Cloud] 클라우드 컴퓨팅 개요 (0) | 2024.03.07 |