概要

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

最新文章

  1. Vim多行缩进技巧
  2. Uncaught SyntaxError: Unexpected token ILLEGAL
  3. centos安装php
  4. Java中Double类型计算问题
  5. C++11强类型枚举
  6. C#.net拖拽实现获得文件路径
  7. SpringMVC整合fastjson-1.1.41
  8. python多线程实现售票
  9. 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据
  10. 根据URL下载图片至客户端、服务器实例
  11. Windows 2012安装odoo12
  12. 1.Odoo产品分析系列 – 目录
  13. QT新建工程编译出现"Moc'ing xxx.h..." 找不到文件或者error MSB6006: "cmd.exe" exited with code 3.
  14. Asp.net中GridView使用详解(很全,很经典 转来的)
  15. 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面
  16. 5. MIZ7035 PCIe测试 RIFFA【PCIE视频传输】
  17. 【JavaScript】脚本
  18. 【读书笔记】setsockopt
  19. java并发基础(二)
  20. Scratch3.0——克隆代码仓库的正确姿势

热门文章

  1. 想成为Python高手,必须看这篇爬虫原理介绍!(附29个爬虫项目)
  2. C++入门到理解阶段二基础篇(5)——C++流程结构
  3. redis安装等其他操作
  4. Z从壹开始前后端分离【 .NETCore2.1 +Vue 2 +AOP+DI】框架之一 || 前言
  5. 17个常见的Python运行时错误
  6. Java生鲜电商平台-电商支付流程架构实战
  7. awk 输出前 N 列的最简单方法
  8. VectorMap.js 矢量地图库 – 快速入门
  9. STM32 IAP 升级功能
  10. EGit(Git Eclipse Plugin)使用