关于docker build时间过久及add不能跨文件的问题
我们使用自动程序buildimage镜像,其中过程中发现很多诡异的问题, 有很多尚在解决中, 但是同时buildimage, 高频度的连续buildimage依然有部稳定的情况,特别在超过5G以上的镜像时,发生的概率极高.我们先说两个问题: 1. docker build 时间过久,其中绝大部分时间在Sending build context to Docker daemon
我们使用自动程序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)