뉴질랜드 다이어리(NZ Diary) 라빠

Docker 따라하기 #3 본문

개발

Docker 따라하기 #3

Donochi 2019. 9. 4. 09:01

지금까지 Docker 기본도 익혔고, 실제 Dockerfile 도 만져봤으니 이번에는 Nginx 가 아닌, Node.js 서버를 이용한 간단한 웹앱을 만들어보겠습니다. 웹앱이라고 해봐야, 역시 Hello World 수준이지만, 이글은 Node.js 나 Express 에 대한 글이 아니므로, 이정도면 충분하다고 생각합니다.

개발환경 만들기

Docker 를 이용하는 장점은 바로 작업환경을 만들기 편하다는 점이죠. 즉, 어떤 호스트를 사용중이건 Docker 만 정상적으로 설치되어있다면 바로 개발환경이 완료된 상태로 보면 됩니다.

Docker 설치는 이전글(Docker 따라하기 #1)을 참고하세요.

Node.js 웹앱 만들기

원하는 작업 디텍토리를 만듭니다.

$ mkdir node-web-app
$ cd node-web-app

Node web app 의 package.json 파일을 아래와 같이 만들어줍니다.

{
  "name": "node_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.3"
  }
}

package.json 을 만드는 방법은 두가지가 있습니다.

  1. npm init 을 이용하는 방법
  2. 직접 파일을 만드는 방법

Express 를 이용하여 Web app 을 정의합니다.

'use strict';

const express = require('express');

const app = express();
app.get('/', (req, res) => {
  res.send('Hello Engineers\n');
});

app.listen(8080, '0.0.0.0');
console.log(`Node Web App is Running on http://0.0.0.0:8080`);

이렇게 하여, 'Hello Engineers' 를 리턴하는 간단한 Web App 이 만들어졌습니다.

Docker Image 만들기

Dockerfile 만들기

Nginx 를 이용한 Docker image 와 대부분 비슷한 방식으로 이루어집니다.

#node:8 을 베이스 이미지로 사용합니다.
FROM node:8 

#이미지내에서의 작업 디렉토리를 설정해줍니다.
WORKDIR /usr/src/app 

#package.json 파일을 내부로 복사합니다.
COPY package.json . 

#웹앱의 Dependency 를 설치해줍니다.
RUN npm install 

#앱의 구동파일을 복사합니다.
COPY server.js . 

#앱을 구동합니다.
CMD [ "npm", "start" ] 

Docker image 만들기

아래의 커맨드를 통해서 Docker image 를 만들어줍니다.

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

Web app 구동하기

Docker image 구동하기

아래의 커맨드를 통해서 Docker image 를 구동합니다.

$ docker run -d -p 30000:8080 <username>/node-web-app

정상동작 확인

브라우저에서 http//localhost:30000 으로 접속해보거나, CURL 을 이용하여 확인합니다.

$ curl -i localhost:30000

자 이제 나만의 웹앱(웹 서비스)가 만들어졌습니다. 원하시는 기능이 있으면, Express 를 이용해서 간단하게 기능을 추가하면 되겠죠??

위의 모든 진행을 한번 살펴보시죠 ^^

과정

node image 를 받아두지 않아서, 시간이 좀 길어졌네요;;
server.js 에 오타가 하나 있었네요;; 문제를 파악하고, 해결하는 과정도 살펴보세요~^^

참고한 글들

Dockerizing a Node.js web app