도커로 nodejs 배포를 해봤다
이번에는 순서대로 어떻게 작성 했는지 적어보려고 한다
도커 이미지를 빌드할때 실제로 빌드 되지 않아야하는 부분을 정의해준다!
node_modules/
Dockerfile
.dockerignorefile
node.js를 사용하다보니 node_modules가 설치되는데 이거 빌드할때 같이 되면 큰일 남!! -> 메모리 심하게 낭비!
말 그래도 우리 앱에 필요한 설정들을 미리 정의하는 json 파일이다
{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node js on Docker",
"author": "First Last",
"main": "server.js",
"scripts": {
"start": "node server.js" // 이 부분이 핵심!
},
"dependencies": {
"express": "^4.18.1"
}
}
npm install 하면 이 안에 적은 의존성 라이브러리들도 자동 설치된다!
간단하게 express 라이브러리를 사용해서 서버 연결을 했다
제대로 연결 되었으면 res.send에 적은 내용이 15.165.236.87:8080에 보인다!
(15.165.236.87는 나의 Ec2인스턴스 퍼블릭 IP)
'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}`)
FROM node:16
WORKDIR /home/ubuntu/node/web
COPY . .
RUN npm install
EXPOSE 8080
CMD ["node","server.js"]
WORKDIR을 기준으로 RUN, CMD, COPY, ADD, 명령은 해당 디렉토리를 기준
RUN은 실행
EXPOSE 하면 컨테이너로 들어오는 트래픽을 리스닝 하는 포트와 프로토콜을 지정하기 위해 사용 ( 도커 내 포트 번호 적는거!)
COPY 호스트 파일에 있는 디렉터리나 파일을 docker 이미지의 파일 시스템으로 복사하기 위해 사용
.dockerignore 파일은 이미지 빌드할대 제외 시킬것들
CMD는 컨테이너가 시작할때 실행할 실행 파일 또는 쉘 스크립트
이렇게 해서 우리가 적은 dockerfile을 mynode라는 이름의 이미지로 만든다!
그 다음 빌드된 이미지를 컨테이너화 시킨 뒤 실행한다!!