Введение в кэширование Docker

Введение в Docker

Tim Sangster

Software Engineer @ DataCamp

Сборка Docker

Загрузка и распаковка файла с помощью инструкций Docker.

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

Изменит файловую систему и добавит:

/example_folder.zip
/example_folder/
    example_file1
    example_file2

Именно эти изменения хранятся в образе.

Введение в Docker

Инструкции Docker и изменения файловой системы

Каждая инструкция в Dockerfile связана с изменениями, которые она вносит в файловую систему образа.

FROM docker.io/library/ubuntu
 => Gives us a file system to start from with all files needed to run Ubuntu
COPY /pipeline/ /pipeline/
 => Creates the /pipeline/ folder
 => Copies multiple files in the /pipeline/ folder
RUN apt-get install -y python3
 => Add python3 to /var/lib/
Введение в Docker

Слои Docker

  • Слой Docker: все изменения, вызванные одной инструкцией Dockerfile.
  • Образ Docker: все слои, созданные в ходе сборки

--> Образ Docker: все изменения файловой системы всеми инструкциями Dockerfile.

В процессе сборки Docker сообщает, над каким слоем работает:

 => [1/3] FROM docker.io/library/ubuntu 
 => [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y python3
Введение в Docker

Кэширование Docker

Повторные сборки выполняются намного быстрее, так как Docker повторно использует неизменившиеся слои.

Повторная сборка:

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

Повторная сборка с изменениями:

 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y R
Введение в Docker

Понимание кэширования Docker

Понимание того, когда слои кэшируются, объясняет, почему образы иногда не обновляются после пересборки.

  • Docker не знает, когда выходит новая версия python3.
  • Docker использует кэшированные слои, поскольку инструкции совпадают с предыдущими сборками.
 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3
Введение в Docker

Понимание кэширования Docker

Это помогает писать Dockerfile, которые собираются быстрее, так как не все слои требуют пересборки.

В следующем Dockerfile все инструкции потребуют пересборки при изменении файла pipeline.py:

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
Введение в Docker

Понимание кэширования Docker

Это помогает писать Dockerfile, которые собираются быстрее, так как не все слои требуют пересборки.

В следующем Dockerfile пересборка потребуется только для инструкции COPY.

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
Введение в Docker

Давайте потренируемся!

Введение в Docker

Preparing Video For Download...