vs 服务容器中已存在服务_容器的简单介绍

本文介绍了容器的概念,强调了它们作为操作系统虚拟化技术的优势,如轻量级虚拟化、环境隔离和标准化部署。讨论了Docker作为容器管理工具的重要性,解释了Dockerfile和容器编排的概念。此外,还深入探讨了Linux cgroups和命名空间在容器工作原理中的作用,以及容器化带来的可扩展性好处。
摘要由CSDN通过智能技术生成
f928ce59c1ac0c9e284ea9559d5bff2d.png

引言


容器以及诸如Docker和Kubernetes之类的容器化技术已成为许多开发人员工具箱中越来越常见的组件。容器化的核心是提供一种更好的方法,以可预测且易于管理的方式在不同环境中创建、打包和部署应用。

在本文中,我们将研究什么是容器,它们与其他类型的虚拟化技术有何不同以及它们能为您的开发和运维流程提供哪些优势。

容器是什么


容器是一种操作系统虚拟化技术,用于打包应用程序及其依赖并在隔离环境中运行它们。它提供了一种轻量级的解决案,可以在多种不同类型的基础设施中以标准化的方式打包和部署应用。

这些目标使容器对于开发人员和专业的运维人员而言都是一种有吸引力的选择。容器可以在任何具有容器功能的主机上一致地运行,因此开发人员可以在本地测试相同的软件,然后将其部署到完整的生产环境中。容器的格式还确保将应用程序的依赖包含到镜像本身中,从而简化切换和发布过程。由于运行容器的主机和平台是通用的,因此基于容器的系统的基础设施管理可以被标准化。

容器是根据容器镜像创建的,容器镜像是表示容器的系统、应用程序和环境的包。容器镜像类似于创建特定容器的模版,并且同一镜像可以用于生成任意数量的容器。

这类似于类和实例在面向对象编程中的工作方式,单个类可以创建任意数量的实例,就像单个容器镜像可以创建任意数量的容器。在继承方面也是如此,容器镜像可以充当其他更加定制化的镜像的父镜像。用户可以从外部源下载构建好的镜像,也可以构建自己的镜像以满足相应的需求。

Docker是什么


尽管Linux容器是一种可以通过多种不同的技术实现和管理的通用技术,但Docker是迄今为止构建和运行容器最常用的方式。Docker是一组工具,可以用来创建容器镜像,从外部仓库推送或拉取镜像以及在许多不同环境中运行和管理容器。Linux上容器流行度的激增可以直接归因于Docker自2013年发布以来所做的努力。

docker命令行工具扮演着许多角色。它运行和管理容器,充当容器工作负载的进程管理器。它可以通过从Dockerfile中读取和执行命令或者通过对已运行的容器进行快照来创建新的容器镜像。该命令还可以与容器镜像仓库Dokcer Hub交互,以拉取新的镜像或推送本地镜像以保存或发布它们。

尽管Docker只是Linux上许多容器实现中的一种,但它是容器世界最常见的入口点,也是最常用的部署解决方案。尽管已经为容器开发了开放标准以确保互操作性,但是大多数容器相关的平台和工具在测试和发布软件时都将Docker作为其主要目标。在给定的环境中,Docker不一定总是性能最好的解决方案,但它可能是经过最充分测试的选择之一。

实际上,尽管Linux上存在容器的替代方案,但是因为Docker的普遍性和它对生态系统的术语、标准和工具的影响,首先学习Docker通常是有意义的。

容器是如何工作的


