본문 바로가기
Develop/Docker

[Node.js] Node.js 애플리케이션을 Docker로 패키징하는 방법

by bellsilver7 2023. 2. 7.
728x90

https://blog.bitsrc.io/lets-dockerize-a-node-express-app-fdba1cf516b2

 

 

Docker는 Windows, Linux 및 MacOS에서 실행되는 오픈 소스 소프트웨어로, 이를 통해 개발자는 애플리케이션과 종속성을 함께 이미지 라는 경량의 독립 실행형 독립형 단위로 패키징할 수 있습니다.

 

Node.js 앱 만들기

프로젝트 설정

Docker는 Windows, Linux 및 MacOS에서 실행되는 오픈 소스 소프트웨어로, 이를 통해 개발자는 애플리케이션과 종속성을 함께 이미지 라는 경량의 독립 실행형 독립형 단위로 패키징할 수 있습니다.

Node.js 앱 만들기

프로젝트 설정

새로운 node-app-with-docker 디렉터리 생성.

$ mkdir node-app-with-docker
$ cd node-app-with-docker

npm으로 프로젝트 초기화

$ npm init -y

express 패키지 설치

$ npm i express

서버 생성

server.js 파일 생성

$ touch server.js

Express 프레임워크를 사용해 간단한 Http 서버 작성 :

  • HTTP 200 “Hello World”를 반환하는 GET 라우트
  • HTTP 404 “Not Found”를 반환하는 폴백 라우트
const express = require('express');

const app = express();

app.get('/', (req, res) => res.send('Hello World!'));

app.all('*', (req, res) => res.sendStatus(404));

app.listen(3000);

console.log(`Application is running on: 127.0.0.1:3000`);

서버를 실행하여 동작 확인

$ node server.js
Application is running on: 127.0.0.1:3000

새로운 터미널을 열어 E2E 테스트

$ curl 127.0.0.1:3000
Hello World

$ curl 127.0.0.1:3000/foo
Not Found

Dockerfile 만들기

Dockerfile는 Docker 이미지를 빌드하는 데 필요한 모든 지침이 포함된 텍스트 파일입니다.

이러한 지침은 명령줄 도구 설치 및 구성, 환경 변수 선언, 로컬 환경에서 파일 복사 등에 사용할 수 있습니다.

Dockerfile 지침 개요

이 프로젝트의 Dockerfile 은 다음과 같습니다 :

  • node:18-alpine 이미지를 내려받는다.
  • 응용 프로그램의 파일을 복사할 app 디렉터리를 만든다.
  • npm을 사용해 package.json 파일에 나열된 의존성을 설치한다.
  • node 유틸리티를 사용해 서버를 시작한다.

Dockerfile 생성

$ touch Dockerfile

Dockerfile 에 아래와 같이 기입합니다. (#으로 시작하는 줄은 주석이며 빌드시 무시해도 됩니다.)

# 기본 이미지 초기화 (Alpine Linux + Node.js v16)
FROM node:16-alpine

# 작업 디렉터리 설정(컨테이너의 파일 시스템에 존재하지 않는 경우 자동 생성)
WORKDIR /app

# 로컬 디렉터리에서 컨테이너 디렉터리로 모든 것을 복사
COPY . .

# 앱의 의존성 패키지 설치
RUN npm install

# 수신 대기 포트 설정
EXPOSE 3000

# CMD 컨테이너 시작시 서버 실행
CMD node server.js

애플리케이션 패키징

이미지 빌드

$ docker build -t node-app .
  • -t : 이미지에 태그 지정. 이름을 지어주는 것.
  • .(점) : 이미지가 빌드 될 Dockerfile 디렉터리 경로.

이미지 빌드 확인

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
node-app     latest    798258798df2   2 hours ago   179MB

컨테이너 실행

$ docker run -d -p 3000:3000 node-app
  • -d : 백그라운드에서 컨테이너를 시작
  • -p : 로컬 환경의 3000번 포트를 컨테이너의 3000번 포트에 연결

마지막으로 동작 확인

$ curl 127.0.0.1:3000
Hello World
$ curl 127.0.0.1:3000/foo
Not Found

 

 

Online Node.js Courses and Books by Razvan Ludosanu | Learn Backend

 

learnbackend.dev

 

728x90

댓글