Actualización 2019
A partir de Docker v18.06, hay una opción para usar un nuevo generador de imágenes llamado Build Kit .
Está incluido con el Docker, no es necesario instalar nada. Es compatible con la Dockerfilesintaxis, no es necesario cambiar el Dockerfile.
Legacy Docker Build vs New Docker BuildKit
Aquí hay un ejemplo de cómo construir una imagen con un gran archivo sin usar en el directorio de compilación:
Docker Legacy Build:
$ 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
Nuevo Docker BuildKit:
$ 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
El único cambio es la DOCKER_BUILDKIT=1variable de entorno, la diferencia en el tiempo es enorme.
.dockerignore Expediente
Tenga en cuenta que el .dockerignorearchivo sigue siendo válido y útil. Algunos Dockerfilecomandos como COPY . .seguirán teniendo en cuenta las .dockerignorereglas. Pero los archivos secundarios en el directorio de compilación (no referenciados en el Dockerfile) ya no se copian como un "contexto de compilación" por parte del BuildKit.