Как COPY в отдельных строках помогает с меньшим количеством недействительных кэшей - PullRequest
0 голосов
/ 27 марта 2020

Docker документация предлагает следующие рекомендации:

Если у вас есть несколько шагов Dockerfile, которые используют разные файлы из вашего контекста, скопируйте их отдельно, а не все сразу. Это гарантирует, что кэш сборки каждого шага становится недействительным (что приводит к повторному запуску шага), если изменяются специально необходимые файлы.

Например:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

Приводит к меньшему количеству недействительности кэша для шага RUN, чем при установке COPY. / tmp / перед ним.

Мой вопрос: как, как это помогает?

В любом случае, если файл require.txt не изменяется тогда pip install получит мне тот же результат, так почему же важно, чтобы в лучшем случае сценарий require.txt был единственным файлом в каталоге (при установке pip)?

На с другой стороны, он создает еще один слой на изображении, чего я бы не хотел.

1 Ответ

0 голосов
/ 27 марта 2020

Скажем, у вас очень простое приложение

$ ls
Dockerfile  main.py  requirements.txt

С соответствующим Dockerfile

FROM python:3
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["./main.py"]

Теперь скажем, что вы изменили только скрипт main.py. Поскольку файл requirements.txt не изменился, RUN pip install ... может повторно использовать кэш изображений Docker. Это позволяет избежать повторного запуска pip install, который может загрузить много пакетов и занять некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...