Docker Image를 만들기 위해 프로젝트 디렉토리에 다음과 같이 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"]
ts -> js로 compile하기 위한 과정이 때 Step 1에서 프로젝트의 파일을 옮길 때 옮길 필요 없는 dist, node_modules 파일은 ignore 하기 위해 .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 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 **** 을 통해 로그 확인