이 예제는 Node.JS 앱을 Docker에 넣는 방법을 알려줍니다. 이 포스팅은 공식문서 내용을 그대로 압축한것 뿐입니다.
npm 라이브러리를 설치하기 위한 package.json 파일을 생성한 뒤 "npm install"을 시작해줍니다.
커맨드 순서
touch package.json
다음 내용 삽입
이후 npm install 실행
{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
'use strict';
const express = require('express');
// 상수
const PORT = 8080;
const HOST = '0.0.0.0';
// 앱
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(PORT, HOST, () => {
console.log(`Running on http://${HOST}:${PORT}`);
});
여기까지하면 javascript 설정은 끝났습니다.
이제 Docker파일을 작성하면 됩니다.
touch Dockerfile
FROM node:16
# 앱 디렉터리 생성
WORKDIR /usr/src/app
# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./
RUN npm install
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --only=production
# 앱 소스 추가
COPY . .
# EXPOSE 지시어를 사용해서 docker 데몬에 매핑
EXPOSE 8080
# 런타임을 정의하는 CDM로 서버를 구동하는 스크립트 실행
CMD [ "node", "server.js" ]
도커이미지에 로컬 모듈과 디버깅 로그를 복사하는 것을 막아서 이미지내 설치한 모듈을 덮어쓰지 않게함
node_modules
npm-debug.log
Dockerfile과 package.json, sever.js가 모두 있는 폴더로 이동합니다.
그리고 다음 명령어로 도커 이미지를 만들어줍니다. -t 옵션은 이미지에 태그를 추가할 수 있는 옵션입니다.
docker build . -t <your username>/node-web-app
#예시
docker build . -t node-test/node-web-app
진짜 <your username> 에를 입력하시면 안돼구요 예시와 같이 원하시는 컨테이너 이름으로 만들어주시면 됩니다.
$ docker images
# 예시
REPOSITORY TAG ID CREATED
node 16 1934b0b038d1 5 days ago
<your username>/node-web-app latest d64d3505b0d2 1 minute ago
# run 도커 이미지를 기반으로 컨테이너를 생성하고 실행
# -d 분리모드 실행
# -p 포트 옵션 (공개포트:컨태이너 내 비공개포트)
docker run -p 49160:8080 -d <your username>/node-web-app
# 컨테이너 아이디를 확인합니다
$ docker ps
# 앱 로그를 출력합니다
$ docker logs <container id>
# 예시
Running on http://localhost:8080
# 컨테이너에 들어갑니다
$ docker exec -it <container id> /bin/bash
curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
Date: Mon, 13 Nov 2017 20:53:59 GMT
Connection: keep-alive
Hello world
추후 nodejs를 기반으로 docker로 만들때 내용을 좀 더 추가할 예정입니다. 위 내용은 공식홈에 그대로 있습니다.
출처 : https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/
git 명령어 모음 및 기초 정리 (0) | 2023.03.03 |
---|