Using Node(1)

Build your Node image

Enable BuildKit

BuildKit을 활성화 해서 이미지를 효과적으로 빌드 할것을 추천한다. Docker Desktop을 사용한다면 자동으로 설정 되어 있다.

Overview

이미지에는 애플리케이션을 실행하는 데 필요한 모든것(코드, 바이너리, 런타임, 종속성 및 기타 필요한 파일 시스템 개체)이 포함된다.

Create a Dockerfile for Node.js

Dockerfile 은 Docker image를 모으는 지침을 포함하는 텍스트 파일이다. docker build 와 같은 명령어를 사용하면 Dockerfile에서 읽어서 실행한다.

  • 프로젝트 root 경로에 Dockerfile을 만든다.
  • #syntax 를 적용한다. build 하기 전에 항상 최신 버전을 사용하는 등의 작업을 수행하게 할 수 있다. docker/dockerfile:1 은 항상 최신버전을 가르킨다.
1
# syntax=docker/dockerfile:1
  • base image 파일을 설정한다.
1
FROM node:12.18.1

상속 가능하다. 즉, 직접 만든 것도 사용 가능 하지만 다른 이미지를 사용할 수 도 있다. 따라서 어플리케이션에 필요한 기능이 모두 담긴 이미지를 base image로 설정할 수 도 있다. 상속과 마찬가지로 FROM 을 사용하면 해당 이미지에 모든 기능을 사용하는 다른 이미지를 만들 수 있다.

  • 환경을 설정한다. 주로 production 이다 development 가 될 수 있다.
1
ENV NODE_ENV=production
  • 다른 명령을 쉽게 실행 시키기 위해서 working dir을 설정한다. 기본 패스로 사용해서 다른 명령어를 입력할때 모든 패스를 사용하지 않아도 된다.
1
WORKDIR /app
  • node 프로젝트에서는 의존성을 설치하기 위해 package.json을 사용하는데 이미지 파일에도 package.json을 옮겨야 한다. COPY 명령을 사용하고 인자로 srcdest 를 받는다. src 는 복사하고 싶은 파일을 의미하고, dest는 복사하고 싶은 곳을 의미한다.
1
COPY ["package.json", "package-lock.json*", "./"]
  • 의존성을 설치하는 명령을 실행한다.
1
RUN npm install --production
  • 이제 모든 파일을 복사한다. 이미지 파일로 복사한다.
1
COPY . .
  • 컨텐스트 로드 시간을 줄이기 위해서 .dockerignore 파일을 생성한다.
1
node_modules

build image

docker build 명령을 실행시켜서 build 할 수 있다. --tag 옵션을 주면 이미지에 이름을 줄 수 있다.

1
$ docker build --tag node-docker .

이미지는 manifest와 layer로 구성된다

Dockerfile

1
2
3
4
5
6
7
8
9
10
# syntax=docker/dockerfile:1
FROM node:14.16.0

COPY ["package.json", "yarn.lock", "./"]

RUN yarn install

COPY . .

CMD ["yarn", "start"]

NODE_ENV 는 따로 설정 안해서 뺐음