[Docker] node.js App을 Docker Image로 빌드하기DevOps/Docker2022. 5. 12. 23:17
Table of Contents
728x90
✔️ node.js
Documentation | Node.js (nodejs.org)
두개의 서포트 버전이 존재한다.
LTS : Long Term Support 을 사용한다.
✔️ node.js 설치
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
설치를 위해 저장소를 추가후 설치한다.
vagrant@docker ~ node --version
v16.15.0
✔️ node.js App 개발 환경 준비
const http = require('http');
const hostname = '127.0.0.1';
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}/`);
});
vagrant@docker ~ mkdir node
vagrant@docker ~ cd node
vagrant@docker ~/node mkdir web
vagrant@docker ~/node cd web
✔️ node.js App 실행
vagrant@docker ~/node/web vi app.js
vagrant@docker ~/node/web cat app.js
const http = require('http');
const hostname = '0.0.0.0'; # 모든 ip에서 실행 가능하도록 변경
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}/`);
});
vagrant@docker ~/node/web node app.js
Server running at http://0.0.0.0:3000/
node.js App을 실행한다.
✔️ node.js App을 Docker Image로 빌드하기
Dockerizing a Node.js web app | Node.js (nodejs.org)
✔️ 파일 구성하기
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", # 메인이되는 js 파일
"scripts": {
"start": "node server.js" # 실행 방법 기술
},
"dependencies": {
"express": "^4.16.1" # 설치할 외부 패키지 지정
} # node.js의 web framework
}
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
vagrant@docker ~/node/web npm install
added 57 packages, and audited 58 packages in 2s
7 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 8.5.5 -> 8.10.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.10.0
npm notice Run npm install -g npm@8.10.0 to update!
npm notice
npm install 명령을 내리면 package.json의 dependencies 영역을 참조해서 지정된 패키지를 설치한다.
vagrant@docker ~/node/web ls
node_modules package-lock.json package.json server.json
npm install 하면 package-lock.json 파일이 만들어지는데 이 파일이 패키지 목록을 가지는 파일이다.
해당 파일을 열면 main이 되는 express 패키지가 있고 express 패키지의 의존성 패키지도 모두 설치되어 있다.
package-lock.json 파일과 package.json 파일은 이미지에 넣어줘야 한다.
✔️ .dockerignore 파일 구성하기
vagrant@docker ~/node/web ls
node_modules package-lock.json package.json server.json
vagrant@docker ~/node/web vi .dockerignore
vagrant@docker ~/node/web cat .dockerignore
node_modules/
Dockerfile
.dockerignore
node.js는 현재 디렉토리의 node_modules 라는 디렉토리에 패키지를 설치한다.
이 디렉토리는 이미지에는 넣지 않는다.
✔️ Dockerfile 작성하기
vagrant@docker ~/node/web vi Dockerfile
vagrant@docker ~/node/web cat Dockerfile
FROM node:16
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 8080
CMD ["node", "server.js"]
Dockerfile의 RUN, COPY, WORKDIR 명령을 제외하고 순서가 크게 중요하지 않다.
✔️ node.js App 이미지 빌드
vagrant@docker ~/node/web docker build -t mynode .
✔️ node.js App 이미지로 컨테이너 실행
vagrant@docker ~/node/web docker run -d -p 80:8080 mynode
728x90
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker Compose 사용법 (0) | 2022.05.13 |
---|---|
[Docker] Docker Hub 사용법 (0) | 2022.05.12 |
[Docker] Web App을 Docker Image로 빌드하기 (0) | 2022.05.12 |
[Docker] Golang App을 Docker Image로 빌드하기 (0) | 2022.05.12 |
[Docker] Django App을 Docker 이미지로 빌드하기 (0) | 2022.05.12 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!