写点什么

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

作者:程序员啊叶
  • 2022 年 7 月 25 日
  • 本文字数:2098 字

    阅读完需:约 7 分钟

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

基于容器的交付

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

● 跨平台及云原生特性:容器技术实现了操作系统层面上的“一次构建,随处运行”的理念,通过设定一套标准化的配置方式,提升了容器的跨平台特性和可移植性。同时,云平台通过提供对容器的支持,让容器成为云原生平台的标准化交付技术。

● 规模交付:容器技术是微服务架构规模化部署的最佳载体,容器运行的基于进程的概念、隔离特性及单一职责特性都与微服务架构相辅相成。在微服务规模化部署场景下,我们需要通过容器的编排技术保证微服务之间的依赖特性、部署协调和运行多集群微服务。容器编排技术保证微服务在出现故障和性能瓶颈时,水平扩展可以弹性伸缩,资源调用编排技术保证微服务架构的高可用。

本文给大家讲解的内容是微服务交付:基于容器的交付-Docker 的概念、容器与虚拟机的区别、容器交付的优势

  1. 下篇文章给大家讲解的内容是微服务交付:基于容器的交付-Docker 的原理及构建部署过程

  2. 觉得文章不错的朋友可以转发此文关注小编;

  3. 感谢大家的支持!

用户头像

还未添加个人签名 2022.07.13 加入

还未添加个人简介

评论

发布
暂无评论
一次性把Docker的概念、容器与虚拟机的区别、容器交付的优势讲清_Java_程序员啊叶_InfoQ写作社区