gpt4 book ai didi

c - 应用程序(如用 C 开发的应用程序)是否应该添加容器(比如 docker)支持?

转载 作者:行者123 更新时间:2023-12-02 19:14:23 25 4
gpt4 key购买 nike

到目前为止,我一直认为容器技术(例如:docker)提供了所需的隔离和操作系统级别的虚拟化。并且在容器中运行的应用程序受到命名空间、cgroups、apparmour/selinux、功能的限制,它们无法确定它们所在的主机环境。但似乎这种理解并不是 100% 正确的。
与维基一样 - OS-level virtualization

OS-level virtualization is an operating system paradigm in which thekernel allows the existence of multiple isolated user space instances.Such instances, called containers (LXC, Solaris containers, Docker),Zones (Solaris containers), virtual private servers (OpenVZ),partitions, virtual environments (VEs), virtual kernels (DragonFlyBSD), or jails (FreeBSD jail or chroot jail),1 may look like realcomputers from the point of view of programs running in them. Acomputer program running on an ordinary operating system can see allresources (connected devices, files and folders, network shares, CPUpower, quantifiable hardware capabilities) of that computer. However,programs running inside of a container can only see the container'scontents and devices assigned to the container.


从上面的引用来看,它似乎只增加了隔离和抽象,而没有像虚拟化那样。
由于 Java 团队必须向 JVM 添加容器支持,因此它不会直接查看主机环境,而是将 ITSELF 限制为 docker 提供的隔离/抽象。
引用文献:
  • Java (prior to JDK8 update 131) applications running in docker container CPU / Memory issues?很好的答案解释了 JVM 对 linux 容器的支持。

  • Linux container support first appeared in JDK 10 and then ported to8u191,


  • How to prevent Java from exceeding the container memory limits?

  • 这是否意味着 在容器环境中运行的 C 程序可以绕过限制并访问/读取主机环境详细信息。 当然,当它尝试(即使用此信息)做任何超出容器允许做的事情时,容器引擎可能会终止容器本身的进程。
    因此,如果我正在开发一个 C/C++ 应用程序来请求/查询主机资源(如 CPU/MEM/Devices 等),那么我是否有责任通过添加容器支持使应用程序在容器环境中按预期运行。

    最佳答案

    尽管我怀疑这会是一个流行的答案,但我的观点是,可能曾经在容器环境中运行的应用程序必须提供明确指定资源限制的方法。依赖从系统查询的信息是错误的。
    容器不是全虚拟化环境,一般不会完全隐藏底层平台。虽然容器可能并且通常在网络、文件系统和用户级别与其主机隔离,但这并不意味着它们是真正独立的。我遇到的一个典型问题是容器无法获得它自己对系统负载平均值的贡献——只有主机的负载平均值。
    没有完全虚拟化的事实并不意味着主机不能强制执行限制——它通常可以并且确实如此。但这意味着容器不能轻易地找到它们是什么——不是以一种健壮的、平台中立的方式。
    容器可以使用各种启发式方法。例如,它可能能够解析 /proc/self/cgroup .这可能会或可能不会提供有用的信息,具体取决于实现。这种方法只有在主机使用控制组时才会提供有用的信息——大多数当前的实现都是这样做的,但这并不意味着它是强制性的。
    当前使用了许多不同的容器框架,而且这个数字可能会增加。很难预测将来必须使用哪些方法来使应用程序具有容器验证能力。我认为,最好为用户提供一种控制限制的方法,而不是为您开发的每个软件都进行持续的维护任务。

    关于c - 应用程序(如用 C 开发的应用程序)是否应该添加容器(比如 docker)支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64312354/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com