🧩 DevOps/Docker

[Docker] Docker에 node.js 배포하기

nayoungs 2022. 5. 12. 21:02
728x90

 

 

📌Index

  • 간단한 Node.js 작성해보기
  • Node.js web app으로 Docker image 만들기

 

Node.js란 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다.

이러한 node.js를 docker에 배포해보자.

 



✔️ 간단한 Node.js 작성해보기

먼저 node.js 를 사용하기 위해 저장소를 추가하고 패키지를 설치하자

여기서는 버전16을 사용할 예정이다.

$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

다음으로 실습을 진행할 환경(디렉토리)를 구성하자.

$ mkdir -p node/web
$ cd node/web

 

Getting Started Guide | Node.js (nodejs.org) 을 참조하여 app.js 파일을 작성한다.

 

app.js

const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

변수 hostnameport 값을 가져와서 함수 listen이 실행되는 간단한 코드이다.

require('http')에서 httpnodejs로 웹앱을 만들 수 있는 라이브러리이고,

외부에서 접속이 가능하도록 hostname0.0.0.0 로 설정한다.


다음으로 app.js을 실행한다.

$ node app.js

접속 확인

 

 

✔️ Node.js web app으로 Docker image 만들기

Dockerizing a Node.js web app 을 따라 진행해보자

Dockerizing 이란 docker로 이미지를 만드는 것으로, docker화 시킨다, 이미지를 만다는 의미이다.

 

먼저 여기 를 참조하여 package.json을 작성하자. 파일 이름은 package.json 이어야한다.

 

package.json

{
  "name": "docker_web_app", #app의 이름
  "version": "1.0.0", #app의 버전
  "description": "Node.js on Docker",
  "author": "First Last <first.last@example.com>", #app 만든 사람
  "main": "server.js", #main이 되는 자바스크립트 파일
  "scripts": { #실행하는 방법 기술
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

dependencies 는 설치할 외부 패키지로 express 는 nodejs의 웹 프레임워크이다.

 

다음으로 server.js 파일을 작성한다.

 

server.js

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

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

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

npm install 명령은 package.jsondependencies 를 참조하여 패키지를 설치한다.

(여기서는 express)

npm install 명령을 실행하면 패키지들의 목록을 가지고 있는 package-lock.json 파일이 생성된다.

$ nmp install

node.js 는 무조건 node_modules 라는 디렉토리에 패키지를 설치한다.

따라서node_modules 는 반드시 노출되면 안된다.

 

다음으로 .dockerignore 파일을 작성하자. 이때, node_modules 는 반드시 제외되어야한다.

 

.dockerignore

node_modules/
Dockerfile
.dockerignorefile

다음으로 이미지를 빌드하기 위한 Dockerfile을 작성하자.

 

Dockerfile

FROM node:16
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 8080
CMD ["node", "server.js"]

이제 이미지를 빌드하자.

$ docker build -t mynode .

빌드된 이미지 mynode로 실행해보자.

$ docker run -d -p 80:8080 mynode
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
a77ee30d0e92   mynode    "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:80->8080/tcp, :::80->8080/tcp   cool_roentgen

 

접속 확인

 

 

 

728x90