IC694TBB132
IC694TBB132容器是用于打包、部署和运行应用程序的轻量级标准。它包含应用程序能够成功运行所需的依赖项、库文件、配置文件和其他文件。总体上它简化了再次构建编译和运行环境的步骤,并且分发整个应用程序包,主机设备除了容器引擎本身不需要安装任何依赖项。
由于它们的设计,容器具有不同的特性,因此也有着与虚拟机 (VM) 的不同的应用目标。不同于虚拟机,容器化应用相比于本地应用,前者的性能不会受到影响。如前所述,容器化进程直接在您的主机操作系统上运行,仅具有独立的文件系统和权限,因此在理论上具有相同的性能。
所以性能应该是一样的。那么,为什么我的应用程序在容器内的表现与本地的不同?这里有很多因素会产生影响,要准确指出同一个应用程序在两种环境中表现不同的原因并不容易。本质原因如下:
如果你有一个静态链接的二进制文件,它在本机和开启所有特权的容器环境中执行的表现将会是一致的,因为它们具有相同的系统配置。
结合上面的信息,我们开始逐一分析并检查可能的根本原因:
如果应用程序是动态链接的,则容器和设备上的每个共享库是否相同?它们是否具有相同的版本,是否使用相同的编译器、相同的编译选项进行编译,并启用了同样的优化?
如果您在 Debian 容器中编译了容器应用程序,在 Yocto 中编译了本机应用程序,您是否匹配了每个库的版本,检查了编译选项等?
容器是否能够访问必要的硬件、是否具有权限和是否正确设置访问规则?默认情况下,容器是的,您明确允许访问关键资源。
IC694TBB132