在线公开课 | 云原生的基石,一文读懂容器、Docker、Pod究竟是什么

Alt

课程概要
云原生(Cloud Native),是2013年由Pivotal公司率先提出的概念。云原生以容器化、微服务、可持续交付性,帮助企业构建和运行可弹性扩展的应用。因为云原生应用构建简便快捷,部署轻松自如,运行按需伸缩等特色,近年来受到愈来愈多企业的欢迎。
容器是云原生概念的重要组成部分,做为一种计算单元,容器能够以更加轻量化、更小开销的方式来运行;而做为一种应用的包装形式,容器则赋予了应用独立和便携的能力。随着Docker、Kubernetes技术的成熟,容器也成为了时下最火的开发理念。

根据Gartner的预计,2022年有75%的全球化企业将在生产中使用容器化的应用(当前约为30%)、50%的应用软件将容器化适应超融合环境(目前约为20%)。Docker和Kubernetes将从成为成为跨环境的新标准。所以,了解容器、Docker的基本概念,是玩转云原生开发的基础。安全

为了帮助开发者了解容器的基本概念及应用场景,3月12日,京东智联云产品研发部专家架构师刘俊辉为你们开启了《六周玩转云原生》系列技术公开课的第一讲。刘俊辉老师以《容器与Pod简介》为主题,从容器的构成、Docker的基本概念、容器的典型应用、Pod的基本概念、容器安全与京东智联云原生容器等方面,为开发者系统梳理了容器的相关知识。服务器

同时,经过容器与Pod的「课后做业」,鼓励参会的小伙伴在课后亲自动手,从而加深印象。(点击“阅读”可获取实操文档哦~)那么,刘俊辉老师究竟分享了哪些干货?容器和Pod到底是什么?让咱们一块儿来回顾一下精华内容吧!网络

六周玩转云原生

容器入门:Docker、Pod初探

— 京东智联云 刘俊辉—架构

01容器是什么?

要给容器下一个准确的定义,是一件不容易的事情,由于每一个人看待容器的视角有所不一样。在刘俊辉看来,容器既是一种计算单元的提供方式;又是一种应用的包装形式。函数

- 容器是一种计算单元微服务

做为一种计算单元,容器与线程、进程、虚拟机、物理机同样(以下图所示)。在连续尺度上,越往左隔离性、安全性和开销越低,越往右则越高。而容器则偏偏是介于进程和虚拟机之间的一种计算单元。工具

在这里插入图片描述

但并不是全部的应用都适合选择容器,开发者能够根据本身应用的特色和需求选择最适合的计算单元。例如,你的应用是高性能、互信的,且处于同一个管理区域,那么用线程或者进程就能够知足;但若是你的应用是多租户的,而且和其余应用运行在同一个空间,那么你就须要考虑如何将这些应用安全地隔离开,使得数据不会被泄露或性能受到影响。那么这时,容器也许就是一个不错的选择了。性能

由于容器是一个「高度隔离的进程」,它在通常进程的隔离基础上又增长了新的隔离机制,这些隔离机制是使用Linux的内核提供的,它包括一些命名空间(Name Spaces)和CGroup。命名空间能够分为网络、存储和计算三大类。其中,最为重要的是网络命名空间。它保证了容器的网络是独立于其余容器网络的。每一个容器本身看到的文件系统和其余容器的是不共享的,每一个容器只能看到本身的进程ID,而进程编号也是连续的。学习

而说到容器与虚拟机最大的区别,刘俊辉认为,相对于虚拟机,容器最大的特征是它没有本身独立的操做系统,而是共享其宿主机上的一个操做系统;而虚拟机则运行在「一台独立的服务器上」。所以,容器相比于虚拟机的成本会小,但隔离性却有所欠缺。测试

- 容器是一种应用的包装形式

有过应用开发经验的人都知道,应用并非一个单一的可执行文件,一个稍微复杂一点的应用包括多个部分,包括:代码、可执行文件、配置依赖、外部依赖(动态连接库)等。

因此在应用发行包装的时候,须要考虑目标操做系统的版本、系统架构以及它所依赖的模块等因素。不然应用安装时会改动系统的不一样部分。

而容器做为一个应用的包装,它最大的特色就是实现了应用的独立和便携,容器自己包含了应用全部的依赖,这使得它能够再任意的基础设施上运行,不会由于系统版本、架构的问题,而致使各类意外。

