1.虚拟化技术的概念

1)虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,让计算机的元件运行在虚拟的基础上,而不是真实的物理设备;

2)虚拟化技术可以将物理机硬件资源虚拟生成单个或多个虚拟机资源,应用软件、程序(nginx apache mysql tomcat)运行在虚拟机上的,从而可以最大化利用硬件物理机资源;

3)VMware workstation主要是用于个人工作站,基于虚拟机软件将物理机资源虚拟成N个虚拟机,应用程序运行在虚拟机中。个人使用,不作为企业使用

4)单纯的物理机设备不能直接进行虚拟化的,可以通过虚拟化软件,常用的虚拟化软件:ESXI 、HP-V、KVM、XEN、Docker、VirtualBOX、SUN等,广泛使用:ESXI、KVM、Docker,推荐使用Docker

5)完全虚拟化 实际上是通过软件实现对操作系统的资源再分配,比较成熟 如:KVM 、VirtualBOX;

6)半虚拟化技术 通过代码修改已有的系统,形成一种新的可虚拟化的系统,Xen

7)轻量级虚拟化 (介于完全虚拟化、半虚拟化之间) Docker虚拟化

2.虚拟化应用场景

1)虚拟化技术主要是用于资源的统一的分配、调度和最大化利用;

2)虚拟化技术用于解决高性能的物理硬件产能过剩和老旧的硬件产能过低的重组重用,从而最大化的利用物理硬件资源。

3)虚拟化技术最终目标,其实就是实现资源最大化的利用,方便企业高效的管理和运维。

3.Docker虚拟化入门简介

1)Docker技术类似于集装箱。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流程的Linux机器上,也可以实现虚拟化。

2)容器是完全使用沙箱机智,相互之间不会有任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

3)Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器(LXC)等技术。在LXC的基础上,Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简单,用户操作Docker的容器就像操作一个快速轻量级的虚拟机。

4)Docker和传统虚拟化(KVM、XEN等)方式不同之处,Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件的基础上,虚拟出自己的系统,再在系统上部署相关的APP应用。

下图为传统虚拟化方案——需要部署Nginx,先部署OS系统,基于OS系统再部署Nginx

如下为Docker虚拟化方案——需要部署Nginx,无需部署OS系统,基于Docker引擎直接部署Nginx;

Docker虚拟化有三个概念需要理解,分别是镜像、容器、仓库。

镜像:Docker的镜像其实就是模板,跟我们常见的IOS镜像类似,是一个模板。

容器:使用镜像常见的应用或者系统,我们称之为一个容器。

仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。

4.Docker LXC及Cgroup

从资源管理来看,Docker、LXC、Cgroup三者的关系是:Cgroup在最底层落实资源管理,LXC在cgroup上封装了一层,Docker又在LXC封装了一层

Cgroup是control groups的缩写,是linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的资源,Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有Cgroups就没有LXC,也就没有Docker。

Linux Container容器可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。

LXC建立在CGroup基础上,我们可以粗略的认为LXC = Cgroup+ namespace + Chroot + veth +用户态控制脚本。Docker容器的文件系统最早是建立在Aufs基础上的简单来说就是支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种layer的概念。Devicemapper的支持。Docker目前默认运行在Devicemapper基础上。

Aufs将挂载到同一虚拟文件系统下的多个目录分别设置成read-only,read-write以及whiteout-able权限,对read-only目录只能读,而写操作只能实施在read-write目录中

传统的Linux加载bootfs时会先将rootfs设为read-only,然后在系统自检之后将rootfs从read-only改为read-write,然后我们就可以在rootfs上进行写和读的操作了。但Docker的镜像却不是这样,它在bootfs自检完毕之后并不会把rootfs的read-only改为read-write。而是利用union mount(UnionFS的一种挂载机制)将一个或多个read-only的rootfs加载到之前的read-only的rootfs层之上。在加载了这么多层的rootfs之后,仍然让它看起来只像是一个文件系统,在Docker的体系里把union mount的这些read-only的rootfs叫做Docker的镜像。但是,此时的每一层rootfs都是read-only的,我们此时还不能对其进行操作。当我们创建一个容器,也就是将Docker镜像进行实例化,系统会在一层或是多层read-only的rootfs之上分配一层空的read-write的rootfs。如图所示为一个完整的容器文件系统层级结构图:

Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,Device Mapper的内核体系架构:

在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作,当前已经实现的 target driver 插件包括软 raid、软加密、逻辑卷条带、多路径、镜像、快照等,图中 linear、mirror、snapshot、multipath 表示的就是这些 target driver。Device mapper 进一步体现了在 Linux 内核设计中策略和机制分离的原则,将所有与策略相关的工作放到用户空间完成,内核中主要提供完成这些策略所需要的机制。

Device mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等,而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。因此整个 device mapper 机制由两部分组成--内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。

5.Docker虚拟化特点

跟传统VM比较具有如下有点:

操作启动快:

运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启,等等)都是以秒或毫秒为单位的。

轻量级虚拟化:

你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。但是传统虚拟化,你虚拟10-20个虚拟机就不错了。

开源免费:

开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。

前景及云支持:

正在越来越受欢迎,包括各大主流公司都在推动docker的快速发展,性能有很大的优势

跟传统VM比较具有如下缺点:

目前知道的人比较少;

相关的中文技术资料欠缺;

6.为什么使用Docker

Docker在如下几个方面有较大的优势:

1)更快的交付和部署

Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发,可以直接集成到可持续开发流程中。

2)高效的部署和扩容

Docker容器几乎可以在任何平台上运行,包括物理机、虚拟机、公有云、私有云等。Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便下线的你的应用和服务。

3)更高的资源利用率

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

4)更简单的管理

