第22章 企业级Docker虚拟化平台实战
22.1 虚拟化技术概述及简介
IT行业发展到今天,已经从传统技术、传统运维发展到当下的主流技术、自动化运维,未来掌握核心技术是赶上时代变化,拉开跟别人差距的最关键因素。当下主流的IT三大技术:虚拟化、云计算、大数据之一的虚拟化技术。虚拟化技术也越来越广泛的应用在企业中,例如百度、阿里巴巴、腾讯、京东、Google等。
通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。
虚拟化技术允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率,是一个为了简化管理,优化资源的解决方案。
虚拟化解决方案的底部是要进行虚拟化的物理机器,这台机器可能直接支持虚拟化,也可能不会直接支持虚拟化,那么就需要系统管理程序层的支持。虚拟机管理程序(Virtual machine monitor),或称为 VMM,可以看作是平台硬件和操作系统的抽象化,VMM本质是我们常说的虚拟化技术软件。
22.2 互联网虚拟化技术种类
KVM
ESXI
XEN
Docker
Hyper-V
Open-vz
22.3 KVM虚拟化概念
KVM虚拟化全称为kernel-based Virtual Machine,是一个开源的系统虚拟化模块,基于内核的虚拟机 (KVM) 是针对包含虚拟化扩展(Intel VT 或 AMD-V)的 x86 硬件上的 Linux 的完全原生的虚拟化解决方案。
KVM是目前早期互联网广泛使用的虚拟化软件之一,最早由以色列的公司开发,现在已经被RedHat公司斥资1.07亿美元收购了KVM虚拟化管理程序厂商Qumranet,KVM虚拟化技术严格来讲,不是一个软件,而是Linux 内核里面的一种加速虚拟机的功能扩展。
自Linux 2.6.20之后集成在Linux的各个主要发行版本中。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)属于完全虚拟化。了解KVM之前,我们就需要了解KVM和QEMU、Libvirt有什么关系呢?
KVM是一款支持虚拟机的技术,是Linux内核中的一个功能模块。它在Linux2.6.20之后的任何Linux分支中都被支持。它还有一个条件,对硬件要求的条件,必须达到一定标准的硬件架构。
Qemu是什么呢。其实它也是一款虚拟化技术,就算不使用kvm,单纯的qemu也可以完全实现一个虚拟机。
那为何还会有Qemu-kvm这个名词呢?虽然kvm的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,这个时候就需要另外的技术来做补充,而qemu-kvm则是这样一种技术。它补充了kvm技术的不足,而且在性能上对kvm进行了优化。
Libvirt又是什么呢。它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术,kvm、xen与lxc等,不同虚拟机技术就可以使用不同驱动,都可以调用libvirt提供的api对虚拟机进行管理。我们创建的各种虚拟机都是基于libvirt库及相关命令去管理的。
22.4 ESXI虚拟化技术概念
Vmware 服务器虚拟化第一个产品命名为:ESX,后来Vmware在第4版本的时候推出了ESXI,ESXI和ESX的版本最大的技术区别是内核的变化。
从第4版本开始VMware把ESX及ESXi产品统称为vSphere,但是VMware从5版本开始以后取消了原来的ESX版本,所以现在VMware虚拟化产品vSphere其实本质是ESXI,只是两种叫法而已。官方称为vSphere虚拟化技术,个人也可以称为ESXI虚拟化技术。
VMware vSphere 是业界领先且最可靠的虚拟化平台。vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了 IT操作。您现有的应用程序可以看到专有资源,而您的服务器则可以作为资源池进行管理。因此,您的业务将在简化但恢复能力极强的 IT 环境中运行。
VMware、vSphere、Essentials 和 Essentials Plus 套件专为工作负载不足 20 台服务器的 IT 环境而设计,只需极少的投资即可通过经济高效的服务器整合和业务连续性为小型企业提供企业级 IT 管理。结合使用 vSphere Essentials Plus 与 vSphere Storage Appliance软件,无需共享存储硬件即可实现业务连续性。
VMware ESXI虚拟化特点如下:
确保业务连续性和始终可用的 IT;
降低 IT 硬件和运营成本;
提高应用程序质量;
增强安全性和数据保护能力。
22.5 XEN虚拟化技术概念
XEN是一个基于X86架构、发展最快、性能最稳定、占用资源最少的开源虚拟化技术。Xen可以在一套物理硬件上安全的执行多个虚拟机,与 Linux 是一个完美的开源组合,Novell SUSE Linux Enterprise Server 最先采用了XEN虚拟技术。它特别适用于服务器应用整合,可有效节省运营成本,提高设备利用率,最大化利用数据中心的IT基础架构。
实际上XEN出现的时间要早于KVM虚拟化,它是由剑桥大学开发的,严格来讲,XEN是一个开源的虚拟机监视器,属于半虚拟化技术,其架构决定了它注定不是真正的虚拟机,只是自己运行了一个内核的例子。
XEN虚拟化,同时区分Xen+pv+和Xen+hvm,其中pv只支持Linux,而hvm则支持Windows系统。除此之外,XEN还拥有更好的可用资源、平台支持、可管理性、实施、支持动态迁移和性能基准等优势。
22.6 Docker虚拟化技术概念
Docker是一款轻量级、高性能的虚拟化技术,是目前互联网使用最多的虚拟化技术,Docker虚拟化技术的本质类似集装箱机制,最早集装箱没有出现的时候,码头上有许多搬运的工人在搬运货物,集装箱出现以后,码头上看到更多的不是工人,而且集装箱的搬运模式更加单一,更加高效,还有其他的好处。
将货物多打包在集装箱里面,可以防止货物之间相互影响。并且到了另外一个码头需要转运的话,有了在集装箱以后,直接把它运送到另一个码头即可,完全可以保证里面的货物是整体的搬迁,并且不会损坏货物本身。
Docker技术机制跟集装箱类似,Docker虚拟化 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
Docker容器是完全使用沙箱机制,相互之间不会有任何接口,几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
Docker应该是近年最火爆的技术之一,如果没有听说过,那么你就out了,2019年将开启新的跨越。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。
Redhat 已经在其 RHEL6.5 中集中支持Docker;
Google 也在其 PaaS 产品中广泛应用,Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。
Docker的基础是 Linux 容器(LXC)等技术。在LXC的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
下面对比了Docker 和传统虚拟化(KVM、XEN、Hyper-V、ESXI)结构层级方式的不同之处,
图为传统虚拟化结构图:
图为Docker虚拟化结构图:
Docker虚拟化技术概念&总结:
Docker虚拟化技术是在硬件的基础上,基于现有的操作系统层面上实现虚拟化,直接复用本地主机的操作系统,直接虚拟生成Docker容器,而Docker容器上部署相关的APP应用(Apache、MYSQL、PHP、JAVA)。
传统虚拟化技术概念&总结:
KVM、XEN、ESXI传统虚拟化(完全、半虚拟化)是在硬件的基础上,基于现有的操作系统层面上实现虚拟化,但是不能复用本地主机的操作系统,而是必须虚拟出自己的Guest OS系统,然后在Guest OS系统上部署相关的APP应用(Apache、MYSQL、PHP、JAVA)。
Docker虚拟化跟传统VM比较具有如下优点:
操作启动快:
运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
轻量级虚拟化:
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。但是传统虚拟化,你虚拟10-20个虚拟机就不错了。
开源免费:
开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
前景及云支持;
正在越来越受欢迎,包括各大主流公司都在推动docker的快速发展,性能有很大的优势。随着Go语言越来越被人熟知,Docker的使用也越来越广泛。
22.7 虚拟化技术实现方式
完全拟化技术
通过软件实现对操作系统的资源再分配,比较成熟,完全虚拟化代表技术:KVM、ESXI、Hyper-V;
半虚拟化技术
通过代码修改已有的系统,形成一种新的可虚拟化的系统,调用硬件资源去安装多个系统,整体速度上相对高一点,半虚拟化代表技术:Xen;
轻量级虚拟化:
介于完全虚拟化、半虚拟化之间,轻量级虚拟化代表技术:Docker。
22.8 Docker虚拟化特点
跟传统VM比较具有如下优点:
操作启动快
运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
轻量级虚拟化
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。但是传统虚拟化,你虚拟10-20个虚拟机就不错了。
开源免费
开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
前景及云支持
正在越来越受欢迎,包括各大主流公司都在推动docker的快速发展,性能有很大的优势。
跟传统VM比较具有如下缺点:
目前知道的人比较少;
相关的中文技术资料欠缺;
Go语言还未完全成熟。
22.9 为什么使用Docker
Docker 在如下几个方面具有较大的优势:
更快速的交付和部署
Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
高效的部署和扩容
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。
更高的资源利用率
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
22.10 Docker引擎架构
docker引擎是一个C/S结构的应用,组件如图所示:
Server是一个常驻进程;
REST API 实现了client和server间的交互协议;
CLI 实现容器和镜像的管理,为用户提供统一的操作界面。
Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信,架构如图所示:
22.11 Docker镜像&容器&仓库
熟悉了Docker虚拟化简介、组件和工作原理之后,还需要掌握Docker虚拟化镜像原理&引擎架构等知识。
Docker虚拟化技术有三个基础概念:Docker镜像、Docker容器、Docker仓库,三个概念详解如下:
1)Docker镜像
Docker虚拟化最基础的组件为镜像,镜像跟我们常见的Linux ISO镜像类似,但是Docker镜像是分层结构的,是由多个层级组成,每个层级分别存储各种软件实现某个功能,Docker镜像是静止的、只读的,不能对镜像进行写操作。
2)Docker容器:
Docker容器是Docker虚拟化的产物,也是最早在生产环境使用的对象,Docker容器的底层是Docker镜像,是基于镜像运行,并且在镜像最上层添加一层容器层之后的实体,容器层是可读、可写的,容器层如果需用到镜像层中的数据,可以通过JSON文件读取镜像层中的软件和数据,对整个容器进行修改,只能作用于容器层,不能直接对镜像层进行写操作。
3)Docker仓库:
Docker仓库是用于存放Docker镜像的地方,Docker仓库分为两类,分别是:公共仓库(Public)和私有仓库(Private),国内和国外有很多默认的公共仓库,对外开放、免费或者付费使用,企业测试环境和生产环境推荐自建私有仓库,私有仓库的特点:安全、可靠、稳定、高效,能够更加自身的业务体系进行灵活升级和管理。
22.12 CentOS6.x(6.5+)Linux Docker平台实战
掌握了Docker虚拟化概念和原理之后,最重要的就是要在生产环节中落地Docker,Docker虚拟化平台最早期只支持Linux操作系统,现在最新版Windows操作系统也慢慢支持Docker虚拟化。
本章节将选择不同的发行版本来构建Docker虚拟化平台,Linux操作系统主流发行版本包括:Red Hat Linux、CentOS、Ubuntu、SUSE Linux、Fedora Linux等,如下简要介绍即将部署Docker虚拟化平台的两个系统:CentOS和Ubuntu。
Docker官方要求Linux内核版本在3.8+以上,生产环境中尽量推荐使用3.10+的Linux内核版本,Docker从1.13版本起,采用时间线的方式作为版本号,Docker版本现在基于YY.MM,分为社区版(Community Edition)和企业版( Enterprise Edition),社区版是免费提供给个人开发者和小型团体使用的,而企业版会提供额外的收费服务。
社区版按照Stable和Edge两种方式发布,每个季度更新Stable版本,如17.06,17.09,每个月份更新Edge版本,如17.09,17.10。
虚拟化&Docker虚拟化技术本质的用途:
为了最大化的利用高配物理机的资源,提高硬件设备服务器的资源利用率,淘汰一些老、旧服务器,对老、旧服务器进行资源的重组、重用,满足企业飞快的发展。
虚拟化落地实施硬件设备选配上,尽量使用高配物理机资源,参考配置如下:
服务器品牌:Dell R730、R820;
CPU配置:Intel 至强E5-2600系列;
MEM配置:ECC DDR3 256G;
DISK配置:SAS 12TB(最大支持24T);
NET配置:Intel四端口千兆网卡/双端口万兆网卡;
1)安装步骤和命令如下:
#安装Epel扩展源;
yum install epel-release -y
#安装Docker-io版本;
yum install docker-io lxc cgroup device-mapper* -y
#查Docker版本是否安装;
rpm -qa|grep -E "docker|lxc|device-mapper"
#启动Docker引擎服务;
service docker restart
#查看Docker服务进程;
ps -ef|grep docker
2)安装完成,如图所示:
3)查看启动进程如图所示:
4)查看docker info信息,如图所示:
5)从Docker仓库下载Nginx镜像:
22.13 CentOS7.x(7.0+)Linux Docker平台实战
1)安装步骤和命令如下:
#安装国内阿里源;
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装Docker-CE版本;
yum install docker-ce* -y
#查Docker版本是否安装;
rpm -qa|grep -E "docker"
#启动Docker引擎服务;
service docker restart
systemctl restart docker.service
#查看Docker服务进程;
ps -ef|grep docker
2)安装完成,如图所示:
3)查看启动进程如图所示:
4)查看docker info信息,如图所示:
5)从Docker仓库下载Nginx镜像:
22.14 Ubuntu(16.04+)Linux Docker平台实战
1)安装步骤和命令如下:
#更新apt源;
apt-get update
#APT源使用 HTTPS 以确保软件下载过程中不被篡改。需要添加使用HTTPS 传输的软件包以及 CA 证书。
apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
#默认APT访问国外源,网络非常慢,此处建议使用国内源,需要添加软件源的 GPG 密钥;
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#向 source.list 中添加 Docker 软件源;
add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#官方源
#add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#更新 apt 软件包缓存;
apt-get update
#基于apt-get 安装docker-ce社区版本;
apt-get install docker-ce
#查Docker版本是否安装;
dpkg -s docker-ce
#启动Docker引擎服务;
service docker restart
systemctl restart docker
#查看Docker服务进程;
ps -ef|grep docker
2)安装完成,如图所示:
3)查看启动进程如图所示:
4)查看docker info信息,如图所示:
5)从Docker仓库下载Nginx镜像:
22.15 Docker仓库源更新实战
Docker默认连接的国外官方镜像,通常根据网络情况不同,访问时快时慢,大多时候获取速度非常慢,为了提示效率可以自建仓库或者先修改为国内仓库源,提升拉取镜像的速度。
Docker可以配置的国内镜像有很多可供选择,例如:Docker中国区官方镜像、阿里云、网易蜂巢、DaoCloud等,这些都是国内比较快的镜像仓库。
从国外官网下载Docker Tomcat镜像,访问速度慢,如图所示:
Docker镜像修改方法,vim /etc/docker/daemon.json,执行如下命令即可:
cat>/etc/docker/daemon.json<<EOF
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
EOF
service docker restart
重启Docker服务即可,修改仓库地址为国内仓库后,获取镜像速度非常快,如图所示:
22.16 Docker典型命令演练
Docker虚拟化平台部署完成,默认没有图形界面管理,作为运维人员、测试人员、开发人员来讲,需要通过Docker-Client命令行操作,如下为Docker平台下30+操作指令,熟练指令的操作能够帮助我们对Docker进行高效的管理和维护,从而提高自己的技能。
22.16.1 docker search命令实战
从Docker仓库中搜索Nginx镜像;
docker search nginx
#从Docker仓库中搜索Tomcat镜像;
docker search tomcat
22.16.2 docker pull命令实战
从Docker仓库下载nginx镜像;
docker pull docker.io/nginx
#从Docker仓库下载tomcat镜像;
docker pull docker.io/tomcat