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.0sDestaque para:
=> CACHED [2/3] RUN apt update 0.0s
=> CACHED [3/3] RUN apt install curl --yes 0.0sDesenho 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