找回密码
 注册
关于网站域名变更的通知
查看: 318|回复: 1
打印 上一主题 下一主题

docker 通过中间镜像加速部署

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-6 16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
概要0 _' |# j! l. k6 F4 }* J$ ]* h- r
实施3 K* @% G% n& n0 n' R
  • 修改前的实施时间
  • 制作编译用的镜像
  • 测试修改后的实施时间
    % i0 h) ~: d% Y8 _) _
* k  L4 i" K$ Q! d) b  `
概要
. O7 n0 _$ P4 g0 \使用 docker 打包镜像的时候, 每次耗费时间最多的就是 docker build 的过程. 特别是对于前端工程的打包, 有时候下载依赖包的时间就要 10 几分钟, 这就导致发布版本的效率极低.. g2 c0 I/ i/ |% d

- @% F; _: D! X7 a1 v针对前端工程的打包慢的问题, 目前能想到的有效解决办法就是, 在官方 node 的镜像基础上, 把当前项目用到的 packages 下载好再做个镜像用于编译前端工程用.
& f7 K) T) u# Z: G) m3 F
2 {) U2 M4 W; y& V1 D6 V! T实施# P, W7 |7 W  f7 C$ j/ r* x; K
根据上面的方案, 尝试如下.
1 z* }1 m( S# s( s9 Q) U* H* X
- ]0 O! r7 ]% O& n修改前的实施时间
& d2 }8 d/ O, D修改前, 是在 node 镜像中编译前端, 然后将编译之后的代码放入后端的静态文件目录中.
! H7 b. U3 Y3 J  p" k& ~; j" R. h, c' [: W' w9 i
FROM node:10.15-alpine as front-builder
2 G& @3 V2 M0 X% \+ B2 M
0 j4 x" @6 I7 `& ]6 ^WORKDIR /user! z2 N' F' ?& \! P! r0 R
ADD ./frontend/application .
  z- x- i8 N5 d. N" [: k' FRUN yarn                        #  这一步耗费的时间最长
( U4 Q7 z4 p+ Q# rRUN yarn build! l, T! V+ ^$ v( B% F5 H% L

( m& Y5 R: K! ?/ G) E7 _7 S1 Y1 s
, O: _: e% c, w4 PFROM golang:1.12.5-alpine3.9 as back-builder) r+ ^) h$ O3 t# U2 R: \/ U

# D) L% k, v$ w4 t- \4 QWORKDIR /go- \" T: w" Z1 u0 S: T" ^( r& @; f/ M
RUN mkdir -p ./src/xxx
* I0 E; v7 ]" FADD ./backend/src/xxx ./src/xxx
& d$ K$ m2 T& K% W- F' bRUN go install xxx
0 g* Y& E; ^1 H; [7 @9 d  U  g6 Z  r6 k$ w6 a
# F( G5 E( }# m- @5 H4 F) v
FROM golang:1.12.5-alpine3.9
. s7 n- D" p. w" d/ o* J9 q$ w8 M6 [
WORKDIR /app
3 v( h' ?  o: c' j  z7 v3 W) @6 ]4 W& JCOPY --from=front-builder /user/build ./public
+ E6 h# t* R2 r2 O  P8 DCOPY --from=back-builder /go/bin/xxx .
/ M; B1 Q+ y3 F. i9 O8 {$ C
, S8 T5 A! a9 y6 q  w  @CMD ["./xxx"]
: v8 D: E: ]- c. B  V- i9 z% e这种方式的编译时间如下:
7 g, ~- [) R+ b- D2 ~' D* U; V
: e% ]5 `: B0 F( A& n" a" g' jreal    14m27.639s7 w$ a( k" u/ R: q
user    0m0.812s
3 q/ @: h+ ^/ n. r; v: ]0 ?sys     0m0.108s# Q4 t, a* A; ]. I0 b
制作编译用的镜像
. ?  i3 t: m. N前端编译用的镜像 DockeRFile 如下:- ^' U1 \3 g' T+ K$ v  \
9 w! ?1 E3 a4 K( q: E, Y. C
FROM node:10.15-alpine, y( V# s* e! \& K0 c' G9 D3 I6 h

& T( T+ n9 L: F+ h/ d0 w1 a" @2 oWORKDIR /user
! P- @+ D9 \) j5 L4 sADD ./frontend/application .
0 I* Y8 [+ b6 g8 Z4 y4 ]RUN yarn
% \( Z9 v' x' f2 G4 URUN rm -rf `grep -v "node_modules" | grep -v "yarn.lock"`
! Q+ r) U* W. {1 k! W5 zdocker build 命令: ( 目录结构根据具体的项目调整 )
, m9 N7 x0 n5 J! b* Z& j/ ^& R! X
# 这里的 Dockerfile 就是上面的内容, 编译后会生成名称为 node-application-cache 的 image  H5 n3 d5 b2 E, ^
docker build -f ./Dockerfile -t node-application-cache .: c' S+ E" l8 `
测试修改后的实施时间
  O* u  ~* B, k5 [* ^6 _dockerfile 和修改前的基本一样, 只改了第一行+ x) [1 ?1 u  d0 K! I  s
, Z! t% S1 |0 G
# FROM node:10.15-alpine as front-builder7 `$ o% p! c1 _# [% V4 Y
FROM node-application-cache:latest as front-builder
3 h2 T8 c' B& T# j' O3 J编译时间如下:$ G; b0 t4 Y) V; _

* O. l, W3 I% d4 G1 J. {, g- k" a  lreal    1m17.399s8 m9 ?. |  |1 k7 a1 o8 F4 x
user    0m0.836s2 H, R8 J" E5 V0 Z- Q; t
sys     0m0.136s4 ]) @1 e: f7 g, |
使用了带前端缓存的 image, 整体时间缩短了 14 倍左右 中途编译用的镜像(node-application-cache)比之前的(node:10.15-alpine)大很多, 但是最终发布的镜像还是一样大.

该用户从未签到

2#
发表于 2020-7-6 18:52 | 只看该作者
docker 通过中间镜像加速部署
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-28 23:02 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表