我已经在我的主机上创建了两个不同的目录,因为我试图学习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映像时,是否还有其他我不知道的事情?当我在主机上的其他目录中构建更多图像时,我的内存是否在积累?
您可以设置。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。