02Docker是什么?

简单来讲,Docker能够看做是一个很是成功的容器管理平台。Docker最重要的部分就是它的运行管理环境(以下图所示)。

在这里插入图片描述

正如上面所说,容器是一个计算单元,那么Docker的运行环境就是用来建立、管理和销毁这些计算单元的。在建立和管理这些计算单元的时候,须要用到计算单元的包装(也就是它的软件发行包),这些包装以容器镜像的方式存放在它的运行环境中,全部的容器计算单元都是经过这些镜像来建立的。

但镜像自己会有版本的发布、升级等需求,这就涉及到Docker的另外一个重要组成部分DockerHub了。DockerHub有点像苹果的App Store,它是一个很是大的「容器市场」,全部经常使用的软件均可以在DockerHub上找到。

最后一个Docker的重要模块,就是用户界面和管理工具,它们用来向容器的运行环境发布命令或查看状态。只须要用一个Docker的命令加上一些参数,就能够实现建立、删除、查看容器的运行状况等操做。

接下来咱们就来看看Docker的实际操做状况,咱们会以运行一个Hello World的容器为例,讲讲Docker的使用状况。其实,只须要安装好Docker就能够尝试运行这个Hello World的容器了。

经过下面代码,咱们来看看Docker作了些什么:

在这里插入图片描述

首先咱们看到Docker在本地要去找Hello World最新版本的镜像,它发现本地并无这个镜像后去DockerHub上把这个镜像给下载了下来。而后,这个镜像就被运行了,以后Docker后台就建立了这样一个容器。

Docker的出现,让容器应用管理变得很是轻松,运行容器只须要一个命令就能够实现。而从DockerHub上下载镜像、建立各类各样的隔离环境、建立容器与外部的网络通讯环境均可以由Docker来完成。能够说Docker能够管理容器的整个生命周期。

03容器vs.虚拟机,伐木工的斧与锯

做为对容器的总结,咱们能够把容器最大的特色概括为轻量级和彻底独立部署。这两大特色与云原生的弹性无限扩展和按需使用的定位十分吻合,也正由于如此,容器成为了云原生的基石。

虽然容器和虚拟机都是计算单元,但从虚拟机到容器,并不能看作是一个简单的性能提高或架构的改变,而是一种应用理念的改变。

举个例子,从前伐木工人看书的时候会用斧子,后来你们以为用斧子太费力气,有个高人就介绍了另外一个砍树的工具「锯子」。但若是伐木工人拿着锯子去砍树的话,会发现尚未斧子好用。但事实是,斧子和锯子是两种使用的理念。

而说回容器和虚拟机理念的不一样,咱们能够经过下面的图表来进一步感觉。

在这里插入图片描述

容器的典型应用能够分为两类,一类是微服务,一类是DevOps。

微服务是指系统的不一样单元或功能运行不一样的容器,每个服务的容器数量能够根据本身的负载进行调整。好比,一个大系统包含用户登陆、货品展现、货品交互等功能,但这个系统的各个部分并非同时线性增长的,有些部分可能忙一些,有些部分的容量可能还有富余。

在这里插入图片描述

DevOps是指开发者、测试、生产过程流水线化。由于容器的「自包含」特性,当它做为标准的流通物品,可使开发环境、测试环境和生产环境的应用包装彻底一致,这样就减小了应用因为依赖关系配置错误等致使的意外,从而使得开发、测试、生产的整个流水线变得更高效。

在这里插入图片描述

04 Pod,一种加强型容器

Pod是一种组合的多容器运行单元,也是Kubernetes里的一个基础单元。你能够把它看做是一种容器的扩展或者加强型的容器。Pod里面包括一个主容器和数个辅助容器,它们共同完成一个特定的功能。把多个进程(容器也是一种隔离的进程)打包在一个Name Space里的时候,就构成了一个Pod。Pod里面不一样进程的应用包装仍然是独立的(每一个容器都会有本身的镜像)。

Pod的意义在于,它能够既保持主容器和辅助容器的的密切关系,又保持主容器的独立性。因为主容器和辅助容器的生命周期相同,能够同时被建立和销毁,所以把它们放在一个Pod中,可使他们的交互更加高效。