要了解容器的工作原理,讨论它们与虚拟机的区别有时会很有帮助。

  • 虚拟机 vs 容器虚拟机是一种硬件虚拟化技术,它允许你完全虚拟化计算机的硬件和资源。单独的客户操作系统管理虚拟机,与主机上运行的操作系统完全独立。在主机系统上,一个称为管理程序的软件负责启动、停止和管理虚拟机。由于虚拟机是作为完全独立的计算机来运行的,因此在正常操作条件下不会影响主机系统或其他虚拟机,虚拟机提供了出色的隔离性和安全性。但是,它们也有相应的缺点。例如,虚拟化整个计算机需要虚拟机使用大量的资源。由于虚拟机由完整的客户操作系统操作,因此虚拟机的配置和启动时间可能会很慢。同样,由于虚拟机作为独立的机器运行,管理员通常需要采用相同基础架构的管理工具和流程来更新和运行各个环境。通常,虚拟机允许您将计算机的资源切分成更小的单独的计算机,但是最终结果与管理一组物理计算机没有太大区别。集群成员增加了,每个主机的职责可能变得更加集中,但是您使用的工具、策略和流程以及系统的功能可能不会有明显的变化。容器采用了不同的方式。容器不是虚拟化整个计算机,而是直接虚拟化操作系统。它们作为由主机操作系统内核管理的特殊进程运行,但是具有对系统进程、资源和环境受限的和经过精心设计的视图。容器不知道它们存在于一个共享系统中,好像它们运行在一个完全独立的计算机中一样。不像对待虚拟机那样将容器视为完整的计算机,更常见的是像管理应用程序一样管理容器。例如,尽管你可以将一个SSH服务器捆绑到容器中,但不推荐使用这种模式。取而代之的是,调试通常通过日志接口执行,通过应用新镜像来进行更新,并且不再强调服务管理,而是倾向于管理整个容器。这些特性意味着容器在虚拟机的严格隔离和传统进程的本地管理之间占据了一定的位置。容器提供隔离和以进程为中心的虚拟化,这在约束、灵活性和速度之间提供了良好的平衡。
  • Linux cgroups和命名空间Linux内核的一些功能使容器成为可能。Linux控制组,或者cgroups,是内核的一项功能,它允许将进程及其资源进行分组、隔离和作为一个单元来进行管理。cgroups将进程捆绑在一起,确定它们可以访问哪些资源,并且提供用于管理和监控其行为的机制。它们遵循分层系统,允许子进程继承其父进程的条件并且可能采取更进一步的约束。cgroups提供了将进程作为一个组捆绑在一起并限制它们可访问资源的功能。容器依赖的另一个主要内核功能是Linux命名空间。命名空间限制了进程可以看到的系统的其余部分。在命名空间中运行的进程不知道运行在其命名空间以外的任何内容。由于命名空间定义了与系统其余部分分离的上下文,因此命名空间的进程树需要反映该上下文。在命名空间中,主进程变为PID 1(进程ID为1),这个PID通常保留给OS的初始化系统。在命名空间中构造这种经过精心设计的虚拟进程树使容器内运行的进程表现的就像在正常,不受限制的环境中运行一样。

容器化的好处


现在我们已经讨论了一些使容器成为可能的技术,让我们来看一下它们的一些最重要的特征。

  • 轻量级虚拟化与虚拟机的硬件虚拟化相比,容器非常轻量。容器不是虚拟化所有硬件资源并运行一个完整的操作系统,而是使用主机操作系统的内核并在该OS中作为隔离的进程运行。从主机的角度来看,容器的运行方式与其他任何进程一样,这意味着它们可以快速启动和停止并且只使用有限的资源。容器只能查看和访问主机的一部分进程空间和资源,但是在大多数情况下表现的像是一个完全独立的操作系统一样。容器镜像本身也可以很小。最小化镜像大小可以使工作流在运行时拉取镜像而不会带来明显的延迟。这是许多容错、自我修复的分布式系统所需要的。
  • 环境隔离通过使用cgroups和命名空间等内核功能,容器与主机环境及容器之间相互隔离。这提供了一定程度的功能限制,以防止容器环境互相影响。尽管不能将其视为完全安全的沙盒,但这种隔离确实有其优势。依赖和库冲突可以更容易的避免,因为主机和每个容器在单独的文件系统上维护应用。由于网络环境可以分隔,容器内的应用程序可以绑定本地端口,而不必担心与主机系统或其他容器中的应用冲突。然后管理员可以根据需求将容器的网络映射到主机网络。
  • 打包格式和运行时目标标准化容器最吸引人的好处之一是它们能够统一和简化打包和部署应用的流程。容器镜像允许你将应用程序和所有运行时的依赖打包到一个可以跨基础设施部署的单元中。在容器内部,开发人员可以安装和使用所需的任何库,而不用担心会影响主机系统的库。当创建镜像时依赖被版本锁定。由于容器运行时是一个标准的稳定的部署平台,开发人员不需要对运行容器的特定计算机了解太多。只要容器运行时是可用的,并且有足够的系统资源,容器就应该像开发环境中一样运行。同样,从操作角度来看,容器化有助于标准化部署环境。管理员不必基于开发语言、运行时和依赖来提供和维护特定的环境,而是集中精力维护充当容器平台的通用主机并分配这些计算机可以访问的资源池。将所有应用程序的特性绑定到容器中,在应用程序关注点和平台关注点之间建立了自然界限。
  • 可扩展性容器模式还使你能够使用相对简单的机制来扩展应用程序。轻量级的镜像大小,快速的启动时间,创建、测试和部署镜像的能力以及标准化的运行时环境都是用于创建高度可扩展系统的功能。系统的可扩展性高度依赖于应用程序架构以及容器镜像本身的构造方式。与容器模式紧密配合的设计可以认识到容器格式的优点,从而在速度、可用性和可管理性之间取得良好的平衡。面向服务的架构,尤其是微服务,在容器化环境中非常受欢迎,因为有针对性的将应用程序分解为离散的组件可以使开发、扩展和更新更加直接。

