docker - 有没有办法在应用程序引擎中安装一次软件包以避免每次长时间部署?

标签 docker google-app-engine google-app-engine-python app-engine-flexible

我需要使用 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/

相关文章:

docker - 'docker ps' 中的 COMMAND 是什么意思?

http - ListenAndServe 返回 net.DNSError "nodename nor servname provided"

java - Spring GAE/J Could Not find API 版本错误

google-app-engine - 更快的 Google App Engine 托管 VM 部署(Python 兼容环境)?

python - AppEngine urlfetch validate_certificate=False/None 不被尊重

google-app-engine - 本地单元测试 Google Cloud Storage 签名 URL

maven - 使用 dockerfile-maven-plugin 标记创建的图像

docker - JupyterHub产生的Jupyter Notebook容器没有外部网络访问权限

google-app-engine - 是否可以获取GAE 上的日志点?

google-app-engine - 在 AppEngine 上运行的持续集成工具