본문 바로가기
놀기/Docker

[Docker] Node.js 웹 앱을 Docker로 실행하기

by Hi~ 2021. 7. 16.

간혹 따라 했는데 안 되는 경우가 있어, 다음의 게시물을 참고하여 작성 후 실행이 되는지 확인하는 관점으로 작성했습니다.

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

 

 

Node.js에 대해 기본적인 이해가 있다고 생각하고...

귀찮으실까 봐 파일도 첨부했음.

 


 

1. Node.js 앱 만들기

먼저 작업할 디렉터리를 하나 만들고, 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"
  }
}

 

위의 파일을 만든 후, npm install을 실행하여 package-lock.json 을 만든다. 이 2개의 파일은 docker 이미지로 복사할 파일이다.

 

실행할 server.js를 만든다. 보면 알겠지만 별 내용은 없고 Hello World를 출력하는 소스코드다.

 

'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}`);

 

 

2. Dockerfile 만들기

아래와 같이 Dockerfile을 만든다. Dockerfile은 다양한 명령과 옵션으로 구성되며 자세한 것은 여기를 참조하자.

 

# 가장 먼저 해야 할 것은 어떤 이미지를 사용해서 빌드할 것인지를 정의하는 것이며 
# 여기서는 Docker Hub에 있는 node의 최신 LTS(장기 지원) 버전인 12을 사용한다.
# (이 게시물 작성 시점에는 16이 최신임)
FROM node:12

# 앱 디렉터리 생성
# 뒷부분의 명령어가 실행될 위치이며 중간에 변경 가능하다.
# "/"로 시작하면 절대 경로가 되며 그렇지 않고 상대 경로로 지정 가능하다.
WORKDIR /usr/src/app

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

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

# 앱 소스 추가
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

 

 

3. .dockerignore 파일 만들기

.dockerignore 파일은 Docker 이미지에 로컬 모듈과 디버깅 로그를 복사하는 것을 막아서 이미지 내에서 설치한 모듈을 덮어쓰지 않게 한다.

 

node_modules
npm-debug.log

 

4. 이미지 빌드

작성한 Dockerfile이 있는 디렉터리로 가서 Docker 이미지를 빌드하는 다음 명령어를 실행한다. "-t (--tag list)" 옵션은 Name과 Tag를 지정할 수 있는 옵션으로 "name:tag" 형식이며 tag는 생략할 수 있다. 참고로 build 옵션은 "sudo docker build --help"로 확인할 수 있다.

 

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

 

"-t nodejs-test:v1" 옵션을 사용할 경우, 아래와 같이 나오는 것을 확인할 수 있다.

 

5. 이미지 실행

이미지 빌드 시, 사용한 name을 사용하여 아래와 같이 실행한다.

 

$ sudo docker run -p 49160:8080 -d <your username>/node-web-app

 

실행 후, 브라우저를 사용하여 확인하면 아래와 같이 서버가 실행되었음을 확인할 수 있다.

 

 

 

Dockerfile
0.00MB
.dockerignore
0.00MB
server.js
0.00MB
package.json
0.00MB

 

 

 

'놀기 > Docker' 카테고리의 다른 글

Docker (도커) 설치 - Ubuntu 20.04  (0) 2021.07.16
Docker (도커)  (0) 2021.07.16

댓글