具有 Docker 图像和内存分配的应用

App with Docker Image and Memory allocation

我在 Containers and Buildpacks 上看到了一份问卷。我找不到以下问题的答案:

  1. 什么 buildpack 用于暂存 docker 应用程序?
    我假设非 docker 应用程序需要一个构建包,它会在暂存过程中生成容器映像。对于基于 docker 的应用程序,buildpack 是不相关的,因为它已经是一个容器镜像。这样理解正确吗?

  2. 当你给一个app分配1G时,该应用得到多少内存?什么 组件决定了这个?
    我会假设,实际应用程序(例如:my_sample_spring_boot_app)将收到比 1G 更少的内存,因为内存的某些部分将用于 Infra + Stack + runtime 等. 这样理解正确吗?

你能帮我一些指导吗

What buildpack is used to stage docker apps? I would assume a non-docker app would require a buildpack which would produce the container image during the staging process. For a docker based application a buildpack is not relevant since it is already a container image . Is this correct understanding ?

这听起来像是一个棘手的问题。当您在 Cloud Foundry 上 运行 Docker 镜像时,没有构建包 运行.

运行 每种类型的应用都有不同的应用生命周期。因此,当您有要构建的源代码和 运行 时,buildpacks 应用程序生命周期会采用它,运行s buildpacks,并从中生成一个 droplet。然后液滴是 运行.

对于 Docker 图像,使用 docker 应用程序生命周期。没有 build/stage 发生,因为它假定发生在外部,并且图像已准备好成为 运行.

When you allocate 1G to an app, how much memory does the application receive? What component determines this? I would assume, the actual application (For example: my_sample_spring_boot_app)would receive less memory than 1G , since some part of teh memory would be utilised for Infra + Stack + runtime etc. Is this correct understanding ?

正确。如果您分配 1G 内存限制,那么容器中的所有内容 运行ning 都必须符合该 1G 限制。

您的应用程序将获得大部分内存,但每个容器中都有几个小进程 运行:一个 init 进程(即 PID1),一个 SSHD(对于 cf ssh)在大多数 CF 版本中,还有一个特使代理(用于容器中的 TLS 终止)。我最近没看,但前一段时间这占用了大约 24M。有谁最近测过,请评论。

一切都必须符合内存限制。如果您的应用程序分叉,可能是因为它分叉了工作进程,或者如果您分叉 运行 sub-processes 作为应用程序的一部分。您 运行 必须的所有内容都保持在 1G 限制以下。

最后一个音符。对于 Java 个应用程序,1G 是容器的总​​内存大小。 不是 您的 JVM 堆。这是一个常见的误解。整个 JVM 进程及其所有不同的内存区域(堆、元空间、线程、直接内存、代码缓存等)都必须在 1G 限制内。