背景
最近在构建一个前端镜像的时候,docker build特别慢,需要10分钟,而前端为nginx静态文件,总共也才10MB。
Sending build context to Docker daemon
这部时间特别长,文件传输特别大。
![](https://img.haomeiwen.com/i25181/ddc09aa5da9fa00e.png)
原因
观察构建过程中的记录, 在Sending build context to Docker daemon
步骤发送了大量的文件,且很缓慢。
后来看了下docker build构建机制,
docker在构建过程中,会将当前文件夹下的文件 发送给docker 的deamon
而前端文件往往在研发和构建过程中会下载大量的node_modules,下面下有大量的子文件夹及内容。 这些大量的小文件都需要传到到构建环境。 构建会特别缓慢。
![](https://img.haomeiwen.com/i25181/5770e732b3794eff.png)
node_modules 如果是前端问题万恶之源。
解决方案 --
- 由于前端项目,dockerfile一般都放在git仓库根目录, 比较好的方式就是构建过程中不传输这些node_modules目录。 采用git自身的方案, 添加
.dockerignore
文件。
src
node_modules
- 也可以在构建过程中,找个空文件夹中,只存放需要进行参与构建镜像的文件。
验证
优化后 文件build context 传输内容大大减小。
![](https://img.haomeiwen.com/i25181/13b7f06c33b77891.png)
果然在CICD中构建时间从5分钟 ,优化到30秒。
![](https://img.haomeiwen.com/i25181/6c7c7937f6f638f1.png)
网友评论