Установка Docker и pip: избегайте установки всех пакетов, когда некоторые уже установлены - PullRequest
0 голосов
/ 19 марта 2019

Я использую docker compose для сборки стека Python-проекта. Это фрагмент dockerfile, который отвечает требованиям.

# Requirements are installed here to ensure they will be cached.
COPY ./requirements /requirements
RUN pip install --no-cache-dir -r /requirements/production.txt \
    && rm -rf /requirements

С этой конфигурацией я могу кешировать требования, но когда я изменяю production.txt (например, обновляя даже один пакет), Docker переустанавливает все заново.

Я знаю, что Docker необходимо создать новый контейнер, но есть ли способ избежать переустановки всего, кроме установки только того, что необходимо?

1 Ответ

0 голосов
/ 19 марта 2019

В этом случае нет, нет способа избежать переустановки всего в production.txt.

Из официальных документов , в разделе Leverage build cache:

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

Поскольку вы изменили production.txt, кэш-память становится недействительной, и докер запускается с ранеедопустимый слой и устанавливает все.

Теперь, если у вас есть несколько файлов requirements.txt, вы можете использовать некоторое кэширование, выполнив отдельные шаги копирования и установки:

COPY requirements1.txt
RUN pip install --no-cache-dir -r requirements1.txt

COPY requirements2.txt
RUN pip install --no-cache-dir -r requirements2.txt

Этомогут иметь и другие недостатки, но это может позволить вам частично сократить время переустановки, поместив долгоживущие пакеты, которые вряд ли будут обновляться в requirements1.txt, и менее стабильные в requirements2.txt.Изменение requirements2.txt затем приведет к переустановке только этих требований.

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