有没有办法在 App Engine 中安装一次包以避免每次都进行长时间部署?
Is there a way to install packages in app engine once to avoid the long deploy each time?
我需要 ghostscript 和 ImageMagick 来进行一些 PDF 编辑和 OCR。我已经到了使用 Dockerfile 的地步,但似乎 gcloud app deploy
每次都会从头开始。有没有办法通过安装一次软件包来加快速度?
这是我的 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
将这些步骤移到 Docker 文件的前面。
Docker 的图层缓存功能意味着它不会重建已经 运行 来自完全相同基础图像的步骤。但是,一旦您 运行 一个使缓存无效的步骤,之后的任何内容都不会被缓存。特别是 ADD .
如果源代码树中的任何内容发生变化,步骤将使缓存无效。
在风格方面,我会改变另外两件事。首先,出于类似的缓存原因,运行 apt-get update
和 apt-get install
在同一个 运行 步骤中很重要,因为先前缓存的来自“更新”的 URL 可能会变得无效。其次,我不会费心尝试设置一个 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"]
我需要 ghostscript 和 ImageMagick 来进行一些 PDF 编辑和 OCR。我已经到了使用 Dockerfile 的地步,但似乎 gcloud app deploy
每次都会从头开始。有没有办法通过安装一次软件包来加快速度?
这是我的 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
将这些步骤移到 Docker 文件的前面。
Docker 的图层缓存功能意味着它不会重建已经 运行 来自完全相同基础图像的步骤。但是,一旦您 运行 一个使缓存无效的步骤,之后的任何内容都不会被缓存。特别是 ADD .
如果源代码树中的任何内容发生变化,步骤将使缓存无效。
在风格方面,我会改变另外两件事。首先,出于类似的缓存原因,运行 apt-get update
和 apt-get install
在同一个 运行 步骤中很重要,因为先前缓存的来自“更新”的 URL 可能会变得无效。其次,我不会费心尝试设置一个 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"]