減少 Node.Js Docker image 容量大小
改用 alpine 系列 image
第一點可以修改的是 base image 改用 alpine,這點很多地方都有提到,不多說。
yarn install –production
--production
參數表示只安裝 package.json 裡面 dependencies 的套件,
不安裝 devDependencies 的套件,devDependencies 表示開發才需要的套件。
ps 1:在 CI 安裝後,通常會加上 --frozen-lockfile
讓 yarn 完全依照 yarn.lock
安裝
確保 CI 跟開發環境一致,完整指令:yarn install --production --frozen-lockfile
ps 2:yarn add
指令會讓所有套件都安裝,包含 devDependencies,
不要在 CI 過程中使用 yarn add
指令,會破壞這個原則。
yarn cache clean
yarn 為了加速套件安裝,會在本地暫存一份 cache,但是在 image 不需要這個,
原理跟 apt install
一樣,在安裝套件後清除本地快取,
完整指令:yarn install --production --frozen-lockfile && yarn cache clean
完整 Dockerfile
以 Actionhero 為範例
FROM node:12.19.1-alpine
WORKDIR /app
# 需要 packagejson 跟 yarn.lock 提供版本資訊
COPY package.json yarn.lock ./
# --production 不安裝 dev 相關套件
# --frozen-lockfile 強制安裝 yarn.lock 套件
# NOYARNPOSTINSTALL=1 跳過 postinstall
RUN NOYARNPOSTINSTALL=1 yarn --production --frozen-lockfile && yarn cache clean
# actionhero 會在這個目錄建立 websocker js file
RUN mkdir -p public/javascript/
# backend
COPY dist dist
# frontend
COPY public public
EXPOSE 8080
CMD [ "node", "dist/server.js" ]
留言