如何使Docker Compose构build速度更快?

在Docker Machine环境中构build新的Docker镜像时,我注意到docker-compose build app命令在启动实际构build过程之前冻结了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 

有什么方法可以理解,发生了什么以及如何使构build过程更快?

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

构build上下文是位于指定位置的一组文件。 我的(最微不足道的)情况是简单的. – 项目目录。 构build过程的第一件事就是将整个上下文复制到守护进程。 由于我使用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规则,我可以大大减less它:

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

获得的教训 – 使用.dockerignore

详细的解释可以在Dockerfile参考find。