❤️虚拟化技术❤️之docker技术详解[⭐建议收藏⭐]

Posted 宝山的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️虚拟化技术❤️之docker技术详解[⭐建议收藏⭐]相关的知识,希望对你有一定的参考价值。

虚拟化技术之docker技术详解 [⭐建议收藏⭐]

关于作者

  • 作者介绍


    🍊 博客主页作者主页
    🍊 简介:云计算领域优质创作者🏆、学长的it故事 公众号创作者🎓、在校期间参与众多计算机相关的省赛、国赛,斩获系列荣誉。考取华为资深工程师、红帽工程师等系列认证。

    🍊 关注我简历模板、学习资料、文档下载、技术支持 都可以私信我哦!
    让生命像一团热烈燃烧的火,直到死亡才能使它熄灭


前言

  • 博文介绍

    ​ 回首这半年写作之旅,将所学技术、项目实战的东西,分享给大家 。一路走来,小编从没有忘记初心,决心分享高质量的运维技术,不断提升自己,帮助linux爱好者。今天就给大家带来了超详细的docker 容器技术以及相关的虚拟化概念。

    ​ 本文将独立成立一个虚拟化技术专栏,后续持续更新虚拟化文章,欢迎大家订阅

虚拟化技术概述及简介

一 、什么是虚拟化技术?

  • 什么是虚拟化技术

    通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。

    虚拟化技术允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率,是一个为了简化管理,优化资源的解决方案。

    简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

    物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

  • 那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?

    这个主要是通过一个叫做 Hypervisor 的程序实现的。

    根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:

    • 全虚拟化:Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行(exsi、xen)。
    • 半虚拟化:物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型
  • 从图中可以看见,完整的虚拟化平台包含以下组件:

    底层硬件服务器;

    宿主机操作系统(OS);

    Virtual Machine Monitor(VMM);

    虚拟机操作系统(OS);

    应用程序、软件服务(nginx);

二、常见的虚拟化技术有哪些?

2.1 KVM 虚拟化技术概念

  • KVM 虚拟化

    kVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。

    KVM是目前早期互联网广泛使用的虚拟化软件之一,最早由以色列的公司开发,现在已经被RedHat公司斥资1.07亿美元收购了KVM虚拟化管理程序厂商Qumranet,

    KVM是一款支持虚拟机的技术,是Linux内核中的一个功能模块。它在Linux2.6.20之后的任何Linux分支中都被支持。它还有一个条件,对硬件要求的条件,必须达到一定标准的硬件架构。

    KVM 还要一个关键的名词—libvirt

    Libvirt又是什么呢。它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术,kvm、xen与lxc等,不同虚拟机技术就可以使用不同驱动,都可以调用libvirt提供的api对虚拟机进行管理。我们创建的各种虚拟机都是基于libvirt库及相关命令去管理的。

    Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

    • libvirtd是服务程序,接收和处理 API 请求;
    • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
    • virsh 是我们经常要用的 KVM 命令行工具

2.2 ESXI 虚拟化技术概念

  • esxi 虚拟化概述

    Vmware 服务器虚拟化第一个产品命名为:ESX,后来Vmware在第4版本的时候推出了ESXI,ESXI和ESX的版本最大的技术区别是内核的变化。

    从第4版本开始VMware把ESX及ESXi产品统称为vSphere,官方称为vSphere虚拟化技术,个人也可以称为ESXI虚拟化技术。

    VMware vSphere 是业界领先且最可靠的虚拟化平台。vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了 IT操作。您现有的应用程序可以看到专有资源,而您的服务器则可以作为资源池进行管理。因此,您的业务将在简化但恢复能力极强的 IT 环境中运行。

    VMware vSphere 是业界领先且最可靠的虚拟化平台。vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了 IT操作VMware、vSphere、Essentials 和 Essentials Plus 套件专为工作负载不足 20 台服务器的 IT 环境而设计,只需极少的投资即可通过经济高效的服务器整合和业务连续性为小型企业提供企业级 IT 管理。

    结合使用 vSphere Essentials Plus 与 vSphere Storage Appliance软件,无需共享存储硬件即可实现业务连续性。

  • VMware ESXI 虚拟化特点:

    • 确保业务连续性和始终可用的 IT;
    • 降低 IT 硬件和运营成本;
    • 提高应用程序质量;
    • 增强安全性和数据保护能力

