容器技术是一种标准的软件单元,用于打包代码及其所有依赖项,从而使应用程序能够在不同计算环境之间快速可靠地运行。
容器技术的发展历程如下:

技术萌芽期
容器技术的雏形可以追溯到20世纪70年代末。1979年至2012年间,诸如Chroot、Jail/zone、Openvz、cGroup和LXC等资源隔离和控制技术的开发标志着虚拟化和容器技术的开端。
Chroot(1979年)在20世纪70年代,计算资源稀缺,快速销毁和重建基础设施以解决测试环境污染问题几乎不可能。为了隔离出供软件构建和测试的环境,chroot(change root)系统调用程序应运而生。在1979年的Unix V7开发过程中,chroot系统调用正式引入,为每个进程提供独立的磁盘空间,将进程及其子进程的根目录改变到文件系统中的新位置,使这些进程只能访问该目录。这个隔离出来的新环境被称为Chroot Jail,标志着进程隔离的开始。
Jail/zone(2000年)2000年,FreeBSD操作系统发布了FreeBSD Jails隔离环境,真正实现了进程的沙箱化。这增加了对文件系统、用户和网络等的隔离,实现了客户服务之间的隔离和管理。FreeBSD Jails通过操作系统级别的隔离和限制能力实现沙箱化,而非硬件虚拟化技术。管理员可以将FreeBSD计算机系统划分为多个独立的小系统,称为“jails”,并为每个系统分配IP地址,进行软件安装和配置的定制。
Openvz(2005年)Openvz(Open Virtuzzo)是Linux操作系统级虚拟化技术,通过Linux内核补丁进行虚拟化、隔离、资源管理和状态检查。操作系统级虚拟化有一些限制,因为容器共享相同的体系结构和内核版本,当客户需要不同于主机的内核版本时,这种缺点就会显现。OpenVZ容器具有一套隔离的文件系统、用户、用户组、进程树、网络、设备和IPC对象。
cGroup(2007年)Process Containers(由Google在2006年推出)旨在限制、计算和隔离一系列流程的资源使用(CPU、内存、磁盘I/O、网络)。一年后(2007年),为了避免与Linux内核上下文中的“容器”一词混淆,改名为ControlGroups,简称Cgroups,并最终合并到Linux内核2.6.24中。
LXC(2008年)Linux容器(LXC)是第一个、最完整的Linux容器管理器实现方案。2008年,通过将Cgroups的资源管理能力和Linux Namespace的视图隔离能力结合,LXC完整的容器技术出现在Linux内核中,并且可以在单个Linux内核上运行而无需任何补丁。LXC存在于liblxc库中,提供各种编程语言的API实现,包括Python3、Python2、Lua、Go、Ruby和Haskell。现在LXC项目由Canonical公司赞助并托管。
技术迸发期

