Введение в Docker
Tim Sangster
Software Engineer @ DataCamp
Загрузка и распаковка файла с помощью инструкций Docker.
RUN curl http://example.com/example_folder.zip
RUN unzip example_folder.zip
Изменит файловую систему и добавит:
/example_folder.zip
/example_folder/
example_file1
example_file2
Именно эти изменения хранятся в образе.
Каждая инструкция в 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: все изменения файловой системы всеми инструкциями Dockerfile.
В процессе сборки Docker сообщает, над каким слоем работает:
=> [1/3] FROM docker.io/library/ubuntu
=> [2/3] RUN apt-get update
=> [3/3] RUN apt-get install -y 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
Повторная сборка с изменениями:
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> [3/3] RUN apt-get install -y R
Понимание того, когда слои кэшируются, объясняет, почему образы иногда не обновляются после пересборки.
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> CACHED [3/3] RUN apt-get install -y python3
Это помогает писать 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
Это помогает писать 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