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

docker 通过中间镜像加速部署

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
概要
6 c4 s  R" T& U7 Q$ b3 S  R实施
% S, S2 \+ n6 B3 M0 M4 \3 O' `
  • 修改前的实施时间
  • 制作编译用的镜像
  • 测试修改后的实施时间' k& k5 K3 N: c( T

5 g6 l# _% [* U; m- G' F概要
& d$ Y; q4 x7 f2 s1 G9 A使用 docker 打包镜像的时候, 每次耗费时间最多的就是 docker build 的过程. 特别是对于前端工程的打包, 有时候下载依赖包的时间就要 10 几分钟, 这就导致发布版本的效率极低.. i3 z" Y7 [& H2 c2 s6 u
: [! }3 p. q4 P5 e2 T' u: y3 d
针对前端工程的打包慢的问题, 目前能想到的有效解决办法就是, 在官方 node 的镜像基础上, 把当前项目用到的 packages 下载好再做个镜像用于编译前端工程用.
; H' r! H& ]/ b$ h, P/ C9 A8 \& a/ t( Z1 `* @, p; I
实施
) A+ r+ @7 b4 e$ O( w4 z根据上面的方案, 尝试如下." q$ S3 e( W. P4 q- K& N& P! u2 O
. N" T' i- ^1 s
修改前的实施时间
4 c$ G$ l8 \- z修改前, 是在 node 镜像中编译前端, 然后将编译之后的代码放入后端的静态文件目录中.% V4 O; n# V! [7 S8 P% P: [

8 Y$ o/ ~* Z( }' ^% I5 Y) [$ bFROM node:10.15-alpine as front-builder7 E: Z' a- Q* B) d2 D9 p* E
# h' [# h; V0 G# W+ G, G/ u  O
WORKDIR /user" \0 w0 K" v8 j4 U
ADD ./frontend/application .8 y( d9 H- V# u# \# I/ n+ b2 \3 \7 B
RUN yarn                        #  这一步耗费的时间最长" ^  P: n# y6 O
RUN yarn build2 e3 r/ F& q6 J

* e; D/ U$ j0 r5 z# M$ ~# Z9 e- Y, ~& b* {- \
FROM golang:1.12.5-alpine3.9 as back-builder
/ J% n6 s3 Z) a: {
- w2 ]8 H" X$ _( C7 G1 fWORKDIR /go* B; D, B% k. W( o8 z+ {" Y
RUN mkdir -p ./src/xxx
( c9 Y1 l; ]3 L7 }; aADD ./backend/src/xxx ./src/xxx& Q4 M' {8 p/ p! v( v1 _2 Z; p
RUN go install xxx
" V- L6 K( s% p6 J! e: l0 @0 ^( K8 q* i  c* n2 I0 g

* f  F/ Z, Q9 C6 v$ }/ E1 I9 z7 GFROM golang:1.12.5-alpine3.91 E8 e  P2 o+ S8 v
/ G! k+ e) J( K' F. i
WORKDIR /app; q4 O2 f% ]& B/ F! ?; r
COPY --from=front-builder /user/build ./public/ G7 ]; `$ K2 N1 n- |2 W! d) d
COPY --from=back-builder /go/bin/xxx .
0 j* U( V; E) w5 f1 G1 C
2 ?' U1 p7 N/ G; {CMD ["./xxx"]+ V* q. t+ B! V# ~% R) S
这种方式的编译时间如下:  a& ~0 G! I+ n1 i- J% E" z2 h

. [5 `; n& \7 N+ rreal    14m27.639s) d! q% ]# \1 Y" o! I& j/ h3 D
user    0m0.812s
2 r, |) I( P) f/ a: B+ h4 vsys     0m0.108s% Y0 x: F/ n- G! l
制作编译用的镜像' Y5 P+ l- ]9 F* b3 U$ w2 l
前端编译用的镜像 DockeRFile 如下:
1 w) k" I# K% \! x5 q
. y: T: A" w+ a& PFROM node:10.15-alpine
$ W, G, s  z, h3 J( Z
: B& A! C8 i0 w& o0 fWORKDIR /user
# L% Y2 I0 d) S7 i  w# k& K1 q! v1 ]ADD ./frontend/application .0 ^: ~( z) p5 v) q7 a8 I; D7 @: }, i
RUN yarn
# g  ?$ g) l8 Y: c% c6 ?RUN rm -rf `grep -v "node_modules" | grep -v "yarn.lock"`
- Q, e4 [& F$ e$ b/ ndocker build 命令: ( 目录结构根据具体的项目调整 )6 q4 L/ c; Q, b* }$ ~

; |( v8 E. D+ [4 w- W# 这里的 Dockerfile 就是上面的内容, 编译后会生成名称为 node-application-cache 的 image
* k# Q0 Z6 R  t3 t! h2 cdocker build -f ./Dockerfile -t node-application-cache .
. n' v: c( Q( v  s$ k$ c测试修改后的实施时间
& b- Y8 I# i6 n, S# Edockerfile 和修改前的基本一样, 只改了第一行
1 y  G% c1 _# f0 a% _; i/ `, d, I( R$ ^
# FROM node:10.15-alpine as front-builder
# e& Q  @4 S5 [3 \( M# o+ d! O) C3 K" ]FROM node-application-cache:latest as front-builder
- r% g' q# \: J! m4 @: u编译时间如下:5 Q9 c$ @" I5 e. Y: I3 Q2 k
8 S" y  i- {" w5 q. a% Y" u# G
real    1m17.399s
( C; q* d3 c# Quser    0m0.836s8 }; I( _  M5 u" ^4 X& Z
sys     0m0.136s
7 C+ r0 A. Y7 F$ O使用了带前端缓存的 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-10-26 14:01 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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