容器入门教程

发布于:2022-11-07 ⋅ 阅读:(441) ⋅ 点赞:(0)

文章目录


 

前言

在过去几年中,容器已经成为现代化应用程序的代名词。现如今已经很少有公司不在使用容器了,哪怕有,他们也一定是正处于评估使用容器的阶段。

一、容器是什么?

如今人们在谈论容器时,大多数时候指的都是“Docker容器”。尽管在Linux系统中,容器的历史可以追溯到十多年以前,然而真正使得容器广为人知的,是因为Docker。

二、发展

1.背景

容器的最初想法是把操作系统分割成几块,每一块都可以安全地运行应用程序,它们之间不会产生相互干扰。这种隔离的办法是用命名空间和控制组来实现的。命名空间和控制组是Linux内核的功能。命名空间允许操作系统的各个组件被切分成若干块,从而创建隔离的工作区。然后,控制组可以用来对资源的使用进行细粒度的控制,从而有效防止所有系统资源被一个容器霸占。

对于开发者而言,直接调用系统内核的功能可并不是件令人愉快的事情。因此引入了Linux容器,它是现在人们所熟知的“容器”的底层技术,极大地简化了与系统内核交互的复杂性。

正是Docker通过把这些复杂的内核功能封装成对开发者友好的组件,才使得容器流行起来。Docker对容器的定义是一个“标准化的软件单元”。“软件单元”更准确的意思是指运行在容器中的服务或者应用能够完全地、私有地访问操作系统视图。换句话说,你可以把容器看作是经过封装的,可以被独立部署的一个组件,这个组件通过系统级别的虚拟化技术使其可以作为一个独立的实例来运行并和其他实例共享同一个系统内核。

        容器使用写时复制的文件系统策略,这就允许多个容器实例可以共享数据,因为只有当容器需要修改或者写入新数据时,操作系统才会复制一个数据的副本。所以从内存和磁盘空间使用的角度来看容器是非常轻量级的,这也是为什么容器可以非常快地启动,快速启动是容器带来的巨大好处之一。

使用 Docker 创建容器时,可以使用 –isolation 参数来指定隔离模式(进程隔离模式或 Hyper-V 隔离模式均可),使用以下命令选择进程隔离或hyperv隔离模式创建容器:

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd`

2. 区别

VM 和容器都是用于为应用程序和服务提供独立且可移植的计算环境的虚拟化技术:

  • VM 模拟整个计算机,包括虚拟化硬件、OS、用户模式及其自身的内核模式。 VM 非常灵活,可为应用程序提供广泛的支持;但是,VM 往往比较大,会消耗主机资源。
  • 容器(如前所述)基于主机操作系统内核构建,并包含打包的应用的独立用户模式进程。 这有助于使容器轻量化且快速启动

服务器上虚拟机(VM)和容器之间的差异

电脑、VM、容器和进程之间的隔离和效率的比较:

  • 电脑提供最大程度的隔离。 VM、容器和进程的隔离性递减。
  • 进程提供的效率最高,进而可能密度最大。 容器、VM 和电脑的效率递减。
  • 内核和系统资源(如文件系统)均可共享:
  • 仅共享硬件
  • 容器共享硬件和内核(Windows Hyper-V 容器除外,它不共享内核)
  • 进程共享硬件、内核和系统资源
  • 电脑不共享任何内容


 3 容器优点

 容器还有其他好处,比如部署的一致性、在多环境下的可移植性、隔离性和更高的部署密度等。对于现代的云原生应用而言,容器镜像已经成为集应用服务代码的封装、运行环境、依赖项和系统库等于一体的部署单元。因为容器具有快速启动的特性,所以非常适合用在需要快速横向扩容的场景,比如云原生应用。

概括而言,容器具有以下优点:

  • 需要相对较少的资源。 与 VM 相比,它们消耗的资源更少。
  • 快速启动。 容器启动时间大致相当于启动新进程所需的时间。
  • 提高服务器密度。 与 VM 相比,容器可以更高效地利用可用硬件的内存、磁盘和 CPU。 这使得空闲服务器减少,从而更好地利用现有的计算资源。 这对于云提供商和用户尤为重要,因为这样可以降低成本。

总结

什么是云原生应用?为什么不仅在云端我们会采用云原生模型,甚至边缘计算也开始使用该模型,是什么使得云原生应用具有如此吸引力?此外,到底该如何设计和开发云原生应用呢?

在刚开始构建云原生应用时,开发者们遇到的最大障碍之一是这些应用服务往往运行于不同的机器之上,所以需要考虑机器间的网络通信模式。他们甚至自己都没意识到,其实这就是分布式系统。分布式系统看上去就像是一台机器在工作,但其实它由一组独立的机器组成,它们之间通过网络相连接。这样的系统可以将计算任务分配到不同的机器上,这种分配任务的能力使得应用服务在具有可扩展性、可靠性的同时也更加经济。例如,大多数云服务供应商会使用便宜一些的商用机,然后依靠软件的解决方案来处理诸如高可用和可靠性等常见问题。

很多开发人员在刚开始构建云服务时都很困难。简而言之,他们碰到的三个主要挑战是:首先,他们需要懂分布式系统;其次,他们需要学习新的技术,比如容器和函数计算;最后,他们还需要掌握构建云原生应用的正确方法。如果你掌握了像分布式系统的常见误区、十二要素应用、综合SLA这些基础知识,那么你才能更轻松地实现从传统软件开发到云原生应用开发的转变。

由于容器基于操作系统虚拟化技术,因此它们在同一台机器上运行时是共享一个操作系统内核的。尽管与虚拟机提供的基于硬件虚拟化的隔离相比还有一定差距,但是这种系统级别的隔离在大部分情况下已经足够了。若以VM为基础来构建云原生应用则会有以下缺点:


·虚拟机的启动需要整个操作系统,因此花费的启动时间会更长。


·虚拟机镜像占用的空间也是一个问题。一台虚拟机包含了整个操作系统,通常有几个GB大小。而镜像通常存储在中央镜像仓库中,通过网络来传输它们则需要花不少时间。


·虚拟机的扩容也是一个挑战。纵向扩容(增加更多资源)意味创建然后启动一个新的、更大的虚拟机(更多CPU、内存、存储空间等)实例。而横向扩容意味着创建新的实例,因为虚拟机的启动很慢,所以往往无法达到快速响应的目的。


·虚拟机还会带来一些额外的开销,会消耗更多的内存、CPU和存储资源。所以它部署的密度(同一台机器上虚拟机实例的数量)就会受到制约。


最常见的需要硬件虚拟化级别隔离的场景是有潜在风险的多租户场景。你需要防止一个用户试图恶意突破隔离,尝试访问位于同一个基础架构或同一台服务器上的其他租户的资源。云服务提供商会在内部采用一些技术手段,在保持容器的启动速度和效率优势的情况下同时满足虚拟机级别的隔离性。诸如此类的技术有Hyper-V容器、沙盒容器(sandbox container)和微虚机(MicroVM)等。下篇文章会介绍最流行的一些微虚机技术


网站公告

今日签到

点亮在社区的每一天
去签到