상세 컨텐츠

본문 제목

Node.js 웹앱의 도커라이징

Computer Science/DevOps

by Yongari 2023. 1. 6. 22:33

본문

 

이 예제는 Node.JS 앱을 Docker에 넣는 방법을 알려줍니다. 이 포스팅은 공식문서 내용을 그대로 압축한것 뿐입니다. 

 

 

Node.js 앱 생성

1. package.json 파일 생성

npm 라이브러리를 설치하기 위한 package.json 파일을 생성한 뒤 "npm install"을 시작해줍니다. 

 

 

커맨드 순서

touch package.json
다음 내용 삽입

이후 npm install 실행

{
  "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"
  }
}

 

 

 

2. Express.js를 이용한 웹앱 스크립트 작성

'use strict';

const express = require('express');

// 상수
const PORT = 8080;
const HOST = '0.0.0.0';

// 앱
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});

 

여기까지하면  javascript 설정은 끝났습니다.

이제 Docker파일을 작성하면 됩니다.

 

3. Dockerfile 생성 및 내용 작성

touch Dockerfile

 

 

FROM node:16

# 앱 디렉터리 생성
WORKDIR /usr/src/app

# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./

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

# 앱 소스 추가
COPY . .

# EXPOSE 지시어를 사용해서 docker 데몬에 매핑 
EXPOSE 8080

# 런타임을 정의하는 CDM로 서버를 구동하는 스크립트 실행 
CMD [ "node", "server.js" ]

 

4. .dockerignore 파일 생성 및 내용 작성

도커이미지에 로컬 모듈과 디버깅 로그를 복사하는 것을 막아서 이미지내 설치한 모듈을 덮어쓰지 않게함

node_modules
npm-debug.log

 

 

5. 도커 이미지 빌드

 

Dockerfile과 package.json, sever.js가 모두 있는 폴더로 이동합니다.

그리고 다음 명령어로 도커 이미지를 만들어줍니다. -t 옵션은 이미지에 태그를 추가할 수 있는 옵션입니다.

docker build . -t <your username>/node-web-app

#예시
docker build . -t node-test/node-web-app

진짜 <your username> 에를 입력하시면 안돼구요  예시와 같이 원하시는 컨테이너 이름으로 만들어주시면 됩니다.

 

6. Docker image 확인

$ docker images

# 예시
REPOSITORY                      TAG        ID              CREATED
node                            16         1934b0b038d1    5 days ago
<your username>/node-web-app    latest     d64d3505b0d2    1 minute ago

 

7. Docker image 를 기반으로 컨테이너 실행

# run 도커 이미지를  기반으로 컨테이너를 생성하고 실행
# -d 분리모드 실행
# -p 포트 옵션 (공개포트:컨태이너 내 비공개포트)
docker run -p 49160:8080 -d <your username>/node-web-app

 

8. 도커 로그 확인 및 접속 

# 컨테이너 아이디를 확인합니다
$ docker ps

# 앱 로그를 출력합니다
$ docker logs <container id>

# 예시
Running on http://localhost:8080



# 컨테이너에 들어갑니다
$ docker exec -it <container id> /bin/bash

 

9. 서버 구동확인

curl -i localhost:49160

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
Date: Mon, 13 Nov 2017 20:53:59 GMT
Connection: keep-alive

Hello world



 

추후 nodejs를 기반으로 docker로 만들때 내용을 좀 더 추가할 예정입니다. 위 내용은 공식홈에 그대로 있습니다. 

 

출처 : https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/ 

 

Node.js 웹 앱의 도커라이징 | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

'Computer Science > DevOps' 카테고리의 다른 글

git 명령어 모음 및 기초 정리  (0) 2023.03.03

관련글 더보기