<aside>
💡 이 정리는 NestJS 환경에서 진행되었습니다.
</aside>
Dockerfile
- Dockerfile은 DockerImage를 생성하기 위한 스크립트이다.
- 여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 Docker는 Dockerfile에 나열된 명령문을 차례
- Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerImage를 생성해준다.
- Dockerfile을 읽을 줄 안다는 것은 해당 이미지가 어떻게 구성되어 있는지 알 수 있다는 의미이다.
Dockerfile 작성 및 명령어
dockerfile과 .dockerignore는 app의 Root 부분에 작성해준다.
## Dockerfile
## Nest.JS의 TS 파일을 JS로 컴파일을 진행한다.
FROM node:18-alpine
## 프로젝트의 모든 파일을 WORKDIR(/app)로 복사한다.
WORKDIR /app
COPY . .
## 새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다.
RUN npm ci
RUN npm run build
## Dockerfile 빌드로 생성된 이미지에서 열어줄 포트를 의미한다.
EXPOSE 3000
## 컨테이너를 생성 및 실행 할 때 실행할 명령어
## container를 띄울 때 Port를 지정해 줄 것이기 때문에 필요 없을 수도
CMD ["node","dist/main.js"]
.dockerignore
.git
*Dockerfile*
dist
node_modules
- FROM : 베이스 이미지
- MAINTAINER : 이미지를 생성한 개발자의 정보 (1.13.0 이후 사용 X)
- LABEL : 이미지에 메타데이터를 추가 (key-value 형태)
- RUN : 새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다.
- RUN 명령을 실행할 때 마다 레이어가 생성되고 캐시된다.
- 따라서 RUN 명령을 따로 실행하면 apt-get update는 다시 실행되지 않아서 최신 패키지를 설치할 수 없다.
- 위 처럼 RUN 명령 하나에 apt-get update와 install을 함께 실행 해주자.