Introdução ao Docker
Tim Sangster
Software Engineer @ DataCamp
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.
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/
--> 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
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
Saber quando as camadas estão em cache ajuda a entender por que às vezes a imagem não muda após rebuild.
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> CACHED [3/3] RUN apt-get install -y python3
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
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