Introdução ao cache do Docker

Introdução ao Docker

Tim Sangster

Software Engineer @ DataCamp

Docker build

Baixando e descompactando um arquivo com instruções do Docker.

RUN curl http://example.com/example_folder.zip
RUN unzip example_folder.zip

Vai alterar o sistema de arquivos e adicionar:

/example_folder.zip
/example_folder/
    example_file1
    example_file2

São essas mudanças que ficam salvas na imagem.

Introdução ao Docker

Instruções do Docker ligadas a mudanças no sistema de arquivos

Cada instrução no Dockerfile está ligada às mudanças que fez no sistema de arquivos da imagem.

FROM docker.io/library/ubuntu
 => Fornece um sistema de arquivos base com tudo para rodar o Ubuntu
COPY /pipeline/ /pipeline/
 => Cria a pasta /pipeline/
 => Copia vários arquivos para /pipeline/
RUN apt-get install -y python3
 => Adiciona python3 em /var/lib/
Introdução ao Docker

Camadas do Docker

  • Camada do Docker: todas as mudanças causadas por uma instrução do Dockerfile.
  • Imagem Docker: todas as camadas criadas durante um build

--> Imagem Docker: todas as mudanças no sistema de arquivos por todas as instruções.

Durante o build, o Docker mostra em qual camada está trabalhando:

 => [1/3] FROM docker.io/library/ubuntu 
 => [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y python3
Introdução ao Docker

Cache do Docker

Builds consecutivos são bem mais rápidos porque o Docker reutiliza camadas que não mudaram.

Reexecutando um build:

 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3

Reexecutando com mudanças:

 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y R
Introdução ao Docker

Entendendo o cache do Docker

Saber quando as camadas estão em cache ajuda a entender por que às vezes a imagem não muda após rebuild.

  • O Docker não sabe quando sai uma nova versão do python3.
  • O Docker usa camadas em cache porque as instruções são idênticas a builds anteriores.
 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3
Introdução ao Docker

Entendendo o cache do Docker

Ajuda a escrever Dockerfiles que constroem mais rápido, pois nem todas as camadas precisam ser recriadas.

No Dockerfile a seguir, todas as instruções precisam ser reconstruídas se o arquivo pipeline.py mudar:

FROM ubuntu
COPY /app/pipeline.py /app/pipeline.py
RUN apt-get update
RUN apt-get install -y python3
 => [1/4] FROM docker.io/library/ubuntu
 => [2/4] COPY /app/pipeline.py /app/pipeline.py
 => [3/4] RUN apt-get update
 => [4/4] RUN apt-get install -y python3
Introdução ao Docker

Entendendo o cache do Docker

Ajuda a escrever Dockerfiles que constroem mais rápido, pois nem todas as camadas precisam ser recriadas.

No Dockerfile a seguir, só o COPY precisa ser reexecutado.

FROM ubuntu
RUN apt-get update
RUN apt-get install -y python3
COPY /app/pipeline.py /app/pipeline.py
 => [1/4] FROM docker.io/library/ubuntu
 => CACHED [2/4] RUN apt-get update
 => CACHED [3/4] RUN apt-get install -y python3
 => [4/4] COPY /app/pipeline.py /app/pipeline.py
Introdução ao Docker

Vamos praticar!

Introdução ao Docker

Preparing Video For Download...