容器相关的术语


在总结之前,让我们回顾一下本文中介绍的一些关键术语,以及在继续学习时可能会遇到的一些新术语。

  • 容器:在Linux中,容器是一种操作系统虚拟化技术,用于打包应用程序及其依赖项,并在隔离的环境中运行它们。
  • 容器镜像:容器镜像是镜像文件,用于定义文件系统和特定容器配置的行为。容器镜像用作创建容器的模版。
  • 容器编排:容器编排是一个术语,用于描述管理跨多个主机的容器集群所需的流程和工具。容器编排通常使用一个容器平台来控制伸缩、容错、资源分配和调度。
  • 容器运行时:容器运行时是在主机上实际运行和管理容器的组件。最低要求通常是能用一个给定的镜像创建容器,但是许多运行时都捆绑了其他功能,例如进程管理、监控和镜像管理。Docker在它的docker命令行中包含一个容器运行时,但是对于不同的用例还有许多其他选择。
  • Docker: Docker是使Linux容器概念成功普及的第一项技术。Docker的工具生态系统包括docker(具有广泛的容器和镜像管理功能的容器运行时),docker -compose(用于定义和运行多个容器应用的系统)和Docker Hub(容器镜像注册中心)。
  • Dockerfile: Dockerfile是描述如何构建容器镜像的文本文件,它定义了基础镜像,系统内运行的命令及运行时启动和管理容器内进程的方式。尽管不是唯一的选择,但Dockerfile是定义容器镜像最常用的格式,即使不使用Docker的镜像构建功能。
  • Kata容器:Kata容器是一种使用模型、工作流和工具来管理轻量级虚拟机的方法,这些模型、工作流和工具借鉴了容器的使用经验。Kata容器在提供更健壮的隔离性和安全性的同时还寻求获得容器的好处。
  • Kubernetes: Kubernetes是一个功能强大的容器编排平台,用于管理容器主机集群和运行在它们上面的负载。Kubernetes提供了工具和抽象,用于在高可用的生产环境中部署、扩展、监控和管理容器。
  • Linux cgroups:Linux cgroups是内核的一项功能,它将进程捆绑在一起并定义它们可以访问哪些资源。Linux中的容器是使用cgroups实现的,以便管理资源和隔离进程。
  • Linux命名空间:Linux命名空间是内核的一项功能,用于限制进程和cgroups对系统其余部分的可见性。Linux中的容器使用命名空间来帮助将工作负载和资源与系统中运行的其他进程隔离开。
  • LXC: LXC是Linux容器化的一种形式,它早于Docker和许多其他容器化的技术,但使用了许多相同的内核技术。与Docker相比,LXC通常虚拟化整个操作系统,而不仅仅是运行一个应用所需的进程,这看起来和虚拟机有点像。
  • 虚拟机:虚拟机是一种模拟整个计算机的硬件虚拟化技术。在虚拟机中安装了一个完整的操作系统用来管理内部组件并访问虚拟机的计算资源。
  • 虚拟化:虚拟化是创建、运行和管理虚拟环境或计算资源的一个过程。虚拟化是一种抽象物理资源的方式,通常用于为不同目的分割资源池。

总结


容器不是万能的灵丹妙药,但是与在裸机上运行软件或使用其他虚拟化技术相比,它确实提供了一些吸引人的优势。通过提供轻量级的功能隔离和丰富的工具生态系统来解决管理复杂性。容器在开发和整个生命周期中都提供了极大的灵活性和控制力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值