Docker(2013年)2013年,Docker开源,开启了容器化的正确方式,以应用分发和交付的理念将容器技术发展带到新高度,容器技术得到极大的接受和认可,为容器技术普及和云原生技术的发展奠定了坚实的基础。Docker的核心创新是容器镜像(docker image),一种新型的应用打包、分发和运行机制。容器镜像将应用运行环境,包括代码、依赖库、工具、资源文件和元信息等,打包成一种操作系统发行版无关的不可变更软件包。
LMCTFY(2013年)lmctfy(“Let Me Contain That For You”)是基于Linux内核cgroups功能的操作系统级虚拟化实现。它提供了与其他容器相关的Linux工具(如Docker和LXC)类似的功能。Lmctfy是Google容器工具的发行版,是受Apache许可2.0版条款约束的免费开源软件。维护者在2015年5月表示他们努力将他们的概念和抽象合并到Docker的底层库libcontainer中,因此停止了lmctfy的积极开发。
Kubernetes(2014年)2014年,Google基于内部使用的Borg系统创建了开源项目Kubernetes(简称K8s),用于解决大规模集群的容器部署、运行和管理问题。Kubernetes在容器的基础上增加了一层新的管理抽象Pod,以便更好地利用容器进行应用的功能模块切分。得益于Google在大规模集群基础设施建设的强大积累,脱胎于Borg的K8s很快成为了行业的标准应用。
Containerd(2016年)2016年3月,Docker 1.11的Docker Engine包含了containerd,Containerd向Docker提供运行容器的API,二者通过grpc进行交互,containerd最终通过runc来实际运行容器。2016年12月,Docker公司宣布将容器运行时相关的程序从docker daemon剥离出来,形成了containerd。
OCI/CRI/CNI(2015年起)Google带头成立了Cloud Native Computing Foundation(CNCF),旨在“构建云原生计算——一种围绕着微服务、容器和应用动态调度的、以基础设施为中心的架构,并促进其广泛使用”。通过CNCF基金会,众多技术厂商一起制定了一些列行业实施标准,包括与容器相关的最为重要的几个规范,例如CRI、CNI、CSI、OCI Distribution Spec、OCI Image Spec、OCI Runtime Spec和Shimv2。
Kata Containers(2017年)容器技术通过共享内核导致资源隔离不彻底而引发的安全问题得到业界越来越多的关注和担忧,为“安全”而生的Kata容器技术应运而生。Kata Containers是一个Novel实现的轻量虚拟机,可以无缝地与容器生态系统进行集成。Kata Containers项目的主要目标是将虚拟化的安全隔离优势和容器的快速启动特点结合起来。Kata Containers让每个容器/pod采用其单独的内核,运行在一个轻量级的虚拟机中。由于每个容器/pod现在都运行在专属虚拟机中,恶意代码无法再利用共享内核来访问邻近的容器。
商用探索期
Tencent TKE/EKS TKE是PHP中文网推出的托管容器服务,可以在云中和本地运行和扩展Kubernetes应用程序。
AWS ECS/EKS EKS是亚马逊云服务推出的托管容器服务,可以在云中和本地运行和扩展Kubernetes应用程序。
Google GKE GKE是谷歌推出的托管容器服务,可以在云中和本地运行和扩展Kubernetes应用程序。
Microsoft AKS AKS是微软Azure推出的托管容器服务,可以在云中和本地运行和扩展Kubernetes应用程序。
Alibaba ACK ACK是阿里云推出的托管容器服务,可以在云中和本地运行和扩展Kubernetes应用程序。
Huawei CCE CCE是华为云推出的托管容器服务,可以在云中和本地运行和扩展Kubernetes应用程序。
商用扩展器
AWS Outposts AWS推出的混合云管理平台。
Google Anthos Google推出的混合云管理平台。
Azure Arc 微软推出的混合云管理凭条。
Linux虚拟化技术
Linux Cgroup Cgroup是Control Groups的简称,直译为控制组,主要用于资源控制,限制和隔离一组进程(Process Groups)对系统资源(如CPU、Memory、I/O等)的使用。其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。从实现的角度来看,Cgroup实现了一个通用的进程分组的架构,而不同资源的具体管理则是由各个Cgroup子系统实现的。

Cgroup的特点包括:Cgroup的API以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现Cgroup的组件管理;Cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁Cgroup,从而实现资源的分配和再利用;所有资源管理的功能都以子系统的方式实现,接口统一,子任务创建之初与其父任务处于同一个Cgroup的控制组。
Cgroup的功能包括:资源限制,可以对任务使用的资源总额进行限制;优先级分配,通过分配的CPU时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级;资源统计,可以统计系统的资源使用量,如CPU时长、内存用量等;任务控制,Cgroup可以对任务执行挂起、恢复等操作。
Linux Namespace Namespace是Linux内核用来隔离内核资源的方式。通过Namespace可以让同一Namespace中的进程相互可见,不同Namespace中的资源互相不可见。Linux Namespaces是对全局系统资源的一种封装隔离,使得处于不同Namespace的进程拥有独立的全局系统资源,改变一个Namespace中的系统资源只会影响当前Namespace里的进程,对其他Namespace中的进程没有影响。

Docker通过Namespace和Cgroup这两个技术实现了用户从Linux系统的Namespace,到Namespace其他能力的范围圈定,再到具体能力的实现,Cgroup将整体结合起来,使Docker的实现成为可能。

《数字化 IT 从业者知识体系》背景
数字化和可持续发展是中国企业未来发展的两大主题,掌握数字化知识,具备数字化能力,应用数字化技术是我们IT从业者未来核心竞争力所在。《数字化 IT 从业者知识体系》的初衷是为IT从业者提供系统性的数字化知识体系,内容涵盖管理实践、工程实践、技术实践三个层次,涉及软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四大方面。
在接下来的《数字化 IT 从业者知识体系》系列文章中,何文强将从软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四个方面,为大家进行逐一分享介绍:
相信该知识体系有利于IT从业者构建丰富的技术体系、全面的技术视野和系统的能力建设。欢迎大家前往《数字化 IT 从业者知识体系》话题进行详细阅读。
以上就是数字化 IT 从业者知识体系 | 应用部署与管理 —— 容器技术的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号