Вступ до 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
=> Дає нам стартову файлову систему з усіма файлами для запуску Ubuntu
COPY /pipeline/ /pipeline/
=> Створює теку /pipeline/
=> Копіює кілька файлів у теку /pipeline/
RUN apt-get install -y python3
=> Додає python3 у /var/lib/
--> Образ Docker: усі зміни файлової системи від усіх інструкцій Dockerfile.
Під час збирання 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