DevOps 中的容器化:你需要知道的一切
已发表: 2022-09-16容器化允许企业虚拟化操作系统并将应用程序安装在称为容器的隔离区域中。
容器化是一种创建应用程序的现代方式。
让我们深入了解遗留系统及其架构如何遇到障碍,以至于人们开始引用“我的代码不起作用; 我不知道为什么! 代码有效,但不知道为什么!”
随着应用程序的发展,应用程序的定义从仅仅一段代码变为一组代码、二进制文件、配置和运行环境。
想象一下我们早期经常遇到的情况。 在笔记本电脑上,开发人员开发了一些 Java 8 代码。 相同的代码在 Web 服务器/VM 上不起作用。 经过多方排查,发现服务器的Java版本是JDK11。
使困惑?
代码保持不变,但支持该代码的软件具有不同的配置。 由于一些小事,开发人员遇到了很多麻烦。 将一段代码从 Linux 传输到 Windows 操作系统时也是如此。
遗留系统的管理开销、可扩展性和成本效率低导致了云计算的采用,其中工作负载托管在各种云提供商提供的虚拟机上。 那不过是虚拟化。
简单来说,虚拟化是云提供商/数据中心提供的单个服务器/VM 上的多个操作系统 (OS)。 虚拟化可以隔离应用程序,而无需物理硬件或知道内部是什么。
然而,这种架构也没有经受住时间的考验,容器化应运而生。
容器化专注于将操作系统分解成块,通过拥有它们的操作系统可以更有效地使用这些块。 它是一个运行应用程序代码的小型迷你环境,无需担心虚拟机中运行的操作系统或硬件。
现在,让我们详细讨论容器化。
什么是容器化?

容器化是一种操作系统虚拟化,其中应用程序的所有组件,包括环境,也就是它将在其中运行的操作系统,都被打包到 VM 上称为容器的隔离空间中。 这些容器的底层操作系统是相同的,但它们有自己的作为配置的一部分。
容器不是广泛的、沉重的系统。 相反,它们体积小、便携且易于运行或设置。 当开发人员将应用程序容器化时,容器与主机操作系统分离,并且对系统资源的访问权限有限,就像轻量级虚拟机一样。 容器化应用程序可以在不同的基础架构上运行,例如裸机、云或虚拟机,而无需重写。
容器化技术如何工作?
容器化的工作原理是将应用程序所需的所有部分放入单个虚拟单元中。
容器化允许开发人员将应用程序代码与其配置文件、依赖项和库捆绑在一起。 将该单个软件包(容器)与主机操作系统分开。 打包让容器独立并变得可移植,因此它可以在任何平台或云上毫无问题地运行。 将其视为乐高板上的小乐高积木。
但是,容器不直接使用虚拟化的硬件或内核资源。 容器不关心或担心虚拟机上运行的操作系统。
相反,容器在专门设计用于处理容器和隐藏底层资源的平台“顶部”运行。 容器在速度和大小方面优于虚拟机和裸机服务器等替代品,因为它们仅包含应用程序最重要的组件和依赖项。 它们还支持在各种上下文中执行相同的应用程序,而无需处理相关问题。
容器化与虚拟化
不熟悉应用程序生命周期的人并不总是知道容器化(Docker 等软件制作的软件)与传统服务器虚拟化(HyperV 和 VMware ESXi 等虚拟机管理程序支持的内容)之间的区别。 然而,这就是不同之处:

在服务器虚拟化中,硬件是隐藏的,操作系统在其上运行。 容器化是一种在操作系统之上运行应用程序的方法。 虚拟化依赖于底层主机操作系统,但不担心硬件,除非它有足够的资源。 这是完整的差异列表。
财产 | 容器化 | 虚拟化 |
环境 | 容器与在多个环境中运行的操作系统打包在一起。 | 虚拟化建立在主机之上,由操作系统隔开,表现为一台机器。 |
启动 | 容器在启动时花费的时间非常少。 | 虚拟机需要几分钟才能启动。 |
资源 | 这些是一个根本不占用大量资源的小环境。 | 虚拟机资源密集,没有扩展能力。 |
执行 | 底层硬件由管理程序虚拟化(使用相同的硬件)。 | 容器使操作系统虚拟化(使用相同的操作系统)。 |
成本 | 实施起来更容易且成本低廉。 | 这些都是昂贵的,并且需要根据机器的大小向云提供商支付巨额账单。 |
容器化层

