2017-09-23 5 views
1

Alors que la construction de nouvelles images Docker dans l'environnement de la machine Docker je remarquai que docker-compose build app gèle commande pendant 10-12 minutes avant le début de processus de construction réelle:Comment rendre Docker Compose plus rapide?

$ docker-compose build app 
Building app 

... 10 minutes ... 

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

J'ai essayé d'utiliser le paramètre --verbose pour le rendre plus descriptif, mais n'a pas vraiment aidé:

$ 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 

Y at-il un moyen de comprendre, ce qui se passe et comment rendre le processus de construction plus rapide?

+0

En attente, essayez de cliquer sur CTRL + C et voir si vous obtenez une trace d'exception? –

+0

@TarunLalwani non, je n'ai rien, juste un arrêt silencieux. – vtambourine

+0

Quelle est la sortie de 'du -sh .' dans le dossier de composition? –

Répondre

1

Un grand merci à Tarun Lalwani J'ai appris le contexte de Docker.

Le contexte de génération est un ensemble de fichiers situés à un emplacement spécifié. Est-ce que mon emplacement (le plus trivial) est simplement . - répertoire du projet. La première chose qu'un processus de construction fait est de copier le contexte entier au démon. Comme j'utilise Docker Machine pour déployer mes conteneurs, le démon Docker se trouve sur l'hôte distant, ce qui provoque l'envoi du dossier de projet entier au serveur via Internet.

Avec tous les inutiles pour les dossiers de production, tels que .git, tmp, la taille totale était bien près de 200 MB:

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

En utilisant .dockerignore simples règles que j'ai pu réduire de façon spectaculaire:

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

Leçon apprise - utilisez .dockerignore.

Explication détaillée se trouve à Dockerfile reference.