Node 的一大特色就是需依賴大量的 Package,但有些 Package 只是開發或編譯使用,如 Babel、Nodemon 只會安裝在 devDependencies
,像這類 Package 就不須安裝在發布的 Docker Image 內,可大幅降低 Image Size。
Version
macOS Catalina 10.15.3
Docker Desktop 2.2.0.3 (42716)
WebStorm 2019.3.3
Node 12.4.0
Dockerfile
FROM node:lts-alpine
WORKDIR /usr/app
COPY package.json .
RUN yarn install --production
COPY dist/* ./
CMD [ "node", "index.js" ]
第 4 行
RUN yarn install --production
在 docker 內下 yarn install
安裝所有 package 時,別忘了加上 --production
,如此只會安裝 dependencies
下的 package,而不會安裝 devDependencies
下的 package,可大幅降低 image 的 size。
Conclusion
- 實務上常常忘記加上
--production
,導致 image 過於肥大,這樣喪失了 NPM 當初設計dependencies
與devDependencies
的意義