我需要使用 Ghostscript 和 ImageMagick 来进行一些 PDF 编辑和 OCR。我已经到了使用 Dockerfile 的地步,但似乎每次都会从头开始。有没有办法通过安装一次软件包来加快速度?
这是我的 Dockerfile:
ROM gcr.io/google-appengine/python
LABEL python_version=python3.6
RUN virtualenv --no-download /env -p python3.6
# Set virtualenv environment variables. This is equivalent to running
# source /env/bin/activate
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/
RUN pip install -r requirements.txt
ADD . /app/
RUN apt-get update
RUN apt-get install imagemagick -y
RUN apt-get install ghostscript
CMD exec gunicorn -b :$PORT main:app
最佳答案
将这些步骤移到 Dockerfile 的前面。
Docker 的层缓存功能意味着它不会重建已经从完全相同的基础镜像运行过的步骤。但是,一旦您运行使缓存无效的步骤,此后就不会缓存任何内容。特别是,如果源树中的任何内容发生更改,ADD .
步骤将使缓存失效。
就风格而言,我会改变另外两件事。首先,出于类似的缓存原因,在同一 RUN 步骤中运行 apt-get update 和 apt-get install 非常重要,因为之前缓存的 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"]
关于docker - 有没有办法在应用程序引擎中安装一次软件包以避免每次长时间部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370703/