关于docker build时间过久及add不能跨文件的问题

我们使用自动程序buildimage镜像,其中过程中发现很多诡异的问题, 有很多尚在解决中, 但是同时buildimage, 高频度的连续buildimage依然有部稳定的情况,特别在超过5G以上的镜像时,发生的概率极高.

我们先说两个问题:

    1. docker build 时间过久,其中绝大部分时间在Sending build context to Docker daemon(dockerfile的编写优化方案,网上很多此处不赘述)

    2. dockerfile add时,不能使用本级目录以外的其他目录及文件.

以上两个问题都是因为一个设计问题影响所致.

根文件

   |

   |-  Dockerfile

   |

   |- 文件夹1

   |- 文件夹2

docker build upload时间过久是因为启动时加载本层级目录所有的文件, 如上述加载根文件的所有文件,包括文件夹1,文件夹2, 如果本级目录文件较多,则加载时间是非常慢,因此build dockerfile时应在一个叶子文件夹中执行build.

相关client源码:

// opts.ContextDir 是 build的文件夹
if opts.ContextDir != "" {
        if opts.InputStream != nil {
            return ErrMultipleContexts
        }
        var err error
        // 加载本级目录,也是影响时间核心问题
        if opts.InputStream, err = createTarStream(opts.ContextDir, opts.Dockerfile); err != nil {
            return err
        }
}

由于流加载是包括本级目录的,故此upload的时间会过长.

docker add时使用也是由此处加载有关, 程序会将本地文件夹拷贝到/var/lib/docker/tmp中,从而在tmp中向容器内部拷贝,故此他时没有办法跨目录的.

tmp

   |

   |-  Dockerfile

   |

   |- 文件夹1

   |- 文件夹2


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值