zoukankan      html  css  js  c++  java
  • 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)大很多, 但是最终发布的镜像还是一样大.

  • 相关阅读:
    《20171122-构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-5
    结队-贪吃蛇-项目进度
    《团队-爬取豆瓣Top250电影-团队-阶段互评》
    zip相关知识梳理(一)
    C++入职学习篇--代码规范(持续更新)
    C++入职学习篇--新员工入职(持续更新)
    Node.js学习之TCP/IP数据通讯
    Node.js之操作文件系统(二)
    Node.js之操作文件系统(一)
  • 原文地址:https://www.cnblogs.com/wang_yb/p/11013550.html
Copyright © 2011-2022 走看看