我想自定义(Python)标准运行时托管VM。 理论上,这应该可以通过向VM Dockerfile添加一些额外的命令来实现。
Google's documentation表示首次部署App时会自动生成VM Dockerfile;
如果您使用的是标准运行时,SDK将在您第一次运行gcloud preview app deploy命令时为您创建Dockerfile。该文件将存在于预定位置:
- 如果您使用Java进行开发,Dockerfile将出现在已编译的Web应用程序存档目录(WAR)的根目录中
- 如果您使用Python或Go进行开发,则Dockerfile将显示在应用程序目录的根目录中。
确实可以添加额外的命令;
您可以向此文件添加更多docker命令,同时继续使用标准运行时声明运行和部署您的应用程序。
然而,在实践中,Dockerfile会在部署竞争后立即自动删除,从而阻止任何自定义。
是否有人设法将Dockerfile命令添加到具有标准运行时的托管虚拟机?任何帮助将不胜感激。
答案 0 :(得分:2)
我尝试了同样的事情并没有成功。然而,有一种相同的做法,我回到了。
您可以创建一个模仿标准运行时的自定义运行时。
您可以这样做,因为Google为所有标准运行时提供了Docker base images。因此,模仿标准运行时只需在自定义运行时的Dockerfile中选择正确的基本映像即可。对于标准的Python App Engine VM,Dockerfile是:
FROM gcr.io/google_appengine/python-compat
ADD . /app
现在您已将标准运行时重新创建为自定义运行时,您可以修改Dockerfile以进行所需的任何自定义。
重要提示
开发服务器不支持自定义Dockerfiles(您将收到有关--custom-entrypoint的错误),因此如果您这样做,则必须将测试环境移至App Engine服务器。无论您是使用标准运行时还是自定义Dockerfile或使用自定义运行时,我认为都是如此。请参阅this answer。
答案 1 :(得分:0)
关于开发服务器不使用自定义运行时的说明 - dev_appserver.py不处理Docker或Dockerfiles,这就是为什么它抱怨需要您指定 - custom_entrypoint 。但是,作为一种解决方法,您可以在本地手动设置依赖项。以下是使用“appengine-vm-fortunespeak”的示例,它使用基于 python-compat 的自定义运行时:
$ git clone https://github.com/GoogleCloudPlatform/appengine-vm-fortunespeak-python.git
$ cd appengine-vm-fortunespeak-python
# Local dependencies from Dockerfile must be installed manually
$ sudo pip install -r requirements.txt
$ sudo apt-get update && install -y fortunes libespeak-dev
# We also need gunicorn since its used by python-compat to serve the app
$ sudo apt-get install gunicorn
# This is straight from dev_appserver.py --help
$ dev_appserver.py app.yaml --custom_entrypoint="gunicorn -b localhost:{port} main:app"
请注意,如果您使用任何非 -compat 图像,则可以使用Docker直接运行您的应用,因为它们不需要模拟旧版App Engine API,例如使用' getting-started-python'使用 python 运行时:
$ git clone https://github.com/GoogleCloudPlatform/getting-started-python.git
$ cd 6-pubsub
# (Configure the app according to the tutorial ...)
$ docker build .
$ docker images # (note the IMAGE_ID)
$ docker run -p 127.0.0.1:8080:8080 -t IMAGE_ID
尝试上面的任何 -compat 图像,你会遇到问题 - 例如在 python-compat 上你会看到运行时/ google / appengine /中的初始化错误工具/ vmboot.py。它需要在真实的托管VM实例上运行。