Переместите эти шаги ранее в Dockerfile.
Функция кэширования слоев Docker означает, что он не будет перестраивать шаг, на котором он уже запущен, из того же базового образа.Однако, как только вы выполните шаг, который делает недействительным кеш, после этого ничего не будет кешировано.В частности, шаг ADD .
лишит законной силы кэш, если что-либо изменится в вашем дереве исходных текстов.
По стилю я бы изменил две другие вещи.Во-первых, по аналогичным причинам кэширования важно запускать apt-get update
и apt-get install
на одном шаге RUN, поскольку ранее кэшированные URL-адреса из «update» могут стать недействительными.Во-вторых, я не стал бы пытаться настроить виртуальную среду Python, так как образ Docker уже предоставляет изолированную файловую систему и установку Python.
Это в конечном итоге оставляет вам:
FROM gcr.io/google-appengine/python
LABEL python_version=python3.6
RUN apt-get update \
&& apt-get install -y ghostscript imagemagick
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/
EXPOSE 8000
CMD ["gunicorn", "-b", ":8000", "main:app"]