Node.js 웹 앱의 도커라이징

Vorhandenheit ·2022년 2월 16일
0

Docker

목록 보기
3/7

Node.js 웹 앱의 도커라이징

1. 도커라이징이란?

Docker를 사용하여 애플리케이션을 실행하는 데 필요한 모든 항목을 애플리케이션에 포장하고 하나의 패키지(컨테이너)로 제공할 수 있습니다.
요약하면 Dockerizing은 Docker 컨테이너를 사용하여 애플리케이션을 패킹, 배포 및 실행하는 프로세스입니다.

도커라이징을 사용하는 이유

  1. Docker는 사용하기 쉽습니다. 애플리케이션 배포 방식을 단순화하여 소프트웨어의 소스 코드로 배포하지않고 디스크 이미지로 배포합니다.

  2. 재현 가능한 환경을 만들 수 있습니다.
    Docker는 응용 프로그램과 그 기능을 다시 만드는 데 필요한 작업 환경을 만듭니다. 모든 것은 컨테이너에 래핑하면 빌드하는 애플리케이션이 마찰 없이 다른 장치에서 실행됩니다.

  3. Docker 컨테이너는 커널에서 실행되는 샌드박스환경으로 몇초 만에 컨테이너를 만들고 실행할 수 있습니다

2. 도커라이징

node로 3000번 포트에 서버를 열고 화면에 'Hello World!'를 출력하는 노드 앱을 도커 이미지로 만든 뒤 도커 컨테이너로 실행해서 Localhost 5000번 포트로 접속시 화면에 'Hello World!'가 출력되게하기

  • <package.json>
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <first.last@example.com>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

애플리케이션과 의존성을 알려주는 package.json 파일을 생성합니다. 그리고 npm install을 입력합니다.

  • <server.js>
const express = require("express");
const PORT = 3000;
const app = express();
app.get("/", (req, res) => {
  res.send("Hello World");
});

app.listen(PORT, console.log(`Running on http://localhost:${PORT}`))

Express 프레임워크로 웹앱을 정의하는 server.js를 생성합니다. 포트는 '3000'입니다.

  • Dockerfile 파일 생성
    Docker의 이미지를 사용해서 Docker컨테이너 안에 이 앱을 실행할 텐데 먼저 이 앱의 Docker이미지를 생성해야하므로 'Dockerfile'을 생성합니다.
FROM node:latest //node.js최신 버전을 사용합니다.

# 앱 디렉터리 생성
WORKDIR /usr/src/app // 이미지 안에 애플리케이션 코드를 넣기위한 디렉터리를 생성합니다.

# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./ // 이 이미지에는 node.js와 npm이 설치되어있기 때문에 'npm install'로 앱의 의존성을 설치합니다.

RUN npm install 
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --only=production 

# 앱 소스 추가
COPY . . //이미지 내에 앱의 소스코드를 넣기 위해 COPY지시어를 사용합니다.

EXPOSE 3000 //앱이 3000번 포트에 바인딩 되어있으므로 EXPOSE 지시어를 사용해서 docker 데몬에 매핑합니다.
CMD [ "node", "server.js" ] // 서버를 구동하도록 명령어 'node server.js'를 실행시킵니다.
  • .dockerignore 파일 생성
    docker 이미지에 로컬 모듈과 디버깅 로그를 복사하는 걸 방지하기 위함입니다.
node_modules
npm-debug.log
  • 이미지 빌드
    vs code에서 명령어를 입력합니다.
docker build . -t <이름>
  • 이미지 실행
    docker가 컨테이너의 3000번 포트를 local의 5000번 포트로 매핑하였습니다.
    -d 옵션은 데몬으로 실행합니다.(백그라운드 실행)
    -p 옵션은 호스트와 컨테이너의 포트를 연결하는 옵션입니다.
docker run -d -p 5000:3000 hello-world

도커로 이미지를 빌드하고 컨테이너를 생성했을 때, 도커 컨테이너 내부에서는 3000번 포트로 'Hello Worl!'를 화면에 띄워주는 앱이 실행되고
이것을 호스트의 5000번에 매핑해서 사용자가 localhost:5000으로 접근 했을 시
컨테이너의 3000번 포트에서 실행되고 있는 프로그램을 볼 수 있게 됩니다.

출처

https://seohyun0120.tistory.com/entry/Nodejs-%EC%9B%B9-%EC%95%B1%EC%9D%98-%EB%8F%84%EC%BB%A4%EB%9D%BC%EC%9D%B4%EC%A7%95
https://cocoon1787.tistory.com/749

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글