(2020-03-23에 작성한 글입니다.)
Nest.js 기본 프로젝트를 Docker image로 만들어보고 해당 image를 container로 실행시키는 과정을 알아보자
코드 예제는 여기에 있다.
1. 프로젝트 생성
먼저 Nest.js CLI를 통해 프로젝트를 생성한다.
$ nest new nestjs-docker

2. Docker image 생성을 위한 세팅
다음 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"]
image build는 위와 같이 2 Step으로 이뤄지며,Step 1
은 ts->js
compile을 하기 위한 것이고,Step 2
는 가벼운 node alpine image로 compile된 application을 실행하기 위함이다.
여기서 Step 1
에서 프로젝트의 파일을 옮길 때 옮길 필요없는 dist
, node_mouldes
파일은 ignore하기 위해 .dockerignore
파일을 생성한다.
node_modules dist

3. Docker image build
이제 build를 해보자
$ docker build -t devson/nestjs-docker-example .
정상적으로 build가 됐다면 local Docker에 생성한 Docker image가 있을 것이다.
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE devson/nestjs-docker-example latest 7be3ab375f98 13 minutes ago 252MB
4. Run Docker image
이제 Docker image가 제대로 build가 되었는지 실행해보자
$ docker run devson/nestjs-docker-example > nestjs-docker@0.0.1 start:prod /app > node dist/main [Nest] 17 - 03/23/2020, 1:51:19 PM [NestFactory] Starting Nest application... [Nest] 17 - 03/23/2020, 1:51:19 PM [InstanceLoader] AppModule dependencies initialized +32ms [Nest] 17 - 03/23/2020, 1:51:19 PM [RoutesResolver] AppController {}: +10ms [Nest] 17 - 03/23/2020, 1:51:19 PM [RouterExplorer] Mapped {, GET} route +7ms [Nest] 17 - 03/23/2020, 1:51:19 PM [NestApplication] Nest application successfully started +4ms
위와 같이 Application이 정상적으로 잘 실행되는 것을 확인할 수 있다.
참고:
'JS & TS > Nest.js' 카테고리의 다른 글
AdminBro로 Nest.js admin 쉽게 만들기 (8) | 2021.05.29 |
---|---|
DI with Nest.js (0) | 2021.01.02 |
댓글