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 ответов

15 просмотров

Зачем 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 группе, я уверен там тебе помогут, даже знаю кто

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта