当前位置:   article > 正文

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

docker build time

我们使用自动程序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源码:

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

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

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

tmp

   |

   |-  Dockerfile

   |

   |- 文件夹1

   |- 文件夹2


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57988
推荐阅读
相关标签
  

闽ICP备14008679号