硬件基础设施:每个应用程序的基础是可以投入生产使用的有形资源的集合。 为了使容器正常运行,这些资源必须存在。 它们可以在笔记本电脑上运行,也可以在连接到云的众多数据中心之一上运行。

主机操作系统:硬件层之后是下一层,主机操作系统。 与硬件层一样,这可能就像在任何个人计算机上安装 Windows 或 *nix 一样简单,也可以完全由云服务提供商处理。
容器引擎:这就是事情开始发生令人兴奋的转折的地方:容器引擎。 容器引擎是安装在主机操作系统之上的软件,负责虚拟化容器化应用程序所需的资源。
在计算机上执行 Docker 时,这一层是最容易掌握的。 该层确保容器启动并运行并管理其整个生命周期。
容器:容器化应用程序是包含应用程序需要执行的所有库、二进制文件和配置设置的代码。 容器也称为 Docker 容器。 容器化的应用程序在“用户空间”中作为其进程运行,这与操作系统的内核不同。
容器化的好处

可移植性:人们抱怨应用程序在一种环境(例如,登台)中运行良好,但在另一种环境中却不行。 这是一个 DevOps 困境。 通常,问题是环境差异。 也许更新了依赖项。 相同的容器镜像,包括依赖项,可以在任何地方通过容器化执行。
快速:容器启动速度比虚拟机或裸机服务器快。 容器在几秒钟内启动,而虚拟机则需要几分钟,具体取决于资源和应用程序大小。
资源高效:容器比虚拟机更高效,因为它们只包含特定于应用程序的文件。 虚拟机是千兆字节,而容器是兆字节。 容器让团队可以有效地使用服务器资源。
部署-开发简单性:便携式容器可以在任何地方使用。 容器化应用程序快速、小巧且易于部署。
容器化让您的团队可以在本地和生产环境中构建相同的映像。 容器应用程序可以减少某些东西在一个地方工作但在另一个地方不能工作的情况。 CI/CD 管道支持容器构建。 这些好处提高了团队的生产力。
故障排除:容器化隔离和分离应用程序。 一个容器的故障不会影响其他容器的功能。 开发团队可以在不影响其他人的情况下识别和修复有故障的容器。 容器引擎可以使用 SELinux 访问控制来查找和隔离容器问题。
安全性:容器化程序可防止恶意软件损害其他应用程序或主机系统。 设置指定的安全权限以阻止不需要的组件进入其他容器或限制通信。
可管理性:使用容器编排平台自动化容器化工作负载和服务。 容器编排简化了管理工作,包括发布新的应用程序版本、扩展容器化程序以及监控、日志记录和调试。
连续性:一个容器的故障不会影响其他容器。 开发人员可以修复一个容器而不影响其他容器。 容器化保证了操作的连续性。
结论
容器化是最近的一个软件开发概念,随着时间的推移将变得更加高效。 它的支持者相信它可以帮助开发人员更快速、更安全地创建和部署软件和应用程序。
随着容器化生态系统的成熟和发展,行业参与者预计价格将会下降。 然而,操作问题得到了解决,但在如此多的微不足道的环境中维护开销却退居二线。 容器化的下一个重要事情是编排。
现代应用程序不会止步于此。 Kubernetes 是容器化和微服务领域的下一件大事。 Kubernetes 使扩展和管理容器安装变得更加容易。 K8s 管理比 Docker 或 LXC 更大的容器部署。 K8s 是一个广受欢迎的容器管理工具。
现在容器已经成为过去,一般建议是跳到 K8s。