我在python环境中使用Google AppEngine Flexible 。现在,我有两个服务:default和worker,它们共享相同的代码库,由app.yaml和配置worker.yaml。现在,我需要安装本机C ++库,因此必须切换到“ 自定义运行时”并添加Dockerfile。
app.yaml
worker.yaml
这是gcloud beta app gen-config --custom命令生成的Dockerfile
gcloud beta app gen-config --custom
FROM 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/ CMD exec gunicorn --workers=3 --threads=3 --bind=:$PORT aces.wsgi
以前,我app.yaml和worker.yaml每个人都有自己的entrypoint:配置,该配置指定了启动服务所需的命令。
entrypoint:
因此,我的问题是如何使用两个不同的命令来启动服务?
编辑1
到目前为止,我能够通过CMD为每个服务的每次部署重写dockerfile中的行来解决此问题。但是,我对这种解决方案不太满意。
CMD
gcloud app deploy该命令具有--image- url允许从GCR设置图片网址的标志。我还没有进行过研究,但是似乎我可以将图片上传到GCR并使用网址,因为它不会经常更改
gcloud app deploy
--image- url
由于Dockerfile名称不能更改,因此不必修改Dockerfile的唯一方法是将每个服务存储在其自己的单独目录中。明确分离,每个服务都有其自己的Dockerfile和/或启动配置。
Dockerfile
但这提出了一个问题:如何处理多个服务共享的代码?使用符号链接(非常适合在标准环境服务之间共享代码)对于灵活的环境服务不起作用,请参阅[GAE项目中的灵活环境模块之间的共享代码。
我看到了几种可能的方法,都不是很理想的方法,但是可能比您目前拥有的方法更具吸引力:
requirements.txt