iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
DevOps

從零開始的Kubernetes轉換系列 第 27

Day 27 Dockerfile Refine Node. js 篇

  • 分享至 

  • xImage
  •  

一樣我們今天來看怎麼可以例用multi-staging來幫同事的node js docker image瘦身
首先先看第一版的

FROM node:14.17-alpine

RUN apk add --no-cache \
    vim \
    git \
    curl \
    bash \
    python2 \
    make \
    gcc \
    g++ \
    openssh-client

WORKDIR /bidAgent
# nodejs dependencies
COPY . /bidAgent
RUN yarn global add pm2@4.4.0 && pm2 install pm2-logrotate && yarn global add lerna --ignore-engines
RUN yarn install --only=production && yarn cache clean
RUN lerna link

RUN echo `mktemp -d` > $HOME/TMPNAME
ENV NODE_ENV=production

CMD ["pm2-runtime", "pm2.config.js"]

Build 完size 大約1.31 GB

ccc                                             latest    c229a62610be   3 minutes ago    1.31GB

使用multi-staging

FROM node:14.17-slim as base

RUN apt update -y && \
    apt install -y \
    vim \
    curl \
    bash \
    openssh-client && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /bidAgent
# nodejs dependencies

FROM base as builder
RUN apt update -y && \
    apt install -y \
    git \
    build-essential \
    python3
COPY package.json /bidAgent
COPY lerna.json /bidAgent
COPY yarn.lock /bidAgent
COPY . /bidAgent
RUN yarn install --only=production && yarn cache clean
RUN rm -rf /bidAgent/node_modules/node-rdkafka/deps/librdkafka/examples

FROM base as production

COPY --from=builder /bidAgent/node_modules /bidAgent/node_modules
COPY --from=builder /bidAgent/packages /bidAgent/packages
COPY . /bidAgent
RUN yarn global add pm2@4.4.0 && pm2 install pm2-logrotate && yarn global add lerna --ignore-engines
RUN lerna link

RUN echo `mktemp -d` > $HOME/TMPNAME
ENV NODE_ENV=production

CMD ["node", "/bidAgent/index.js"]

這邊我有把alpine換成debian-slim,雖然image會大一些,但可以縮短一些build time
然後因為我有用dfimage去檢查node-rdkafka這個套件,儼然發現放了一堆檔案在example所以手動的把他刪除了也省去不少空間
所以大家真的要多利用hive和dfimage檢查自己的image,多花一點時間,可以省下很多麻煩。
Build 完 Size從 1.31 GB 縮減到876 MB

ddd                                             latest    5e22f26244ae   41 seconds ago   876MB

因此大家可以回頭檢視看看自家的image做些調整。
這樣在HPA部署或是Node provision起來要部署pod的時候會更縮短時間喔。


上一篇
Day 26 Dockerfile Refine python篇
下一篇
Day 28 Backup GKE Cluster 災難復原
系列文
從零開始的Kubernetes轉換30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言