docker 通过中间镜像加速部署
2024-08-28 20:27:09
概要
使用 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)大很多, 但是最终发布的镜像还是一样大.
最新文章
- Vim多行缩进技巧
- Uncaught SyntaxError: Unexpected token ILLEGAL
- centos安装php
- Java中Double类型计算问题
- C++11强类型枚举
- C#.net拖拽实现获得文件路径
- SpringMVC整合fastjson-1.1.41
- python多线程实现售票
- 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据
- 根据URL下载图片至客户端、服务器实例
- Windows 2012安装odoo12
- 1.Odoo产品分析系列 – 目录
- QT新建工程编译出现";Moc'ing xxx.h..."; 找不到文件或者error MSB6006: ";cmd.exe"; exited with code 3.
- Asp.net中GridView使用详解(很全,很经典 转来的)
- 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面
- 5. MIZ7035 PCIe测试 RIFFA【PCIE视频传输】
- 【JavaScript】脚本
- 【读书笔记】setsockopt
- java并发基础(二)
- Scratch3.0——克隆代码仓库的正确姿势
热门文章
- 想成为Python高手,必须看这篇爬虫原理介绍!(附29个爬虫项目)
- C++入门到理解阶段二基础篇(5)——C++流程结构
- redis安装等其他操作
- Z从壹开始前后端分离【 .NETCore2.1 +Vue 2 +AOP+DI】框架之一 || 前言
- 17个常见的Python运行时错误
- Java生鲜电商平台-电商支付流程架构实战
- awk 输出前 N 列的最简单方法
- VectorMap.js 矢量地图库 – 快速入门
- STM32 IAP 升级功能
- EGit(Git Eclipse Plugin)使用