NestJS Docker Image 생성, Server 띄우기

Jiwon Youn·2021년 2월 22일

Docker Image를 만들기 위해 프로젝트 디렉토리에 다음과 같이 Dockerfile을 생성한다.

Dockerfile

# Step 1
## base image for Step 1: Node 10
FROM node:10 AS builder
WORKDIR /app
## 프로젝트의 모든 파일을 WORKDIR(/app)로 복사한다
COPY . .
## Nest.js project를 build 한다
RUN npm install
RUN npm run build


# Step 2
## base image for Step 2: Node 10-alpine(light weight)
FROM node:10-alpine
WORKDIR /app
## Step 1의 builder에서 build된 프로젝트를 가져온다
COPY --from=builder /app ./
## application 실행
CMD ["npm", "run", "start:prod"]
  • Step 1은 ts -> js로 compile하기 위한 과정
  • Step 2는 가벼운 node alpine image로 compile된 application을 실행하기 위한 과정

이 때 Step 1에서 프로젝트의 파일을 옮길 때 옮길 필요 없는 dist, node_modules 파일은 ignore 하기 위해 .dockerignore 파일을 생성한다.

.dockerignore

node_modules
dist

Docker Image Build
해당 프로젝트 폴더의 콘솔에서 아래 명령어로 build

$ docker build -t s3-image-upload .

-t : 해당 이미지에 tag 설정 (name은 아님)

$ docker images

local Docker에 생성한 Docker image 조회


$ docker run -d s3-image-upload

이미지를 백그라운드에서 run


Docker Container port forwarding

$ docker run -p <container port number>:<host port number>/<protocol> [ImageName]
  • <container port number> : 컨테이너 내에서 사용되는 포트 번호
  • <host port number> : 호스트 시스템에서 사용되는 포트 번호
  • <protocol> : 프로토콜 유형 - udp, tcp, stcp 등

ex)

$ docker run -d -p 3000:3000 s3-image-upload

-> 백그라운드에서 포트 번호 3000으로 s3-image-upload server run

서버 실행 모습


$ docker ps를 통해 Container ID를 확인한 후 $ docker logs **** 을 통해 로그 확인

0개의 댓글