《基于Kubernetes的容器云平台实战》——1.3 Docker基本概念
557
2022-05-29
第1章Docker简介
随着互联网及移动互联网的快速发展,云计算技术也开始迅猛发展,云计算技术发展包括两大方向:虚拟化及容器化。虚拟化技术是传统的云计算技术,容器化是新一代的云计算技术。在新一轮的容器云计算技术大潮中出现了多种容器化技术,如Garden、Warden、Docker、Rocket、Kata等。经过多年的发展Docker容器技术逐渐被接受并应用于DevOps和微服务等领域,Docker可以说正在成为当今云时代的基础“构件”,了解和掌握它的功能、架构和技术特点,对于广大业界同仁来说是迫切的需求。下面就尝试从它的基本功能、优缺点、基本概念和架构原理等多个方面进行初步的剖析,希望能够给读者带来一定的帮助。
1.1 什么是Docker
我们通常所说的Docker实际上是指Docker引擎,它是Docker公司容器平台产品的核心部分。它集成了来自操作系统内核的联合文件系统、进程控制组和命名空间等技术,将它们打包成人人可用、人人用得好的容器工具。Docker的重要性在于它通过统一的镜像格式和简单的工具将应用软件和基础运行环境成功地隔离开来,为容器技术的大众化打开了快速通道,使得容器技术的使用进入了主流。Docker的镜像格式和运行时环境正在迅速成为事实上的工业标准,而它自身也在变成云时代的基础“构件”。
Docker引擎可理解为一套轻量级应用运行时环境,应用及其依赖被隔离在相互独立的运行环境中,但是它们却共享一个OS内核,人们形象地将这种环境称为“容器”。这种将多个应用部署在一台主机上以相互独立的“容器”运行的模式,不仅能提高硬件利用率,还能减少应用故障对其他应用的影响。
Docker引擎使用了客户端–服务器的运行模式,其主体以守护程序方式运行在每台需要使用它的主机上。客户端既可以与守护程序运行在同一台主机上,也可以通过Restful形式的API远程访问它。Docker引擎服务器端不仅提供了对容器生命周期的完整管理功能,还将容器的创建基础——“镜像”的管理功能也纳入其中,为用户提供了“一站式”容器管理工具集。它用Go语言编写而成,需要利用操作系统的虚拟文件系统、命名空间、控制组等特性来实现自己的功能,并需要不少外部库的支持。Docker引擎目前已经能够支持Linux、MacOS和Windows三种操作系统,可以部署在物理机、虚拟机和公有云等多种环境中。
在Docker中,“镜像”是创建容器的基础。Docker使用分层的方式存储镜像,镜像中包含应用运行所需要的组件。镜像之间可以通过引用的方式共享镜像层,减少了对存储空间的占用,让大家既能享受“隔离”带来的好处,又能减轻资源浪费带来的苦恼。而容器环境是根据镜像来动态创建的,容器中应用的写操作只改变自己的读写层,公共的镜像部分对所有容器都是只读的。
Docker还为镜像分发设计了仓库机制,通过本地和远程仓库之间的上传和下载可实现软件的标准化分发,打通了从应用开发、镜像构建、发布、下载到应用部署的完整通道。Docker专门构建了完全开放的镜像仓库hub.docker.com,帮助全世界的软件厂商、开发者和使用者以最小的时间和技术成本体验到容器技术带来的好处;它无疑为统一的镜像格式的推广使用立下汗马功劳。
在Linux操作系统上,Docker利用内核所提供的namespace和CGroups特性为应用进程构建起沙箱和资源限制:在此沙箱容器中,应用拥有自己的设备文件、进程间通信环境、根文件系统、进程空间、用户账户空间和网络资源空间;管理员可以以容器为单位来限制应用对CPU、内存、磁盘I/O和网络等资源的使用能力。运用这两个技术,Docker为应用构建了既轻又坚固的容器外壳,同时,它还将内核提供的很多不同的安全相关技术集成起来,为用户在云时代应对各种挑战准备了丰富和先进的技术装备。
Docker引擎自身的功能也在不断演进之中,它不仅包含了容器和镜像管理功能,还逐步扩展出编排和集群管理功能,正在构建一个容器平台。在此过程中,既有的接口形式没有改变,Dockerd守护进程也继续担当自己的职责;而原有的核心的容器和镜像管理功能被剥离,由Containerd来负责。这是一个由Docker贡献出的新的开源项目,它不仅以更底层和高效的接口来暴露这些核心功能,还从镜像和容器存储的层面实现了多租户的特性。同时,Docker将容器运行时接口和镜像格式在OCI(开放容器倡议,Open Container Initiative)组织的框架下进行了标准化,并于2017年完成了运行时(runtime)和镜像(image)两个标准,固化了Docker核心技术要素,消除了容器技术发展碎片化的阴影。这个标准化过程的另一个重要产物是Linux上的参考实现:RunC开源项目。Containerd正是通过这个关键组件来完成容器生命周期管理的。由此可见,当前版本Docker引擎实际上由Dockerd、Containerd和RunC等组件构成;为了表述方便,还是统一称为Docker引擎。
在上述演进过程中,Docker自身不仅由于剥离了一些底层核心功能而得以轻装上阵,发展自己独有的容器平台功能,而且整个开源社区也受益于这些被剥离出的核心组件。它们的API演进不再受到Docker平台的影响,功能可以更好地适配业已迅速发展起来的容器生态环境的需求,成为名副其实的容器时代的基础“构件”。
Kubernetes Docker
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。