2.3 XEN 虚拟化技术概念

  • XEN 虚拟化技术概念

    XEN是一个基于X86架构、发展最快、性能最稳定、占用资源最少的开源虚拟化技术。

    Xen可以在一套物理硬件上安全的执行多个虚拟机,与 Linux 是一个完美的开源组合,Novell SUSE Linux Enterprise Server 最先采用了XEN虚拟技术。

    它特别适用于服务器应用整合,可有效节省运营成本提高设备利用率最大化利用数据中心的IT基础架构。

    XEN虚拟化,同时区分Xen+pv+和Xen+hvm,其中pv只支持Linux,而hvm则支持Windows系统。除此之外,XEN还拥有更好的可用资源、平台支持、可管理性、实施、支持动态迁移和性能基准等优势。

2.4 Docker 虚拟化概念

2.4.1 什么是docker 虚拟化
  • docker 虚拟化概述

    Docker虚拟化是虚拟化技术解决方案中的一种,轻量级、高性能的虚拟化技术,是目前互联网使用最广泛的虚拟化技术;Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

    Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。

    Docker虚拟化技术的产物Docker容器(虚拟机|服务程序),容器技术类似集装箱机制,容器中存放了开发编写的各种软件、程序、依赖包、库文件等,容器和容器之间相互隔离的,互不影响,可以基于Docker容器技术实现虚拟化;

    Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。

    Redhat 已经在其 RHEL6.5 中集中支持

    DockerDocker的基础是 Linux 容器(LXC)等技术。在LXC的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

    传统虚拟化和Docker虚拟化分层结构图如下图:

2.4.2 通俗理解docker 虚拟化技术
  • 如何形象的理解docker技术

    Docker容器(软件、库文件、服务)-集装箱(货物、物品)

    Docker容器-集装箱

    Docker Engine-大货轮(船A)A----就是图中的大鲨鱼

    HOST OS(硬件设备)-大海—图中的海水

2.4.3 传统虚拟化和docker 虚拟化的区别
  • 通过上面2张图,传统的虚拟化和Docker虚拟化的区别:

    Docker虚拟化技术概念&总结:

    Docker虚拟化技术是在硬件的基础上,基于现有的操作系统层面上实现虚拟化,直接复用本地主机的操作系统,直接虚拟生成Docker容器,而Docker容器上部署相关的APP应用(Apache、mysqlphp、JAVA)。

    传统虚拟化技术概念&总结:

    KVM、XEN、ESXI传统虚拟化(完全、半虚拟化)是在硬件的基础上,基于现有的操作系统层面上实现虚拟化,但是不能复用本地主机的操作系统,而是必须虚拟出自己的Guest OS系统,然后在Guest OS系统上部署相关的APP应用(Apache、MYSQL、PHP、JAVA)。

    Docker虚拟化跟传统VM比较具有如下优点:

    • 操作启动快
    • 轻量级虚拟化
    • 开源、免费
