2. 마이크로 서비스 준비
728x90

Azure, Docker, K8S MSA

azure portal 무료(1년?) 등록

azure portal 이 링크에서 무료 등록

azure marketplace 에서 container registry 를 설치

container registry 만들기

access key 에서 사용자 이름, password 복사

프로젝트 생성

my-new-project 생성

사용 스택 : node.js, expressJS

express 설치

cd my-new-project

npm init

npm install express --save

nodemon 설치

cd my-new-project

npm install --save-dev nodemon

프로젝트 폴더 구조

package.json

{
  "name": "my-new-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node ./src/index.js",
    "start:dev": "nodemon ./src/index.js"  // nodemon 은 dev 환경에서만 운영 환경에서 수정한게 바로바로 적용되면 안된다.
  },
  "keywords": [],
  "author": "",
  "license": "MIT",
  "dependencies": {
    "express": "^4.18.2",
    "mongodb": "^5.7.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.1"
  }
}

./src/index.js

const express = require("express");
const fs = require("fs");
const app = express();

const port = 3000;

app.get("/video,(req,res) => {
  const path = "../videos/1234.mp4";
  fs.stat(path,(err,stats) => {
    if(err) {
      console.error("An Error occured")
      res.sendStatus(500)
      return;
    }

    res.writerHead(200, {
      "Content-Length" : stat.size,
      "Content-Type" : "video/mp4"
    });
    fs.createReadStream(path).pipe(res);
  });
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
});
npm install

Dockerfile 생성

FROM node:18-alpine

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --only=production

COPY ./src ./src

COPY ./videos ./videos

CMD npm start

프로젝트 이미지화

cd my-new-project

docker build -t video-streaming --file Dockerfile .          // 마지막 . 이 제일 중요하다.

-t 이미지의 태그나 이름을 부여

--file 도커파일 이름을 지정

. 이 마침표는 build 명령어가 현재 디렉터리를 기준으로 실행하게끔 한다.
docker image list

REPOSITORY                         TAG       IMAGE ID       CREATED        SIZE
video-streaming                    latest    4b7a4c66f2c6   42 hours ago   96.4MB

docker container 생성

생성한 프로젝트가 잘 되는지 테스트하기 위해 docker run 으로 컨테이너 생성 하고 log 확인

docker run -d -p 3000:3000 video-streaming


docker logs -f video-streaming

해당 url 로 접속 시 잘되는지 확인.

이미지 생성 완료 후 Azure Container registry에 push

자기가 생성한 registry에 docker login 을 해야 된다.

위에서 생성한 container registry 에서 access key 로 들어간다.

  1. registry 의 이름이다.
  2. container registry의 주소이다.(여기에 docker login)
  3. login 시 사용할 username
  4. login 시 사용할 password
docker login <2번> --username <3번> --password <4번>

이미지에 태그하기

docker tag video-streaming <2번>/video-streaming:latest

docker tag <existing-image> <registry-url>/<image-name>:<version>
  • existing-image : 자신의 PC 에 생성한 docker image
  • registry-url : 위 이미지의 2번

이미지를 레지스트리에 푸시

docker push <2번>/video-streaming:latest

직접 생성한 2번 주소가 아니라면 실패한다.

레지스트리에서 이미지 확인

첫 서비스 생성 후 레포지토리 등록 완료.

레포지토리에 있는 이미지 실행

기존에 로컬 PC 에 있던 이미지와 컨테이너 삭제를 한다.

삭제를 완료한다면 이번에는 run 명령어를 써서 레포지토리에 있는 이미지 container 를 생성 후 실행

docker run -d -p 3000:3000 <2번>/video-streaming:latest
docker run -d -p <host-port>:<container-port> <registry-url>/<image-name>:<version>

docker yaml

version: '3'
services:
  video-streaming:
    image: video-streaming
    build: 
      context: ./my-new-project
      dockerfile: Dockerfile
    container_name: video-streaming
    ports:
     - "3000:80"
    environment:
      - PORT=80
    restart: "no"

docker-compose.yml 실행

docker-compose up --build
728x90

'아키텍처 패턴 > 마이크로 서비스' 카테고리의 다른 글

3. Azure Storage 설정  (0) 2023.08.15
1. 마이크로 서비스 란?  (0) 2023.07.30