代码之家  ›  专栏  ›  技术社区  ›  TheeBen

有没有一种方法可以在应用引擎中安装一次软件包,以避免每次部署都很长?

  •  2
  • TheeBen  · 技术社区  · 6 年前

    我需要有ghostscript和imagemagick来做一些PDF编辑和OCR。我已经到了使用dockerfile的地步,但似乎 gcloud app deploy 每次都会从头开始。有没有一种方法可以通过安装一次软件包来加快速度?

    这是我的文件:

    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
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   David Maze    6 年前

    在dockerfile中提前移动这些步骤。

    Docker_的层缓存功能意味着它将__t重新构建一个步骤,在该步骤中,它已经从完全相同的基础图像运行该步骤。但是,一旦运行使缓存失效的步骤,之后的任何内容都不会被缓存。尤其是 ADD . 如果源树中的任何内容发生更改,步骤将使缓存失效。

    风格方面,我还改变了另外两件事。首先,出于类似的缓存原因,运行 apt-get update apt-get install 在同一个运行步骤中,因为以前从__update_缓存的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"]