nodejs alpine3.13 테스트
· 약 4분
개요
- docker nodejs base image 에 alpine3.13 에 대한 이미지가 있어서 릴리즈노트를 확인했다.
Node.js (LTS) is compiled with -O2 instead of -Os which noticeably improves performance.
란 구문이 눈에 띄었다.- noticeably improves 란 추상적인 표현은 호기심을 자극하기에 충분했다.
히스토리
- 처음에 빌드 플래그 변경을 제안한 사람에 따르면, 빌드 플래그 수정으로 15% speedup 이 있을 것이라고 하였다.
- 이에 몇몇 알파인 패키지들이 O2 로 전환되었고, Node.js도 2020-12-19 커밋에 포함되었다.
- 여기엔 아래와 같은 코멘트가 달려있고, v8/web-tooling-benchmark를 사용한 것으로 보였다.
# Compiling with O2 instead of Os increases binary size by ~10%
# (53.1 MiB -> 58.6 MiB), but also increases performance by ~20%
# according to v8/web-tooling-benchmark
테스트1
- 빌드 플래그의 변경으로 nodejs 유저가 베이스 이미지의 버전을 하나 올려주는 것만으로 어플리케이션의 성능을 20% 까지 올릴 수 있다는 이야기로 보였다.
- fastify/benchmarks 레파지토리의 Express.js 를 아래처럼 도커라이징했다.
node:lts-alpine3.12
# 테스트 당시 LTS === 14
FROM node:lts-alpine3.12
RUN mkdir -p /usr/src/app \
&& chown node:node -R /usr/src/app
WORKDIR /usr/src/app
COPY --chown=node:node package*.json ./
USER node
RUN npm install && npm cache clean --force
COPY --chown=node:node . .
EXPOSE 3000
CMD [ "node", "server.js" ]
node:lts-alpine3.13
# 테스트 당시 LTS === 14
FROM node:lts-alpine3.13
RUN mkdir -p /usr/src/app \
&& chown node:node -R /usr/src/app
WORKDIR /usr/src/app
COPY --chown=node:node package*.json ./
USER node
RUN npm install && npm cache clean --force
COPY --chown=node:node . .
EXPOSE 3000
CMD [ "node", "server.js" ]