一次性把Docker的概念、容器与虚拟机的区别、容器交付的优势讲清

2022-07-01 14:40:30 浏览数 (1)

◆ 基于容器的交付

基于容器的交付可以说是软件交付方式的一次技术革命。容器技术将服务交付依赖的底层基础设施进行了标准化,屏蔽了多样化的环境差异。对开发人员来说,容器技术可以把对交付物的质量保证及测试验证工作进一步提前到开发集成阶段,缩短代码到实际交付物的距离;对运维人员来说,服务的部署、扩容、回滚更为方便;同时容器技术成为规模化微服务部署、DevOps、不可变基础设施从思想到落地的关键技术环节。

◆ Docker概述

本节是对Docker的概述,将从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的关键。容器没有完整的操作系统层,并且是进程级别的,所以它的启动速度是秒级启动,占用资源相对虚拟机也比较低。

  • Cgroup全称Control Group。Linux操作系统通过Cgroup可以设置进程使用CPU、内存和I/O资源的限额。Cgroup可以对容器进行层次化的分组,并可以按组实现资源限制和控制策略。
  • NameSpace在Linux中是管理Host的全局唯一的资源,它可以实现容器的工作空间与资源隔离,容器中看到的文件系统、网卡、进程等资源,通过NameSpace技术可以使这些资源看上去都是容器自己的。

◆ 容器交付的优势

通过上面的介绍,我们可以看到,使用容器进行交付有诸多优势,具体如下。

  • 屏蔽环境差异:在《SRE Google运维解密》一书中,来自Google的运维人员总结到,过去生产事故中有一半事故产生的原因,都是生产环境配置的变更,或者是由测试、生产环境不一致导致的。由于容器技术基于开放的标准,因此相比基于代码的交付,基于容器的交付能够标准化服务,对整个服务运行环境进行打包交付。
  • DevOps一体化:在没有容器之前,软件的交付往往需要通过开发人员手写各种脚本完成服务的启动和部署,而这些脚本在不同环境下的差异很容易在开发人员与运维人员之间产生误解和分歧。容器技术的出现统一了开发人员与运维人员的领域俗语,通过标准界面打通了开发人员与运维人员之间的技术壁垒。同时基于容器镜像的测试和部署也大大简化了整个CI/CD过程。
  • 高效的资源利用率和隔离特性:容器之间共享底层操作系统,相比虚拟机技术,性能更加优越,系统负载更低。可以充分利用系统资源,通过NameSpace、Cgroup技术保证容器之间的隔离性。
  • 跨平台及云原生特性:容器技术实现了操作系统层面上的“一次构建,随处运行”的理念,通过设定一套标准化的配置方式,提升了容器的跨平台特性和可移植性。同时,云平台通过提供对容器的支持,让容器成为云原生平台的标准化交付技术。
  • 规模交付:容器技术是微服务架构规模化部署的最佳载体,容器运行的基于进程的概念、隔离特性及单一职责特性都与微服务架构相辅相成。在微服务规模化部署场景下,我们需要通过容器的编排技术保证微服务之间的依赖特性、部署协调和运行多集群微服务。容器编排技术保证微服务在出现故障和性能瓶颈时,水平扩展可以弹性伸缩,资源调用编排技术保证微服务架构的高可用。

来源:

https://www.toutiao.com/article/7113879710761075241/?log_from=7fe75acab42ce_1656466320335

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

  • 相关推荐 推荐文章
  • 从 CPU 讲起,深入理解 Java 内存模型!
  • 前端工程化:保姆级教学 Jenkins 部署前端项目
  • 中高级程序员可能都不会使用spring-boot-starter-jdbc访问MySQL
  • 探索云原生技术之基石——Docker容器
  • 一种并行,背压的Kafka Consumer
  • Nomad正在接管Kubernetes吗
  • MIT协议分布式文件系统,一个简单、方便的文件存储方案
  • 深入浅出 Nginx 实战与架构原理
  • 技术专家带你彻底掌握线程池
  • 基于GF的后台管理系统,完善的权限用户管理,致力于快速高效开发
  • Java 工程师相见恨晚的神兵利器和使用技巧

0 人点赞