- Node.js 애플리케이션을 빌드하는 스크립트
- 파이썬, PHP, 루비 등 여타 스크립트 언어에 그대로 적용 가능
- Node.js 애플리케이션은 인터프리터형 언어인 자바스크립트를 사용. 컨테이너화 된 Node.js 애플리케이션을 실행하려면 Node.js 런타임과 소스코드가 애플리케이션 이미지에 포함돼야 한다.
- 그럼에도 멀티 스테이지 빌드를 사용한다. 멀티 스테이지 빌드를 통해 의존 모듈을 최적화 할 수 있다.
npm을 사용해 Node.js 애플리케이션을 빌드하는 Dockerfile 스크립트
001) FROM diamol/node AS builder
002)
003) WORKDIR /src
004) COPY src/package.json .
005) RUN npm install
006)
007) # app
008) FROM diamol/node
009)
010) EXPOSE 80
011) CMD ["node", "server.js"]
012)
013) WORKDIR /app
014) COPY --from=builder /src/node_modules/ /app/node_modules/
015) COPY src/ .
Dockerfile 스크립트 빌드
- 내려받은 의존 모듈은 도커 이미지 레이어 캐시에 저장되므로 의존 모듈 추가 없이 코드만 수정했다면 그 다음 번 빌드는 지금보다 매우 빠르게 진행된다.
001) ➜ docker build -t access-log .
002) [+] Building 8.5s (13/13) FINISHED
003) => [internal] load build definition from Dockerfile 0.0s
004) => => transferring dockerfile: 265B 0.0s
005) => [internal] load .dockerignore 0.0s
006) => => transferring context: 2B 0.0s
007) => [internal] load metadata for docker.io/diamol/node:latest 2.5s
008) => [auth] diamol/node:pull token for registry-1.docker.io 0.0s
009) => [internal] load build context 0.0s
010) => => transferring context: 1.57kB 0.0s
011) => CACHED [stage-1 1/4] FROM docker.io/diamol/node@sha256:dfee522acebdfdd9964aa9c88ebebd03a20b6dd573908347be3ebf52ac4879c8 0.0s
012) => [builder 2/4] WORKDIR /src 0.0s
013) => [stage-1 2/4] WORKDIR /app 0.0s
014) => [builder 3/4] COPY src/package.json . 0.0s
015) => [builder 4/4] RUN npm install 5.5s
016) => [stage-1 3/4] COPY --from=builder /src/node_modules/ /app/node_modules/ 0.2s
017) => [stage-1 4/4] COPY src/ . 0.0s
018) => exporting to image 0.1s
019) => => exporting layers 0.1s
020) => => writing image sha256:75c06b0cf1fc9548ab9bba56eaf3d37c1f4d895b39d6b3f1b28bf736aa9da1ff 0.0s
021) => => naming to docker.io/library/access-log
컨테이너 실행
- 이 애플리케이션은 다른 서비스로부터 호출을 받아 로그를 남기는 REST API
- HTTP POST 엔드포인트를 통해 남길 로그를 접수하며 GET 엔드포인트를 통해 현재까지 기록된 로그 건수를 알려준다.
001) ➜ docker container run --name accesslog -dp 801:80 --network nat access-log
002) 1f6bef013f1888725f63725c10a5635fd874c622e3c97c969d0f364b370da787
http://localhost:801/stats
로 접근하면 지금까지 남긴 로그 건수를 확인할 수 있다.
{"logs":0}