使用Docker,只需要小小的修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

7Docker引擎架构

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

Server是一个常驻进程;

REST API实现了client和server间的交互协议;

CLI实现了容器和镜像的管理,为用户提供统一的操作界面。

Docker使用了C/S架构,Client通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信,架构如图所示:

8.Docker镜像原理

一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker容器运行过程中主要提供文件系统数据支撑。

Docker镜像作为Docker中最基本的概念,有以下几个特性:

1)镜像分层,每个镜像都由一个或者多个镜像层组成;

2)可通过在某个镜像加上一定的镜像层得到新镜像(此过程可通过编写dockerfile或基于容器Commit实现)

3)每个镜像层拥有唯一镜像ID

4)镜像在存储和使用时共享相同的镜像层(根据ID),所以在pull镜像时,已有的镜像层会自动跳过下载;

5)每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层;

Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。

基于每个镜像的json文件,Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。

 9.Docker安装配置

docker官方文档说要求Linux kernel至少3.8以上,一般为centos6.5

首先要关闭selinux,然后安装相应的epel源

wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release--.noarch.rpm
yum install lxc libcgroup device-mapper-event-libs
#yum install docker-io
#yum install device-mapper* -y
安装完后:
启动docker进程:/etc/init.d/docker start
查看docker进程:ps -ef |grep docker

10.Docker仓库源更新

Docker镜像修改方法,vim /etc/docker/daemon.json,修改成国内的

cat>/etc/docker/daemon.json<<EOF
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
EOF
service docker restart)

docker -itd

-itd(-i interactive  -t tty  -d  daemon)

docker ps 查看运行内容

docker ps -a 查看所有的运行内容

Docker虚拟化平台的更多相关文章

  1. docker虚拟化平台构建

    docker虚拟化平台构建 从1.13版本以后的docker软件分为连个版本:企业版.社区版,在企业中推荐社区版本. 构建docker平台环境,系统选择centos7.x,推荐linux内核3.10 ...

  2. 构建docker虚拟化平台

    安装epel-release扩展包 yum install epel-release -y 安装docker yum install docker-ce 启动docker systemctl star ...

  3. 基于CentOS7.x Linux操作系统,从0开始构建一套Docker虚拟化平台,使用二进制Tar包方式,部署的步骤和方法如下:

    #配置centos7的yum源#建议阿里源#链接:https://yq.aliyun.com/articles/525282?type=2#从Docker官网下载软件包: ls -l docker-1 ...

  4. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  5. Docker虚拟化

    1. Docker虚拟化特点 跟传统VM比较具有如下优点: 操作启动快 运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的. 轻量级虚拟化 你会拥有足够的“操 ...

  6. 【linxu】部署docker容器虚拟化平台

    实验所涉内容 Docker 概述 部署 docker 容器虚拟化平台 docker 平台基本使用方法 创建docker镜像和发布镜像方法 Container 容器端口映射 一 Docker 概述 Do ...

  7. Linux高级运维 第八章 部署docker容器虚拟化平台

    8.1  Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...

  8. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)

    随着"互联网+"时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及 ...

  9. Docker虚拟化之<基础理论>

    1.虚拟化技术的概念 (1)虚拟化技术主要是将物理的资源转变为逻辑上可以管理的资源,以打破物理结构上的壁垒,让计算元件运行在虚拟的基础上,而不是真实的物理资源上.(2)虚拟化技术的底层是要进行虚拟化的 ...

随机推荐

  1. Android WebView无法播放视频或直播,关闭界面后任在播放的问题;

    1.设置webview属性: webView.setWebChromeClient(new MyWebChromeClient());         webSettings = webView.ge ...

  2. C# 如何提取字符串中的数字(小技巧)

    下面讲解如何在字符串当中抓取到数字 方法一.使用正则表达式 1.纯数字提取 1 string str = "提取123abc提取"; //我们抓取当前字符当中的123 2 stri ...

  3. 零基础学习python_字典(25-26课)

    今天学到后面的知识,突然发现之前学习到的字典列表啥的都有点忘了,打算补一下之前学到的字典,到时候你看的时候,字符串.列表.字典.元祖这几个没啥顺序,刚开始学的时候了解下方法,当然你可以死记硬背下,后面 ...

  4. C#取整函数Math.Round、Math.Ceiling和Math.Floor

    1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) / ...

  5. JSP 静态文件路径配置

    在JSP中,往往需要引入一些静态文件. 例如这样引用. 往往因为目录结构的问题,不知道是用点还是 .../ ./ ../表示相对当前路径的上一级目录:./表示相对当前的路径: 这里有个快捷的办法. l ...

  6. 【Python爬虫实战】多线程爬虫---糗事百科段子爬取

    多线程爬虫:即程序中的某些程序段并行执行,合理地设置多线程,可以让爬虫效率更高糗事百科段子普通爬虫和多线程爬虫分析该网址链接得出:https://www.qiushibaike.com/8hr/pag ...

  7. iOS获取当前路由信息

    导入头文件: #import <SystemConfiguration/CaptiveNetwork.h> - (void)currentWifiSSID {    // Does not ...

  8. hive表命名规范 源码规则

    tablename 进来前已经把"`","."等过滤掉了,所以就是单词字符喽 \w搞定 \w包含_ 哈哈 规范就是 a-z A-Z 0-9 _ 也就是传说中的单 ...

  9. 表格线边框重复css解决方法

    1.td 的边框和table 的边框重叠 .table { border-left:1px solid #dedede; border-top:1px solid #dedede;} .td { bo ...

  10. RestTemplate的异步使用

    参考:https://blog.csdn.net/yezhuanxu/article/details/53643248 支持异步调用AsyncRestTemplate @RequestMapping( ...