Каждая инструкция, которую вы добавляете в Dockerfile при сборке, добавляет новый слой в сборку.Для каждой команды, выполняемой при сборке, слой изображения кэширует содержимое этого слоя поверх других.Слои можно кэшировать между сборками, если ожидается, что результаты будут одинаковыми каждый раз.
В вашем случае, если этап, на котором создается файл требований, не пройден, этот этап не будет считаться завершенным, то есть следующийкогда вы запустите сборку, она начнет этот шаг заново (что запустит установку для всего в requirements.txt
).
Одна вещь, которую вы можете сделать, чтобы сократить пересборки, - это ввести многоступенчатую сборку, гдепервый этап устанавливает требования, а второй этап запускает ваше приложение;таким образом, первый этап требований выполняется только при изменении requirements.txt
.
# FROM x as y
# will name this stage of the build as "dependencies"
FROM python:3.6-alpine as dependencies
RUN apk add --no-cache --virtual .fetch-deps \
zlib-dev \
jpeg-dev \
geoip-dev
ENV PYTHONUNBUFFERED 1
RUN mkdir /src
WORKDIR /src
ADD requirements.txt /src/
RUN pip install -r requirements.txt
# This is the next stage of the build building off your dependencies
FROM dependencies as application
RUN my_application.py