当代开发的最佳实践要求采用 Docker、Kubernetes 和其他容器技术,尤其是在采用微服务架构时。
企业应用程序部署和使用正在因容器而发生变化。容器本身的移动性和更高的效率是它们的两个关键优势。软件可以在容器中执行,而不必担心依赖性或操作系统。因此,容器简化了您的软件架构,并使您能够放弃创建具有适当设置和库的生产环境,因为容器默认配备了此类功能。
关于容器中的 Java 应用程序,您需要了解什么?
乍一看似乎非常简单——我们将程序封装到容器中执行即可。但是,您稍后会发现云基础架构的成本和应用程序性能都下降了。您必须了解两个会影响您未来应用程序的关键容器指标,以便在限制其使用的云内存量的同时正确构建您的应用程序。它们如下:
容器RAM的使用;
容器镜像大小与应用性能的关系。
产品开发最重要的阶段之一是为您的软件应用程序选择合适的架构。这个话题很难理解,尤其是考虑到微服务技术的发展速度如此之快。为应用程序创建理想框架的最临时方法结合了最新的技术进步,确保它在未来几年内保持安全并且不需要修改。从这个角度来看,找到可用的最小微容器是在基于云的程序中选择和部署的一条建议。
为什么微容器在应用程序中比大型容器表现更好,它们之间有何区别?
随着容器使用的增加和软件架构转向微服务和云,大型容器在当前商业环境中发现了各种缺点。
软件行业试图通过优化来弥补巨大容器的弊端。传统上,在迁移时,我们使用容器之前的原始程序中的特定于操作系统的容器。一种合适的策略是提供安全、渐进的迁移。此容器操作系统在服务器上运行所需的所有元素仍然存在。为了继续这一运动,微容器将是下一步。
微容器是一种经过改进以提高效率的高效容器。它仍然拥有所有文件,以便为软件程序提供额外的可扩展性、隔离和奇偶校验。图中维护的文件数量进行了优化,但仍然是一个增强的容器。Shell、包管理和公共 C 库是微容器中唯一仍然存在的重要文件。
在容器领域,也有“distroless”的想法,即从镜像中完全提取所有不需要的文件。应该强调微容器和 Distroless 概念之间的区别。这些文件仍然存在于微容器中,因为它们是系统正常运行所必需的。微容器按照与标准容器相同的原理运行并完成所有操作。
程序执行所需的所有文件和依赖项仍然存在于微容器中,但它们的格式更轻、更小。例如,对于BellSoft Alpaquita,一个微容器包含启动 OpenJDK 程序所需的所有文件以及执行 OpenJDK 所需的行业工具。BellSoft 团队大大改进了这个微容器,并且由于它的体积很小,它提供了比 Alpine Linux 更高的安全性。
总体而言,微容器的主要特征表现在:
体积较小;
更快的下载、可扩展性和分发速度;
安全。较小容器的安全性明显好于较大容器。通过从图片中删除不需要的附加文件,可以降低发生外部事故的可能性。
最好的微容器
在最小的容器中,有不少基本图片至今仍在使用。Debian Slim 是一个很好的例子。使用最广泛的 Linux 发行版之一是 Debian Slim,它是 Debian docker 的较小版本。Alpine Linux 是另一种流行的微容器。
这些通用基础镜像仍然包括巨大容器的所有内部部件。不过,它们的性能更好,因为它们携带的文件质量更高,而且其中一些已被删除。此外,虽然比 distroless 小,但通用基础镜像的行为不同于大型容器。另一方面,Distritoless 容器镜像通常只包含您的程序及其需要执行的任何依赖项。Distritoless 图片大大减少并且被认为是无包管理器,并且它们在实践中的操作方式不同。
回到微容器,您可以进一步减小它们的大小,同时提高它们的指标。BellSoft 通过 Alpine Linux 实现了这一点,并在今年夏天推出了 Alpaquita Linux,这是一个比 Alpine 更小的新镜像。它更轻、更紧凑,并且与 OpenJDK 完全兼容。负责将 musl 端口集成到 OpenJDK 中的 BellSoft 充分利用了这一进步并增强了 Alpine Linux,在其基础上构建了 Alpaquita Linux。除了较小的尺寸,Alpaquita Linux 还将受益于承诺的频繁升级和功能齐全的 OpenJDK 标准工具。
对于基于云的应用程序,微容器提供了双赢的局面。随着大型集装箱行业日益现代化,市场无疑将看到新的、更好的通用基础图片解决方案。