Como funciona a construção com Dockerfile

Cache

Ao executar novamente o comando abaixo a construção é muito mais rápida porque o Docker possui armazenamento em cache das camadas utilizadas para a construção da imagem:

$ docker build -t ubuntu-curl .
[+] Building 0.1s (7/7) FINISHED                                   docker:default
 => [internal] load build definition from Dockerfile                         0.0s
 => => transferring dockerfile: 168B                                         0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest             0.0s
 => [internal] load .dockerignore                                            0.0s
 => => transferring context: 2B                                              0.0s
 => [1/3] FROM docker.io/library/ubuntu:latest                               0.0s
 => CACHED [2/3] RUN apt update                                              0.0s
 => CACHED [3/3] RUN apt install curl --yes                                  0.0s
 => exporting to image                                                       0.0s
 => => exporting layers                                                      0.0s
 => => writing image sha256:f2f94ab20606290538d1b03c3b2cca78f6907eb47487c5f
 a8ed63fe4bbf16725                                                           0.0s
 => => naming to docker.io/library/ubuntu-curl                               0.0s

Destaque para:

 => CACHED [2/3] RUN apt update                                              0.0s
 => CACHED [3/3] RUN apt install curl --yes                                  0.0s

Desenho de como as camadas são construídas:

--no-cache

Caso não queira utilizar o cache inserir a instrução --no-cache:

Destaque para:

Mais instruções abaixo

Se o arquivo Dockerfile for alterado para adicionar mais instruções abaixo do que já estava escrito, o Docker utilizará o cache também:

No exemplo acima será utilizado o cache das camadas RUN apt update e RUN apt install curl --yes.

As camadas ficarão da seguinte maneira:

Destaque para:

Mais instruções no meio

Se alguma instrução em cache for alterada, serão utilizadas as camadas de cache até a primeira alteração encontrada. Por exemplo, se for inserida uma linha antes de RUN apt install curl --yes, será considerado o cache até a instrução RUN apt update somente.

Destaque para:

Armadilhas

Existem algumas armadilhas na construção do cache.

Verificar a versão mais recente do curl:

Se for desejado o versionamento da instalação do curl conforme abaixo pode ocorrer erro na construção da imagem porque somente a versão foi alterada:

Para evitar isso inserir uma única instrução passando pela atualização dos pacotes disponíveis para atualização dos repositórios e instalação do curl, conforme abaixo:

Com isso o cache não será um problema na instalação do comando curl.

Last updated