간혹 따라 했는데 안 되는 경우가 있어, 다음의 게시물을 참고하여 작성 후 실행이 되는지 확인하는 관점으로 작성했습니다.
https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/
Node.js에 대해 기본적인 이해가 있다고 생각하고...
귀찮으실까 봐 파일도 첨부했음.
1. Node.js 앱 만들기
먼저 작업할 디렉터리를 하나 만들고, 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",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
위의 파일을 만든 후, npm install을 실행하여 package-lock.json 을 만든다. 이 2개의 파일은 docker 이미지로 복사할 파일이다.
실행할 server.js를 만든다. 보면 알겠지만 별 내용은 없고 Hello World를 출력하는 소스코드다.
'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}`);
2. Dockerfile 만들기
아래와 같이 Dockerfile을 만든다. Dockerfile은 다양한 명령과 옵션으로 구성되며 자세한 것은 여기를 참조하자.
# 가장 먼저 해야 할 것은 어떤 이미지를 사용해서 빌드할 것인지를 정의하는 것이며
# 여기서는 Docker Hub에 있는 node의 최신 LTS(장기 지원) 버전인 12을 사용한다.
# (이 게시물 작성 시점에는 16이 최신임)
FROM node:12
# 앱 디렉터리 생성
# 뒷부분의 명령어가 실행될 위치이며 중간에 변경 가능하다.
# "/"로 시작하면 절대 경로가 되며 그렇지 않고 상대 경로로 지정 가능하다.
WORKDIR /usr/src/app
# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./
RUN npm install
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --only=production
# 앱 소스 추가
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
3. .dockerignore 파일 만들기
.dockerignore 파일은 Docker 이미지에 로컬 모듈과 디버깅 로그를 복사하는 것을 막아서 이미지 내에서 설치한 모듈을 덮어쓰지 않게 한다.
node_modules
npm-debug.log
4. 이미지 빌드
작성한 Dockerfile이 있는 디렉터리로 가서 Docker 이미지를 빌드하는 다음 명령어를 실행한다. "-t (--tag list)" 옵션은 Name과 Tag를 지정할 수 있는 옵션으로 "name:tag" 형식이며 tag는 생략할 수 있다. 참고로 build 옵션은 "sudo docker build --help"로 확인할 수 있다.
$ sudo docker build . -t <your username>/node-web-app
"-t nodejs-test:v1" 옵션을 사용할 경우, 아래와 같이 나오는 것을 확인할 수 있다.
5. 이미지 실행
이미지 빌드 시, 사용한 name을 사용하여 아래와 같이 실행한다.
$ sudo docker run -p 49160:8080 -d <your username>/node-web-app
실행 후, 브라우저를 사용하여 확인하면 아래와 같이 서버가 실행되었음을 확인할 수 있다.
'놀기 > Docker' 카테고리의 다른 글
Docker (도커) 설치 - Ubuntu 20.04 (0) | 2021.07.16 |
---|---|
Docker (도커) (0) | 2021.07.16 |
댓글