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)大很多, 但是最终发布的镜像还是一样大.

链接:https://www.cnblogs.com/wang_yb/p/11013550.html

    

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分