172 похожих чатов

Всем привет. Пытаюсь закэшировать слой где устанавливаются requirements для python кода,

но каждый раз, несмотря на то, что файл requirements.txt не меняется слой всё равно обновляется. В чём моежт быть проблема?

$ cat Dockerfile
FROM slim:3.7.4 AS compile
COPY requirements.txt ./
RUN pip install --user -r requirements.txt

FROM slim:3.7.4 AS runtime
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libglib2.0-0=2.58.3-2+deb10u2 \
libsm6=2:1.2.3-1 \
libxext6=2:1.3.3-1+b2 \
libxrender-dev=1:0.9.10-1 && \
rm -rf /var/lib/apt/lists/*

COPY --from=compile /root/.local /root/.local

COPY . /app
WORKDIR /app

ARG BUILD_VERSION
ENV VERSION=$BUILD_VERSION

CMD ["python", "./main.py"]

$ container-diff diff app:b8f2001e app:2744896b --type=history
-----History-----

Docker history lines found only in app:b8f2001e:
-/bin/sh -c #(nop) COPY dir:aa510d358967295905decc3abb3983f9fa6c57d805c19ee9b14ba43c5c870bed in /root/.local
-/bin/sh -c #(nop) COPY dir:5f73897833ffdc4bd0ae4b7b9ddfce616db0cd650d0169fa838d571675a0fb81 in /app
-/bin/sh -c #(nop) ENV VERSION=b8f2001e


Docker history lines found only in app:2744896b:
-/bin/sh -c #(nop) COPY dir:c5a46675bee663f07594723352a36148ae35381336273e3b8b3e8fea30f5c80f in /root/.local
-/bin/sh -c #(nop) COPY dir:14488acbb3f81e13fd8d5eee971811e1cd47ab73302dd88e93d427f4a6cdb740 in /app
-/bin/sh -c #(nop) ENV VERSION=2744896b

$ cat requirements.txt
sanic==19.9.0
tenacity==5.0.4
injector==0.17.0
apscheduler==3.6.3
msgpack==0.6.2
httpx==0.11.1
aiohttp==3.6.2
python-socketio==4.3.0
kombu==4.6.3
app-core @ git+https://.../app-core.git@v1.13.0
app-data-types @ git+https://.../app-data-types.git@v0.13.6
app-utils @ git+https://.../app-utils.git@v1.19.14

Например, судя вот по такой статье, оно должно кэшироваться: https://blog.realkinetic.com/building-minimal-docker-containers-for-python-applications-37d0272c52f3
Rewriting our Dockerfile this way makes use of Docker’s layer caching and skips installing Python requirements if the requirements.txt file does not change.

8 ответов

3 просмотра

Зачем RUN pip install --user -r requirements.txt, если в той же статье указано RUN pip install --install-option="--prefix=/install" -r /requirements.txt

it- Автор вопроса
Ilya Pavlov
Зачем RUN pip install --user -r requirements.txt, ...

В чём разница? И правильно ли использовать —no-cache-dir?

it
В чём разница? И правильно ли использовать —no-cac...

https://stackoverflow.com/questions/45594707/what-is-pips-no-cache-dir-good-for

it- Автор вопроса
█ Anton
https://stackoverflow.com/questions/45594707/what-...

Спасибо, но я уже это видел и мне как раз установочные файлы не нужны, а нужно то, что будет запускаться, так что вроде как нормально. Просто не уверен насчёт копирования /root/.local Я так понимаю, что если делать --install-option="--prefix=/install" то копировать нужно будет /install вместо /root/.local и всё, т.е. по сути разницы нет.

it
Спасибо, но я уже это видел и мне как раз установо...

я просто не достаточно вьехал в тему, поэтому вот тебе еще один ответ со стак оверфлоу https://stackoverflow.com/questions/25333640/pip-python-differences-between-install-option-prefix-and-root-and

it
Спасибо, но я уже это видел и мне как раз установо...

ну и вообще, грамотнее задать этот вопрос в python группе, я уверен там тебе помогут, даже знаю кто

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
всем трям! Кто-нибудь работал со связкой werf + harbor + trivy ? Во время сборки образа выходит ошибка "PROJECTPOLICYVIOLATION: current image with "Pending" status of vulnerab...
Авессалом
11
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
Карта сайта