在 App Engine 和 Compute Engine 中启动 docker 容器有什么区别?

What's the difference between launching a docker container in App Engine vs Compute Engine?

鉴于您可以将 docker 图像上传到应用引擎和计算引擎,对于始终将其应用包含在 docker 中的人来说,真正的区别是什么?

根据类似的 question,区别归结为 PaaS 与 IaaS,但是对于 docker 文件,您始终指定 OS 和运行时环境。所以我看到的唯一区别是您可能最终会通过提供容器在 App Engine 上过度指定。

从根本上说,如果您只是希望您的应用程序无需太多输入即可无缝且快速地扩展,请使用 App Engine Flex。如果您想要更多控制,可以使用其他 Google 产品以不同方式配置,请考虑使用 Compute Engine 的非托管实例组。

一些历史

值得注意的是,将 Docker 图像添加到 Compute Engine 实例的功能是最近才开发的。在此之前,App Engine Flexible 是镇上的新生事物,因为我们过去只有 App Engine 标准,绝对不允许您使用 Docker 作为基础。

主要区别

以下是我的经验中的主要区别:

  • App Engine 设计为 PaaS 产品,因此您可以在 app.yaml 中自定义缩放参数,App Engine 会读取这些参数并接管您的工作。从技术上讲,您确实可以使用 Compute Engine 执行此操作,但它涉及更多配置 - 您需要设置一个实例组、一个后端和一个前端。使用 App Engine,所有这些都为您处理
  • 您不能在 App Engine 上设置任何负载平衡器或任何外围服务或产品。 App Engine Flexible 在为用户提供更多控制和更多(抱歉)灵活性方面走得更远。但是,它不允许不受限制地与其他服务集成。而使用 Compute Engine,您可以设置 HTTPs 负载平衡器,将您的机器添加到不同的网络和子网,设置自定义标签等...

另外,可以找到关于 App Engine 和 Compute Engine 之间差异的更详细解释 here

App Engine 是来自 google 的 PaaS 服务和托管服务。它有动态实例和常驻实例选项来实现缩放。它为支持的语言预定义了运行时设置,我们只需要执行代码。它支持同时执行多个版本的应用程序,因此我们可以为不同的用户组发布代码更改。它本身就支持容器环境,因此无需提供 pods 数量或节点数等基本详细信息。即使对于 App Engine Standard,如果没有负载,节点数减少到零也意味着没有成本。 App Engine Flexible 至少需要一个 up 实例。这里的部署可以通过单个命令完成,即 gcloud app deploy app.yaml

Compute engine 是 IaaS,因此开发人员需要创建一台机器,设置所需的软件,设置 docker 容器环境。将没有缩放、版本管理、流量控制、安全、防火墙、健康监控和修复等。因此使用计算引擎很难实现 App Engine 提供的功能。更棒的选择是 Kubernetes Engine。