基于容器的交付可以说是软件交付方式的一次技术革命。容器技术将服务交付依赖的底层基础设施进行了标准化,屏蔽了多样化的环境差异。对开发人员来说,容器技术可以把对交付物的质量保证及测试验证工作进一步提前到开发集成阶段,缩短代码到实际交付物的距离;对运维人员来说,服务的部署、扩容、回滚更为方便;同时容器技术成为规模化微服务部署、DevOps、不可变基础设施从思想到落地的关键技术环节。
本节是对Docker的概述,将从Docker的概念、容器与虚拟机的区别、容器交付的优势等方面进行说明。
首先,容器技术本质上是对计算机资源的隔离与控制,可以理解为一种沙盒技术。沙盒就是它能够像集装箱一样,把应用及应用依赖的基础设施一起定义、封装,打包为镜像,这样应用就可以独立部署、复用;同时应用与应用之间相互隔离。
而Docker是一个开源的容器引擎,是容器概念的落地实现,早期容器内核是基于LXC(LinuX Container)实现容器创建和管理的,开发者可以将应用及其依赖的软件打包在一个可移植的镜像中,镜像可以被推送到私有仓库或者远程仓库;运维人员可以从仓库中加载镜像并启动容器。下面是维基百科对Docker的定义。
Docker是一个开源的软件项目,可以自动化部署应用程序在软件容器下的工作,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中 的 资 源 分 离 机 制 , 例 如 Cgroup , 以 及 Linux 核 心 命 名 空 间(NameSpace),来建立独立的软件容器(Container)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成额外负担。
容器技术与传统虚拟机技术虽然都是虚拟化技术,但还是有本质差别的。传统的虚拟机是在物理机的层面上增加了一层虚拟化技术,这种虚拟化技术上的每一个虚拟机都拥有一个完整的操作系统,有很好的隔离性。在技术实现上,虚拟机技术由Hypervisor(虚拟机监视器)来负责创建虚拟机,这个虚拟机必须运行一个完整的虚拟操作系统才能执行用户的应用进程,这就不可避免地带来了额外的资源消耗和占用。此外,用户应用运行在虚拟机里,它对宿主机操作系统的调用就不可避免地要经过虚拟化软件的拦截和处理,对计算资源、网络和I/O的损耗非常大。同时,每个虚拟机内部都包含了操作系统,所以启动速度相对比较慢。
如下图所示是容器(Container)(右侧)与虚拟机(VM)的差异比较。容器本质上是一个进程,容器之间共享了操作系统内核。
在Linux操作系统中,Cgroup和NameSpace两种技术是实现Docker的关键。容器没有完整的操作系统层,并且是进程级别的,所以它的启动速度是秒级启动,占用资源相对虚拟机也比较低。
通过上面的介绍,我们可以看到,使用容器进行交付有诸多优势,具体如下。
来源:
https://www.toutiao.com/article/7113879710761075241/?log_from=7fe75acab42ce_1656466320335
“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com
来都来了,走啥走,留个言呗~
IT大咖说 | 关于版权
由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!
感谢您对IT大咖说的热心支持!