$ mkdir hello_docker
$ cd hello_docker
$ npm init
$ cat package.json
{
"name": "hello_docker",
"version": "1.0.0",
"description": "hello docker test",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
$ vi app.js
const http = require('node:http');
const hostname = '0.0.0.0';
const port = 8000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!\n');
});
server.listen(port, hostname, () => {
console.log(`Node Server running at http://${hostname}:${port}/`);
});
$ vi Dockerfile
# Docker Hub에 있는 node의 최신 LTS(장기 지원) 버전인 16을 사용할 것입니다.
FROM node:16.18
# 컨테이너 앱 디렉터리 생성
WORKDIR /app
# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./
RUN npm install
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --only=production
# 앱 소스 추가
# .dockerignore 작성할 것
COPY . .
# 앱이 8000포트에 바인딩 되어 있으므로 EXPOSE 지시어를 사용해서 docker 데몬에 매핑합니다.
EXPOSE 8000
# 서버 시작
CMD [ "node", "app.js" ]
# docker build . -t djkim/hello_docker
# docker run --name test1 -d -p 8000:8000 djkim/hello_docker
vi .dockerignore
node_modules
npm-debug.log
# hello_docker 라는 850메가 도커 이미지 생성
$ docker build . -t djkim/hello_docker
# 도커 컨테이너 test1을 생성하고 실행한다. 서버 포트 8000을 컨테이너 포트 8000으로 바잉딩
$ docker run --name test1 -d -p 8000:8000 djkim/hello_docker
# test
$ curl http://localhost:8000
Hello, World!
% docker logs test1
Node Server running at http://0.0.0.0:8000/
간단한 서비스의 배포를 서버까지 다 포함시킨 이미지를 만들어서 배포하는 것은 문제가 있어서 docker-compose 를 공부할 것..
자습서: Visual Studio Code에서 Docker 앱 시작 | Microsoft Learn