본문 바로가기
Study/Cloud Computing

[Cloud] 마이크로서비스 데이터 관리 (1)

by sumping 2024. 3. 25.

*본 포스트는 성신여자대학교 [클라우드 컴퓨팅] 강의 기반으로 작성됨을 알립니다.

 

 

목차

1. 사전 준비

2. 첫 마이크로서비스 만들기

3. 첫 마이크로서비스 게시


1️⃣ 사전 준비

본 실습에서는 GCP(Google Cloud Platform)에서 VM 인스턴스를 만들어서 SSH 연결을 통해 실습을 진행하였다.

  1. GCP credit 적용하기
  2. Compute Engine → VM 인스턴스 만들기
    1. 부팅 디스크→ 우분투로 설정 (현업에서 많이 사용하는 디스크는 안정적인 CentOS이다.)
    2. 액세스 범위는 “모든 cloud API”에 대한 전체 액세스 허용
    3. 방화벽 모두 허용 (HTTP, HTTPS)
    4. 인스턴스 생성 후에 compute engine API 사용
  3. 인스턴스 초기 설정 (하단의 코드)
  4. 방화벽 설정
    1. 소스 IPv4 범위 : 0.0.0.0/0
    2. 프로토콜 및 포트 : TCP 8080, 3000-3005
//인스턴스 초기 설정
sudo apt update
sudp apt upgrade
sudp apt install build-essentail

2️⃣ 첫 마이크로서비스 만들기

Chapter-2. Hello World 확인하기

  1. 예제 Repository에서 git clone을 한다. (chapter-2, chapter-3)
    1. FlixTube v0.1를 사용. (스트리밍 비디오를 사용자가 웹 브라우저를 통해 보는 간단한 HTTP 서버이다.)
    2. 예제 repository :  https://github.com/bootstrapping-microservices
  2. Node.js 런타임 설치
    1. https://nodejs.org/en/   
    2.  Linux Binaries (x64) LTS version 다운로드 링크를 복사
    3. GCP VM 인스턴스에서 런타임 설치 (하단 코드 참고)
  3. 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

 

외부IP:3000

 

Chapter-3. Video-streaming

  • 스트리밍 비디오늘 브라우저에 전송하기 위한 REST API

//실행코드
cd example-3
npm install
node index.js

 

  • 환경변수를 사용하는 마이크로서비스 설정
    • process.env 필드를 통해 접근 가능

 

//환경변수 설정
export PORT=3000
node index.js

 

Video-Streaming


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

 

docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우 · Issue #116 · occidere/TIL

docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우 상황 docker 설치 후 usermod로 사용자를 docker 그룹에 추가까지 완료 후 터미널 재접속까지 했으나 permission denied 발생 (설치 참고: https://b

github.com