Atualização 2019
A partir do Docker v18.06, há uma opção para usar um novo construtor de imagens chamado Build Kit .
Ele vem com o Docker, não é necessário instalar nada. É compatível com a Dockerfile
sintaxe, não há necessidade de alterar o Dockerfile
.
Legado Docker Build vs Novo Docker BuildKit
Aqui está um exemplo de criação de uma imagem com um enorme arquivo não utilizado no diretório de construção:
Construção herdada do 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
Novo BuildKit do Docker:
$ 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
A única mudança é a DOCKER_BUILDKIT=1
variável de ambiente, a diferença no tempo é enorme.
.dockerignore
Arquivo
Observe que o .dockerignore
arquivo ainda é válido e útil. Alguns Dockerfile
comandos como COPY . .
ainda levarão em conta as .dockerignore
regras. Mas os arquivos laterais no diretório de construção (não mencionados no Dockerfile
) não estão mais sendo copiados como um "contexto de construção" pelo BuildKit.