2.4.4 Docker LXC 及Cgroup 概述
  • Docker LXC 介绍

    Docker虚拟化技术结构体系最早为 LXC(Linux Container)+AUFS(Another Union File System)结构组合,Docker 0.9.0版本开始引入LibContainer,可以视作LXC的替代品。

    LXC也是一种虚拟化的解决方案,跟KVM、XEN、ESXI虚拟化基于硬件层面虚拟化不同,LXC是基于是内核级的虚拟化技术,Linux操作系统软件服务进程之所以能够相互独立,并且系统能够控制每个服务进程的CPU、内存资源也是得益于LXC容器技术

    Docker虚拟化技术是在LXC技术上进一步的封装,比LXC技术更完善,并且提供了一系列完整的功能。在Docker虚拟化技术中,LXC主要负责资源管理,而AUFS主要负责镜像管理,而LXC又包括Cgroup、NameSpace、Chroot等组件,并通过Cgroup进行资源管理。

    从一定程度上来说,docker就是LXC的增强版

  • Docker Cgroup 介绍

    Cgroups又名Control groups,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(CPU、 Memory、IO、NET)的机制。

    Cgroups最初由Google的工程师提出,后来被整合进Linux内核中。Cgroups也是LXC为实现虚拟化所使用的资源管理手段

    控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制。

    CGroups能够限制的资源有:

    • blkio:块设备IO
    • cpu:CPU
    • cpuacct:CPU资源使用报告
    • cpuset:多处理器平台上的CPU集合
    • devices:设备访问
    • freezer:挂起或恢复任务
    • memory:内存用量及报告
    • perf_event:对cgroup中的任务进行统一性能测试
    • net_cls:cgroup中的任务创建的数据报文的类别标识符

    控制组提供的具体功能有:

    • 资源限制(Resource Limitting)组可以设置为不超过设定的内存限制。比如:内存子系统可以为进行组设定一个内存使用上限,一旦进程组使用的内存达到限额再申请内存,就会发出Out of Memory警告
    • 优先级(Prioritization)通过优先级让一些组优先得到更多的CPU等资源
    • 资源审计(Accounting)用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间
    • 隔离(Isolation)为组隔离命名空间,这样一个组不会看到另一个组的进程、网络连接和文件系统
    • 控制(Control)挂起、恢复和重启等操作

    安装Docker后,用户可以在/sys/fs/cgroup/memory/docker/目录下看到对Docker组应用的各种限制项

    [root@localhost ~]# cd /sys/fs/cgroup/memory/
    [root@localhost memory]# ls
    cgroup.clone_children           memory.kmem.slabinfo                memory.memsw.limit_in_bytes      memory.swappiness
    cgroup.event_control            memory.kmem.tcp.failcnt             memory.memsw.max_usage_in_bytes  memory.usage_in_bytes
    cgroup.procs                    memory.kmem.tcp.limit_in_bytes      memory.memsw.usage_in_bytes      memory.use_hierarchy
    cgroup.sane_behavior            memory.kmem.tcp.max_usage_in_bytes  memory.move_charge_at_immigrate  notify_on_release
    memory.failcnt                  memory.kmem.tcp.usage_in_bytes      memory.numa_stat                 release_agent
    memory.force_empty              memory.kmem.usage_in_bytes          memory.oom_control               system.slice
    memory.kmem.failcnt             memory.limit_in_bytes               memory.pressure_level            tasks
    memory.kmem.limit_in_bytes      memory.max_usage_in_bytes           memory.soft_limit_in_bytes       user.slice
    memory.kmem.max_usage_in_bytes  memory.memsw.failcnt                memory.stat
    
2.4.5 Docker 引擎架构/镜像原理
  • Docker虚拟化完整体系结构

    Docker引擎是一个C/S结构的应用

    Docker Server是一个常驻进程;
    REST API 实现了client和server间的交互协议;
    Docker CLI 实现容器和镜像的管理,为用户提供统一的操作界面;
    Images为容器提供了统一的软件、文件底层存储;
    Container是Docker虚拟化的产物,直接作为生产使用;
    Network为Docker容器提供完整网络通信;
    Volume为Docker容器提供额外磁盘、文件存储对象。

