提问者:小点点

构建docker映像的上下文非常大


我已经在我的主机上创建了两个不同的目录,因为我试图学习Docker,只是为了让我的DockerFile井然有序。我刚才运行的Dockerfile如下所示:

FROM crystal/centos
MAINTAINER crystal

ADD ./rpms/test.rpm ./rpms/ 
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm 

我的实际rpm只有1GB。但是当我尝试做sudo docker build-t=“crystal/test”时,将生成上下文发送到Docker daemon 3.5 GB。在您继续构建Docker映像时,是否还有其他我不知道的事情?当我在主机上的其他目录中构建更多图像时,我的内存是否在积累?


共3个答案

匿名用户

您可以设置。dockerignore文件以使Docker忽略某些文件。你可能想尝试一下。

或者,您可以将rpms文件夹移动到Dockerfile上方一个目录级别,并且仅使用符号链接测试。rpm进入Dockerfile目录。

您通常需要添加。git文件夹到。dockerignore这是导致150MB内存不足的原因-

匿名用户

从Docker v18开始。06有一个选项可以使用名为Build Kit的新图像生成器。

它与Docker预先绑定,无需安装任何东西。它与Dockerfile语法向后兼容,无需更改Dockerfile

下面是一个在构建目录中使用大量未使用文件构建映像的示例:

传统Docker构建:

$ time docker image build --no-cache .
Sending build context to Docker daemon  4.315GB
[...]
Successfully built c9ec5d33e12e

real    0m51.035s
user    0m7.189s
sys 0m10.712s

新Docker BuildKit:

$ time DOCKER_BUILDKIT=1 docker image build --no-cache .
[+] Building 0.1s (5/5) FINISHED                                                
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 37B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
[...]
 => => writing image sha256:ba5bca3a525ac97573b2e1d3cb936ad50cf8129eedfa9  0.0s

real    0m0.166s
user    0m0.034s
sys 0m0.026s

唯一的变化是DOCKER\u BUILDKIT=1环境变量,时间上的差异很大。

请注意,。dockerignore文件仍然有效且有用。一些Dockerfile命令,如COPY仍将考虑。dockerignore规则。但是BuildKit不再将build目录中的侧文件(在Dockerfile中未引用)复制为“build context”。

匿名用户

我固定它移动我的Dockerfile和docker-compose.yml到一个子文件夹,它工作得很好。显然docker将当前文件夹发送到守护进程,而我的文件夹是9个gigs。