build context for docker image very large
我在主机上创建了几个不同的目录,试图了解Docker,只是为了保持Dockerfiles的组织性。我刚运行的Dockerfile如下:
1 2 3 4 5 | FROM crystal/centos MAINTAINER crystal ADD ./rpms/test.rpm ./rpms/ RUN yum -y --nogpgcheck localinstall /rpms/test.rpm |
我的实际转速只有1 GB。但是当我尝试执行
docker客户机将整个"构建上下文"发送到docker守护进程。构建上下文(默认情况下)是
您可以设置一个
或者,您可以将您的
我把dockerfile和docker-compose.yml移到一个子文件夹中,修复了它,效果很好。显然,Docker将当前文件夹发送到守护进程,我的文件夹是9 Gigs。
更新2019
从Docker v18.06开始,有一个选项可以使用名为build kit的新图像生成器。
它与Docker预捆绑在一起,不需要安装任何东西。它与
下面是在build目录中使用大量未使用的文件构建图像的示例:
传统Docker构建:
1 2 3 4 5 6 7 8 | $ 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:
1 2 3 4 5 6 7 8 9 10 11 12 | $ 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 |
唯一的变化是
请注意,
在我的例子中,当我使用错误的
如果您有一个
1 | ag --path-to-ignore .dockerignore --files-with-matches |
注意,一些
更多评论请参见本期Github:https://github.com/moby/moby/issues/16056
我和自由泳有同样的问题。然而,我是从我的上下文中创建一个目录。所以-f参数是正确的,上下文是错误的。
1 2 3 | project | -------docker-dir |
从docker dir开始建造,以下是很好的
1 | docker build -t br_base:0.1 . |
从dock目录生成时,生成上下文已更改。因此,我需要更改命令中的上下文。上下文由上述命令中的"."提供。
来自项目目录的新命令应该是
1 | docker build -t br_base:0.1 ./base |
这里的上下文由"./base"给出。