► 간단한 Node.js 정리
▹ Node.js: JavaScript를 사용하여 서버 측 프로그램을 만들기 위한 플랫폼
▹ npm init : package.json 파일 생성 명령어
▹ package.json : 프로젝트 정보를 정의하고 프로젝트에서 사용하는 모듈 및 라이브러리의 종속성을 관리하는 데 필요한 정보를 포함합니다.
▹ npm install : 필요한 모듈을 설치하는 명령
▹ 필요한 모듈을 설치하려면 package.json 파일 읽기 > package.json 파일 필요
▹ Express.js: Node.js용 웹 프레임워크
► 간단한 Node.js 웹 애플리케이션을 생성한 후 이를 위한 Docker 이미지를 생성하고 컨테이너로 실행합니다.
1. Node.js 앱 만들기
▹ 디렉토리 생성 > 애플리케이션과 종속성을 알려주는 package.json 파일을 만듭니다.
{
"name": "docker_web_app", // 패키지의 이름
"version": "1.0.0", // 패키지의 버전
"description": "Node.js on Docker", // 패키지의 설명
"author": "First Last <[email protected]>", // 패키지 작성자
"main": "server.js", // 패키지의 주요 파일
"scripts": {
"start": "node server.js" // npm start 명령을 실행할 때 실행할 스크립트
},
"dependencies": { // 패키지의 의존성 모듈 목록
"express": "^4.16.1" // express 모듈과 버전 정보
}
}
2. npm 설치 실행
3. Express.js 프레임워크로 웹 앱을 정의하는 server.js를 생성합니다.
'use strict';
// express 모듈 불러오기
const express = require('express');
// 상수
const PORT = 8080; // 포트 번호
const HOST = '0.0.0.0'; // 호스트 주소
// 앱
const app = express(); // Express 앱 인스턴스 생성
app.get('/', (req, res) => { // HTTP GET 요청에 대한 라우터 등록
res.send('Hello World'); // 응답으로 'Hello World' 문자열 전송
});
// HTTP 서버 실행
app.listen(PORT, HOST, () => {
console.log(`Running on http://${HOST}:${PORT}`); // 서버 시작 로그 출력
});
4. Dockerfile 빈 파일 생성
▹ 윈도우: 새 항목 -ItemType 파일 도커파일
5. Dockerfile을 열고 내용을 입력하십시오.
FROM node:16 # Docker Hub에 있는 node의 최신 LTS(장기 지원) 버전인 16을 사용
# 앱 디렉터리 생성
WORKDIR /usr/src/app # 애플리케이션의 작업 디렉터리
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./ # 현재 디렉토리에서 package.json이나 package-lock.json 파일을 모두 복사
RUN npm install # 앱 의존성 설치
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --omit=dev
# 앱 소스 추가
COPY . . # 현재 호스트 머신의 모든 파일과 디렉터리를, 도커 이미지 내부의 현재 작업 디렉터리로 복사
# 컨테이너를 실행시 실행
EXPOSE 8080 # 도커 컨테이너 포트 8080번
CMD ( "node", "server.js" ) # node server.js 명령어가 실행
# server.js 파일이 Node.js로 실행되며, 8080번 포트로 들어오는 HTTP 요청을 처리
6. dockerfile과 동일한 디렉터리에 .dockerignore 파일을 생성합니다.
▹ .dockerignore : Dockerfile에 복사할 필요가 없는 파일 또는 디렉터리를 지정하는 파일입니다.
▹ Docker 이미지 크기를 줄일 수 있습니다.
node_modules # Node.js 애플리케이션에서 사용되는 패키지들이 설치되는 디렉토리
# 로컬 컴퓨터에서 의존성 패키지를 설치했으므로, 도커 이미지 빌드 시에 다시 설치할 필요가 없음
npm-debug.log # npm 명령어를 실행할 때 발생하는 디버그 로그
7. Dockerfile이 있는 디렉터리 > Docker 이미지 빌드(아래 명령 입력)
docker build . -t <your username>/node-web-app
8. Docker 이미지 확인
$ docker images
# 예시
REPOSITORY TAG ID CREATED
node 16 1934b0b038d1 5 days ago
<your username>/node-web-app latest d64d3505b0d2 1 minute ago
9. 이미지 실행
docker run -p 49160:8080 -d <your username>/node-web-app
10.
# 컨테이너 아이디를 확인합니다
$ docker ps
# 앱 로그를 출력합니다
$ docker logs <container id>
# 예시
Running on http://localhost:8080
11. 앱 테스트: Docker 매핑된 앱 포트 확인
$ docker ps
# 예시
ID IMAGE COMMAND ... PORTS
ecce33b30ebf <your username>/node-web-app:latest npm start ... 49160->8080
# 위 예시에서 Docker가 컨테이너 내의 8080 포트를 머신의 49160 포트로 매핑했습니다.
12. http://127.0.0.1:49160 에 접속하여 서비스가 잘 되는지 확인