docker 通過中間鏡像加速部署


概要

使用 docker 打包鏡像的時候, 每次耗費時間最多的就是 docker build 的過程. 特別是對於前端工程的打包, 有時候下載依賴包的時間就要 10 幾分鍾, 這就導致發布版本的效率極低.

針對前端工程的打包慢的問題, 目前能想到的有效解決辦法就是, 在官方 node 的鏡像基礎上, 把當前項目用到的 packages 下載好再做個鏡像用於編譯前端工程用.

實施

根據上面的方案, 嘗試如下.

修改前的實施時間

修改前, 是在 node 鏡像中編譯前端, 然后將編譯之后的代碼放入后端的靜態文件目錄中.

FROM node:10.15-alpine as front-builder

WORKDIR /user
ADD ./frontend/application .
RUN yarn                        #  這一步耗費的時間最長
RUN yarn build


FROM golang:1.12.5-alpine3.9 as back-builder

WORKDIR /go
RUN mkdir -p ./src/xxx
ADD ./backend/src/xxx ./src/xxx
RUN go install xxx


FROM golang:1.12.5-alpine3.9

WORKDIR /app
COPY --from=front-builder /user/build ./public
COPY --from=back-builder /go/bin/xxx .

CMD ["./xxx"]

這種方式的編譯時間如下:

real    14m27.639s
user    0m0.812s
sys     0m0.108s

制作編譯用的鏡像

前端編譯用的鏡像 Dockerfile 如下:

FROM node:10.15-alpine

WORKDIR /user
ADD ./frontend/application .
RUN yarn
RUN rm -rf `grep -v "node_modules" | grep -v "yarn.lock"`

docker build 命令: ( 目錄結構根據具體的項目調整 )

# 這里的 Dockerfile 就是上面的內容, 編譯后會生成名稱為 node-application-cache 的 image
docker build -f ./Dockerfile -t node-application-cache .

測試修改后的實施時間

dockerfile 和修改前的基本一樣, 只改了第一行

# FROM node:10.15-alpine as front-builder
FROM node-application-cache:latest as front-builder

編譯時間如下:

real    1m17.399s
user    0m0.836s
sys     0m0.136s

使用了帶前端緩存的 image, 整體時間縮短了 14 倍左右 中途編譯用的鏡像(node-application-cache)比之前的(node:10.15-alpine)大很多, 但是最終發布的鏡像還是一樣大.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM