如何使Docker Compose构建更快?

时间:2017-09-23 02:00:13

标签: docker docker-compose docker-machine

在Docker Machine环境中构建新的Docker镜像时,我注意到docker-compose build app命令在开始实际构建过程之前冻结了10-12分钟:

$ docker-compose build app
Building app

... 10 minutes ...

Step 1/10 : FROM ruby:2.4.1
 ---> e7ca4a0b5b6d
...

我尝试使用--verbose参数使其更具描述性,但这实际上没有帮助:

$ docker-compose --verbose build
compose.config.config.find: Using configuration files: ./docker-compose.yml
docker.auth.find_config_file: Trying paths: ['/Users/vtambourine/.docker/config.json', '/Users/vtambourine/.dockercfg']
docker.auth.find_config_file: Found file at path: /Users/vtambourine/.docker/config.json
docker.auth.load_config: Couldn't find 'auths' or 'HttpHeaders' sections
docker.auth.parse_auth: Auth data for {0} is absent. Client might be using a credentials store instead.
compose.cli.command.get_client: docker-compose version 1.14.0, build c7bdf9e
docker-py version: 2.3.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016
compose.cli.command.get_client: Docker base_url: https://146.185.007.007:2376
compose.cli.command.get_client: Docker version: KernelVersion=4.9.0-3-amd64, Arch=amd64, BuildTime=2017-09-05T19:58:57.182575033+00:00, ApiVersion=1.30, Version=17.06.2-ce, MinAPIVersion=1.12, GitCommit=cec0b72, Os=linux, GoVersion=go1.8.3
compose.project.build: db uses an image, skipping
compose.service.build: Building app
compose.cli.verbose_proxy.proxy_callable: docker build <- (pull=False, cache_from=None, stream=True, nocache=False, labels=None, tag='aerostat:app', buildargs={}, forcerm=False, rm=True, path='/Users/vtambourine/Code/aerostat', dockerfile='containers/development/Dockerfile')
docker.api.build._set_auth_headers: Looking for auth config
docker.api.build._set_auth_headers: Sending auth config (u'auths')
compose.cli.verbose_proxy.proxy_callable: docker build -> <generator object _stream_helper at 0x10b61f230>

... 10 minutes ...

Step 1/10 : FROM ruby:2.4.1
---> e7ca4a0b5b6d

有没有办法了解,目前的进展以及如何让构建过程更快?

1 个答案:

答案 0 :(得分:5)

非常感谢Tarun Lalwani我了解了Docker的背景。

构建上下文是位于指定位置的一组文件。我的(最简单的)案例位置是. - 项目目录。构建过程的第一件事是将整个上下文复制到守护进程。由于我使用Docker Machine来部署我的容器,因此Docker守护程序位于远程主机上,这导致整个项目文件夹通过Internet发送到服务器。

对于所有不必要的生产文件夹,例如.gittmp,总大小几乎为200 MB:

$ docker build -t my-app -f containers/production/Dockerfile .
Sending build context to Docker daemon  187.9MB

通过使用简单的.dockerignore规则,我能够大大减少它:

$ docker build -t my-app -f containers/production/Dockerfile .
Sending build context to Docker daemon  151kB

获得的经验 - 使用.dockerignore

详细说明可在Dockerfile reference找到。