[ 云原生 | 容器 ] 虚拟化技能之容器与 Docker 概述

铁佛  金牌会员 | 2024-7-14 11:12:33 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 879|帖子 879|积分 2637


   (借用老东家 Youtube 上的一张图)  
在云计算中,虚拟化技能一样寻常可以被分为两类,分别是虚拟机(VM,Virtual Machine)技能以及容器(Container)技能,这里我们只讲云原生中 Docker 虚拟化技能。

  
一、应用部署方式的变革进程

让我们通过回首部署方式的过程,看看为什么容器如此有效。

   图片来源于: [kubernetes.io](https://kubernetes.io/docs/concepts/overview/)  
1. 传统部署阶段

早期,我们在物理服务器上运行应用步调。没有办法为物理服务器中的应用步调定义资源边界,这导致了资源分配标题。比方,假如在物理服务器上运行多个应用步调,则可能会出现一个应用步调占用大部门资源的环境,从而导致其他应用步调性能不佳。解决方案是在不同的物理服务器上运行每个应用步调。但由于资源未得到充实利用,这种方法无法扩展,而且组织维护许多物理服务器的成本很高
   传统模式部署最大的标题是造成资源浪费
  
2. 虚拟化部署阶段

在虚拟化技能被引入后,虚拟化技能允许我们在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化允许应用步调在虚拟机之隔断离,不仅避免了资源冲突而且还能提供一定水平的安全性,因为一个应用步调的信息不能被另一个应用步调自由访问。
虚拟化允许我们更好地利用物理服务器中的资源,有更好的可伸缩性,因为可以轻松地添加或更新应用步调,降低硬件成本等等。通过虚拟化技能,我们可以将一组物理资源表现为一次性虚拟机的集群。
   每个VM都是在虚拟化硬件之上运行全部组件(包罗本身的操作系统)的完备机器。
  
3. 容器化部署阶段

容器雷同于 VM,但它们具有松散的隔离属性,以便在应用步调之间共享操作系统。容器的本质是进程(利用了 NameSpace 做隔离,Cgroups 做限定, rootfs 做文件系统的特别进程),因此,容器被认为是比 VM 更加轻量级的。与虚拟机雷同,容器有本身的文件系统、CPU共享、内存、进程空间等。由于它们与底层基础办法分离,所以它们可以跨云和操作系统版本移植。
   容器技能可以达到企业离开云厂商的欺凌绑()定()。
  
二、为什么要用容器?容器解决了什么标题

容器概述

广泛对容器归纳总结为:


  • 容器是一种基于操作系统本领的隔离技能。
  • 容器的本质是一组收到资源限定,彼此之间相互隔离的过程。容器共享宿主机的内核,资源占用小,轻量化,对应用有好。
  • Docker 是目前主流的容器化工具,Kubernetes(k8s) 是主流的容器编排管理工具。
  • Docker 是基于Linux 内核的2项功能实现的:

    • Namespace
      我们知道 Linux 中的PID、IPC、网络等资源是全局的,而 Namespace 机制是一种资源隔离方案,在该机制下这些资源就不再是全局的了,而是属于某个特定的 NameSpace,各个 Namespace 下的资源互不干扰,这就使得每个 Namespace 看上去就像一个独立的操作系统一样,但是只有 Namespace 是不够。
    • Control groups
      虽然有了 NameSpace 技能可以实现资源隔离,但进程照旧可以不受控的访问系统资源,比如 CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker 采用 control groups 技能(也就是cgroup),有了 cgroup 就可以控制容器中进程对系统资源的消耗了,比如你可以限定某个容器利用内存的上限、可以在哪些 CPU 上运行等等。


容器解决了什么标题

其实通过开始 应用部署方式的变革进程 讲解的内容就可以归纳总结容器重要解决的标题(也是其好处):

  • 解决了上线流程繁琐标题
  • 解决了资源利用率低标题
  • 解决了扩容 / 缩容 不及时标题
  • 解决了服务器环境臃肿标题
  • 解决了环境不同等标题

三、虚拟机 vs. 容器

广泛被大家利用的虚拟机和容器的对比图:

虚拟机

假如我们过细观察虚拟机是如安在物理硬件上构建的,就会发现在物理硬件和操作系统之间有一层 Hypervisor,从更广泛的角度来看,Hypervisor 用于对硬件举行虚拟化,然后按照用户盼望的方式对硬件举行配置。

容器

与虚拟机不同(虚拟机管理步调将物理硬件分别为多个部门),容器就像平凡的操作系统进程。现在的标题是,假如容器就像平凡进程,那么它是如何与其他进程隔离的呢?这就是 Namespaces 出现的地方。
Namespaces是 Linux 中的一个高级概念,每个 Namespaces 都有本身的独立资源,而不必要底层硬件的现实分区。Namespaces 用于虚拟化底层操作系统。
由于容器只是操作系统进程,这就是为什么提升一个容器必要几秒钟,而提升一个虚拟机必要几分钟的原因。

总结



  • 虚拟机

    • 提升服务器资源利用率
    • 提供一个完全隔离的环境(OS级别)

  • 容器

    • 容器提供一个基本的独立环境,实现容器隔离、资源限定。
    • 容器重要解决应用层面的标题,达到应用快速部署、高效管理。

个人感觉我们不应该单纯的举行虚拟机和容器来对比,因为从我们上述的总结与对比中可以发现,
他们的侧重目的点和作用不同,之所以被大家拿出来对比,因为他们都是虚拟化的本领。
其实在云平台中,我以为下面这个图(图片由bluetata原创转载请注明出处)更能体现 虚拟机 和 容器的关系,他们是相辅相成相互合作的,有着不同的分工:


假如要真拿虚拟机和容器举行对比的话,总结起来的对比表格可以参照如下:
容器 Container虚拟机 VM启动速率秒级分钟级运行性能接近原生5%左右丧失磁盘占用MBGB数目成百上千一样寻常几十台版本控制镜像 Images 可以保存差异,可以举行版本控制。Dockerhub 雷同于 GitHub没有有效的差异,没有版本控制隔离性进程级系统级(更底层)操作系统重要支持 Linux几乎全部封装水平只打包项目代码和依赖关系,共享宿主机内核完备的操作系统
四、Docker 概述

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来参加了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上举行维护(相关资源请参照文末)。
   Docker项目只是容器技能的此中一种实现,因为它是管理容器的最流行的工具,所以成为了容器技能的代名词,其他闻名的容器工具还包罗:rkt、Podman、LXC、containerd、Buildah 等。
  
五、Docker 基本构成

Docker 利用客户端-服务器 (C/S) 架构模式,也就是分为客户端(Client)和服务端(Server)。
Docker 重要的架构构成如下(图片由bluetata原创转载请注明出处):

   (架构图参照于官方架构 https://docs.docker.com/get-started/overview/)  
1. Docker Client 客户端

Docker Client 通过下令行大概其他工具利用 Docker API/SDK与 Docker daemon 通信。比方:当利用docker run 下令时,Docker Client 将其发送到 dockerd 来实现相应的功能。
总结起来 Docker Client 客户端的一些特征


  • Docker Client 可以与多个 Docker daemon 举行交互。
  • Docker Client 客户端通过下令行大概其他工具利用 Docker API。
  • Docker Client 客户端和服务器通过 Socket 或 RESTful API 举行通信。
  • Docker Client 客户端可以连接当地大概远程的守护进程。
2. Docker Host 主机

一个物理大概虚拟的机器用于执行 Docker 守护进程和容器。
3. Docker Daemon 守护进程

Docker daemon (dockerd) 监听 Docker API 请求并管理 Docker 对象,如镜像、容器、网络和卷。
   比方:吸收并处置惩罚 docker client 发送的请求。daemon 在后台启动一个server,server 负责担当docker client 发送的请求;担当请求后,server 通过路由与分发调度,找到相应的 handler 来执行请求。
  4. Docker Container 容器

雷同于一个轻量级的沙盒,可以将其看作一个极简的 Linux 系统环境(包罗 root 权限、进程空间、用户空间和网络空间等)。基于 Docker 镜像被创建,镜像是静态的定义,容器是镜像运行时的实体;容器可以被创建、启动、制止、删除、暂停等。容器是独立运行的一个或一组应用。
5. Docker Images 镜像

Docker镜像里包罗了打包的应用步调及其所依赖的环境、可用的文件系统和其他元数据。Docker 镜像是用于创建 Docker 容器的模板。
6. Docker Registry 仓库

仓库用来存储 Docker 镜像,分为公有仓库和私有仓库。可以上传镜像到一个镜像仓库,然后下载到另外一台电脑上并运行它。
Docker Hub 是一个 Docker 官方维护的公共仓库,Docker 默认从 Docker Hub 来查找镜像。我们也可以维护本身私有的镜像托管服务。
利用docker pull或docker run下令时,所需的图像将从配置的仓库中提取。利用该docker push下令时,会将镜像推送到配置的仓库中。

六、Docker 应用场景

1. 作为云主机利用

相比虚拟机来说,容器利用的是一系列非常轻量级的虚拟化技能,使得其启动、部署、升级跟管理进程一样迅速,用起来机动又感觉跟虚拟机一样没什么区别,所以有些人直接利用 Docker 的 Ubuntu 等镜像创建容器,看成轻量的虚拟机来利用。

2. 作为服务利用

假如你仅仅把 Docker 容器看成一个轻量的固定虚拟机用,那其实只能算是另类用法,Docker 容器最紧张价值在于提供一整套平台无关的标准化技能,简化服务的部署、升级、维护,只要把必要运维的各种服务打包成标准的集装箱,就可以在任何能运行 Docker 的环境下跑起来,达到开箱即用的结果,这个特点才是 Docker 容器风靡环球的根本原因。


  • Web应用服务
  • 连续集成和连续部署

3. 微服务架构利用

假如说上面两种应用场景还不敷以体现出与传统的 PaaS 平台相比的巨大上风的话,那么对微服务的架构这种复杂又机动的利用场景的无缝支持绝对具有革命意义。
微服务架构将传统分布式服务继续拆分解耦,形成一些更小服务模块,服务模块之间独立部署升级,这些特性与容器的轻量、高效部署不谋而合。

七、Docker的相关资源

Docker 官方主页:http://www.docker.com/
Docker 引擎的 GitHub 源代码:https://github.com/moby/moby
Docker Hub:https://hub.docker.com/
Docker CLI:https://github.com/docker/cli
Docker Forge(收集了各种Docker工具、组件和服务):https://github.com/dockerforge
Docker 官方博客:https://www.docker.com/blog/
Docker 的IRC频道:irc.freenode.net
Docker 的StackOverflow问答主页:https://stackoverflow.com/questions/tagged/docker

八、参考文献



  • https://kubernetes.io/docs/concepts/overview/
  • https://docs.docker.com/get-started/overview/

   :本文原创由 bluetata 发布于: https://bluetata.blog.csdn.net/ 转载请务必注明出处。
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表