но каждый раз, несмотря на то, что файл 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.
Зачем RUN pip install --user -r requirements.txt, если в той же статье указано RUN pip install --install-option="--prefix=/install" -r /requirements.txt
В чём разница? И правильно ли использовать —no-cache-dir?
https://stackoverflow.com/questions/45594707/what-is-pips-no-cache-dir-good-for
Правильно конечно
Спасибо, но я уже это видел и мне как раз установочные файлы не нужны, а нужно то, что будет запускаться, так что вроде как нормально. Просто не уверен насчёт копирования /root/.local Я так понимаю, что если делать --install-option="--prefix=/install" то копировать нужно будет /install вместо /root/.local и всё, т.е. по сути разницы нет.
я просто не достаточно вьехал в тему, поэтому вот тебе еще один ответ со стак оверфлоу https://stackoverflow.com/questions/25333640/pip-python-differences-between-install-option-prefix-and-root-and
ну и вообще, грамотнее задать этот вопрос в python группе, я уверен там тебе помогут, даже знаю кто
Обсуждают сегодня