2.4.6 如何理解docker 镜像(image)、docker 容器(container)、docker仓库(repostory)的概念及关系
  • Docker镜像、容器、仓库的概念

    Docker镜像

    • Docker镜像类似Linux ISO镜像文件,底层模板,镜像中存储的各种软件、程序、LIB库、依赖环境等,Docker镜像结构分层(层次)的结构,每一层存储不同的软件和功能,镜像是只读的,不能被修改。好比我们盖房子,来到一块儿空地,搬石头、砍木材、画图纸,一顿操作,房子改好了,结果不想住了,来到一个新地方,从新盖房子。很麻烦,每次都要从新盖
      于是,就学了一种魔法—镜像,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住

    那个放在包里的“镜像”,就是Docker镜像
    Docker容器

    • Docker容器基于Docker镜像运行之后实体,Docker容器的底层是镜像,Docker容器所需文件、软件可以从镜像层中读取,没有镜像,就没有Docker容器,镜像是静止的,容器是活动的(进程和程序的关系)
      我在空地上,用魔法造好的房子,就是一个Docker容器
      Docker仓库

    • Docker仓库是用于存储Docker镜像文件的地方,仓库分为公共和私有仓库,企业生产环境推荐自建私有仓库(安全、稳定、速度快)
      而我的背包,就是Docker仓库

2.4.7 Docker 容易编排方式
  • 容器编排方式

    当我们要去构建一个lnmp架构的时候,它们之间会有依赖关系,哪个应用应该在什么时候启动,在谁之前或之后启动,这种依赖关系我们应该要事先定义好,最好是按照一定的次序实现,而docker自身没有这个功能,所以我们需要一个在docker的基础上,能够把这种应用程序之间的依赖关系、从属关系、隶属关系等等反映在启动、关闭时的次序和管理逻辑中,这种功能被称为容器编排。

    有了docker以后,运维的发布工作必须通过编排工具来实现容器的编排,如果没有编排工具,运维人员想去管理容器其实比直接管理程序要更加麻烦,增加了运维环境管理的复杂度。

    常见的容器编排工具:

    • machine+swarm(把N个docker主机当一个主机来管理)+compose(单机编排)
    • mesos(实现统一资源调度和分配)+marathon
    • kubernetes --> k8s
2.4. 8 基于Centos 7 构建Docker 平台
  • 实验环境

  • 服务器名称版本IP地址
    docker-serverCentOS 7.610.0.0.8
  • 配置安装步骤

    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # Step 3
    sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    
    # Step 4: 更新并安装Docker-CE
    sudo yum makecache fast
    sudo yum -y install docker-ce
    
    # Step 4: 开启Docker服务
    sudo service docker start
    
    
  • 阿里镜像源安装教程

总结

虚拟化技术是目前比较火爆的IT主流技术之一,跟云计算、大数据被称为IT技术三甲,虚拟化技术主要是为了解决IT设备资源而产生的。

Docker官网要求部署Docker引擎(虚拟化软件)的底层Host OS的Linux系统内核版本3.8+,最早期Windows操作系统不支持Docker虚拟化部署,新版的Windows系统可以支持Docker

Docker虚拟化建议部署至Linux操作系统平台(稳定、高效、开源、免费的),生产环境推荐Linux内核版本3.10+,对应的Linux操作系统发行版:RHEL7.x和CentOS7.x

本篇文章主要介绍虚拟化 相关概念,下一篇博文将开始动手实验,详细的介绍完docker虚拟化技术

如果喜欢博主的博文,欢迎访问:首页链接,进行专栏订阅!

以梦为马,不负韶华,流年笑掷,未来可期!

以上是关于❤️虚拟化技术❤️之docker技术详解[⭐建议收藏⭐]的主要内容,如果未能解决你的问题,请参考以下文章

❤️99%的读者❤️都会收藏的Docker入门到实战的技术文章

❤️爆肝万字整理的综合架构web服务之nginx详解❤️,附建议收藏

涛思数据TDengine征稿— ❤️ TDengine 的两大技术创新详解❤️ (建议收藏)

❤️Docker超详细基础教程,快速入门docker首选❤️(万字长文建议收藏)

OpenCV-Python实战——直方图详解(❤️含大量实例,建议收藏❤️)

❤️保姆级!超详解!远程连接Linux虚拟机!❤️