而另外一方面,主容器须要完成一些主要的工做,而另外一些工做多是有共性的,就能够单独打包由辅助容器来运行。

很是推荐你们去一个叫Katacoda的网站,它上面有大量免费的在线实验,包括Docker及Docker Image等动手操做项目,并且如今是彻底免费的。你们不妨去这里动手实操起来。

05京东智联云原生容器,安全为王

最后,刘俊辉老师就京东智联云原生容器作了相关的介绍。在介绍以前,他先着重讲解了安全性对于容器产品的重要性。

当一个容器平台运行多个租户应用的时候,很容易发生「侧向攻击」,即进程利用系统的漏洞来进行权限提高,例如把本身的权限升级成管理员,从而得到对系统上运行的其余进程或容器的操做权限。目前这类漏洞一般会致使恶意的使用计算资源用来「挖矿」。

针对这一问题,目前有两种解决方案,一种是「限制系统调用」;一种是「独立内核」。

限制系统调用,指的是经过限制应用的系统调用,来下降应用的能力,从而避免对其余应用的危害。目前,Google的Givsor和IBM的Nabla都是采用的这种作法。以下图所示,原来一个应用会访问到全部的系统调用,但在Nabla的模式下,应用只会访问必要的系统调用,其余调用则都被屏蔽了。

在这里插入图片描述

但这种方法的弊端在于,它须要你在一开始就要给应用开放「恰到好处」的权限,若是一不当心没有开放足够的权限,那应用就可能会崩溃。

独立内核则参考了虚拟机的解决方案,它是指在容器中增长一个新的内核,这个内核是轻量化的,包括「微内核」和Unikernel两种实现方式。Unikernel和应用是编译在一块儿的,它们之间能够直接经过函数调用,而不须要系统调用。

这一方案的好处在于,容器本质上只是跟本身的内核打交道,而内核则是跟宿主机打交道,内核与宿主机的交互只须要一些通用的指令便可,不涉及到直接调用到危害系统的指令。目前Kata Container和京东智联云原生容器,就是采用的这种方式。

这种方式的好处在于,微内核做为一个最小化的操做系统,能够知足全部系统的调用,同时去除一些没必要要的系统操做部分;它的系统启动时间很是短,能够达到秒级,同时开销比虚拟机要小。

除了安全性以外,京东智联云原生容器还有许多其余的优点,总结起来包括如下几个方面:

  • 兼具虚机的安全性和容器的灵活性;
  • 采用独立微内核,提供与虚机相同级别的安全保证;
  • 使用标准Docker镜像直接启动,无需安装配置宿主机;
  • 具备与虚机能力相同的计算、网络、存储能力;
  • 支持容器和Pod,支持Kubernetes集群。

经过本次学习,开发者和对云原生感兴趣的小伙伴对容器的基本概念有了全面的了解,在老师分享环节以后,有很多学员都经过提问的方式与老师进一步交流,刘俊辉老师也就你们常见的疑问进行了耐心的解答。

值得留意的是,京东智联云还为本次课程设置了「课后做业」环节,做业包括两个部分:1. 使用京东智联云上的云主机,安装Docker运行环境,了解Docker运行、管理容器的基本操做,使用Linux系统工具,探索容器和Pod的基本结构;2. 使用京东智联云直接建立原生容器,经过京东智联云控制台对容器进行基本操做。了解、体验原生容器与Docker容器的异同。经过课后练习进一步夯实对容器和Pod的理解,同时完成做业并提交的同窗,均可以得到精美的小礼品。

在这样一顿操做以后,不少参加课程的小伙伴都纷纷表示此次课程简直是「帮助小白走近了容器世界的大门」,并对下次课程充满期待!

在了解了容器的基本概念以后,第二次课程将以你们广泛关心的Kubernetes为主题,对Kubernetes的基本概念和构成进行全面讲解,也会延续第一期干货满满的画风。

这里提醒你们一下,《六周玩转云原生》的第二期课程将在3月24日晚上8点进行。

小伙伴们千万不要错过!点击下方连接,直接加入吧!👇👇👇

课程报名 | 《六周玩转云原生》- 给小白的Kubernetes技术课

云原生的时代已来,而你,也将成为这个新时代的构建者之一!

划重点!

点击【阅读】获取课程实操文档

Alt

Alt

相关文章
相关标签/搜索