在DevOps中的容器化:你需要知道的一切

容器化使企业能够虚拟化操作系统,并在被称为容器的隔离区域中安装应用程序。

容器化是一种现代化的应用程序创建方式。

让我们深入了解传统系统及其架构如何遇到障碍,以至于人们开始引用“我的代码不起作用;我不知道为什么!代码有效,但不确定为什么!”

随着应用程序的发展,应用程序的定义从仅仅是一段代码变成了一组代码、二进制文件、配置项和运行环境。

想象一下我们在之前的日子里经常遇到的情况。程序员在笔记本电脑上开发了一些Java 8代码。相同的代码在Web服务器/虚拟机上无法工作。经过了很多疑难解答,发现服务器的Java版本是JDK11。

感到困惑吗?

代码没有变,但支持代码的软件具有不同的配置。因为一个小小的问题,开发人员遇到了很多困扰。同样的情况也适用于将代码从Linux转移到Windows操作系统。

传统系统的管理开销、可扩展性和成本效益性导致了云计算的采用,其中工作负载由各种云提供商提供的虚拟机托管。这就是虚拟化。

简单来说,虚拟化是指云提供商/数据中心上的单个服务器/虚拟机上运行的多个操作系统(OS)。它在没有物理硬件或不需要知道内部情况的情况下隔离应用程序。Virtualization

然而,这种架构也经受不住时间的考验,容器化应运而生。

容器化专注于将操作系统分解成可以通过拥有自己的操作系统更高效地使用的块。它是一个在虚拟机中运行应用程序代码的小型迷你环境,无需担心虚拟机中运行的操作系统或硬件。

现在,让我们详细讨论容器化。

什么是容器化?

容器化是一种操作系统虚拟化的形式,其中应用程序的所有组件,包括环境(即将在其中运行的操作系统),都被打包到称为容器的虚拟机上的隔离空间中。这些容器的底层操作系统是相同的,但它们有自己的一部分作为配置的一部分。

容器不是庞大而繁重的系统。相反,它们是小巧、便携且易于运行或设置的。当开发人员将应用程序容器化时,容器与主机操作系统分离,并且对系统资源的访问有限,就像一个轻量级的virtual machine。容器化的应用程序可以在不需要重写的情况下运行在不同的基础设施上,如裸机、云或虚拟机。

容器化技术的工作原理是什么?

容器化通过将应用程序所需的所有组件放入单个虚拟单元中来工作。

容器化允许开发人员将应用程序代码与其配置文件、依赖项和库文件捆绑在一起。将该单个软件包(容器)与主机操作系统分离。打包使得容器独立并可移植,因此可以在任何平台或云上无问题地运行。可以将其视为来自乐高板上的小乐高积木。

然而,容器不直接使用虚拟化的硬件或内核资源。容器不关心或担心在虚拟机上运行的操作系统。

相反,容器运行在一个专门设计用于处理容器并隐藏底层资源的平台之上。与虚拟机和裸金属服务器等替代方案相比,容器在速度和大小上具有优势,因为它们只包含应用程序最重要的组件和依赖项。它们还能够在不处理相关问题的情况下在不同的环境中执行相同的应用程序。

容器化与虚拟化

对于不熟悉应用程序生命周期的人来说,他们并不总是知道容器化(例如Docker等软件制作的)和传统服务器虚拟化(如和VMware ESXi等虚拟机监视程序)之间的区别。然而,以下是它们的区别:

在服务器虚拟化中,硬件被隐藏,操作系统在其上运行。容器化是一种在操作系统之上运行应用程序的方式。虚拟化依赖于底层主机操作系统,但不必担心硬件,除非它具有足够的资源。以下是完整的区别列表。

属性 容器化 虚拟化
环境 容器打包了在多个环境中运行的操作系统。 虚拟化建立在主机之上,通过操作系统分离出一台机器。
启动 容器启动时间非常短。 虚拟机启动需要几分钟。
资源 这些是一个非常小的环境,不占用任何资源。 虚拟机是资源密集型的,没有扩展能力。
实现 通过虚拟化监视程序(使用相同的硬件)对底层硬件进行虚拟化。 容器使操作系统虚拟化(使用相同的操作系统)。
成本 更容易和廉价实施。 这些是昂贵的,需要向云服务提供商支付重账单,具体取决于机器的大小。
容器化与虚拟化

容器化的层次

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

主机操作系统:在硬件层之后是下一层,即主机操作系统。与硬件层一样,这可能就是在任何个人计算机上安装Windows或*nix一样简单,或者完全由云服务提供商处理。

容器引擎:在这里事情开始变得有趣:容器引擎。容器引擎是安装在主机操作系统之上的软件,负责虚拟化容器化应用程序所需的资源。

当在计算机上执行Docker时,这一层是最容易理解的。这一层确保容器正在运行,并管理其整个生命周期。

容器:容器化应用程序是一些包含应用程序执行所需的所有库、二进制文件和配置设置的代码块。容器也被称为Docker容器。已经容器化的应用程序在“用户空间”中作为其进程运行,与操作系统的内核不同。

容器化的好处

可移植性:人们抱怨一个应用在一个环境(例如,暂存)中运行良好,但在另一个环境中却运行不良。这是一个DevOps的困境。通常,问题是环境的差异。也许依赖关系已经更新。使用容器化可以在任何地方执行相同的容器镜像,包括依赖项。

快速:容器启动比虚拟机或裸机服务器快。容器在几秒钟内启动,而虚拟机需要几分钟,这取决于资源和应用程序大小。

资源高效:容器比虚拟机更高效,因为它们只包含特定于应用程序的文件。虚拟机是以千兆字节为单位,而容器是以兆字节为单位。容器可以让团队有效地使用服务器资源。

部署和开发简单:可移植的容器可以在任何地方使用。容器化的应用程序快速、小巧且易于部署。

容器化使您的团队可以在本地和生产环境中构建相同的镜像。容器应用程序可以减少某些在一个位置工作但在另一个位置不起作用的情况。 CI/CD流水线支持容器构建。这些好处提高了团队的工作效率。

故障排除:容器化可以隔离和分离应用程序。一个容器的故障不会影响其他容器的功能。开发团队可以识别和修复一个有问题的容器,而不影响其他容器。容器引擎可以使用SELinux访问控制来查找和隔离容器问题。

安全性:将程序容器化可以防止恶意软件损害其他应用程序或主机系统。指定的安全权限被设置为阻止不良组件进入其他容器或限制通信。

可管理性:使用容器orchestration平台自动化容器化的工作负载和服务。容器编排简化了管理任务,包括发布新的应用程序版本、扩展容器化程序以及监视、日志记录和调试。

连续性:一个容器的故障不会影响其他容器。开发人员可以修复一个容器而不影响其他容器。容器化可以保证运营的连续性。

结论

容器化是一个最近的软件开发概念,随着时间的推移将变得更加高效。支持者认为它有助于开发人员更快速、更安全地创建和部署软件和应用程序。

随着容器化生态系统的成熟和发展,行业参与者期望价格下降。然而,操作问题得到解决,但维护众多微小环境的开销则退居次要地位。容器编排是容器化的下一个重要环节。

现代应用程序不会止步于此。容器化和微服务的 Kubernetes 是未来的大趋势。Kubernetes使扩展和管理容器安装变得更加容易。K8s管理比Docker或LXC更大的容器部署。K8s是一个受欢迎的容器管理工具。

现在,容器已经过时,一般建议转向K8s。

类似文章