目录

        一、什么是虚拟化

        1.1 虚拟化的概述

        1.2 虚拟化发展史

        1.2.1 虚拟化类型

        二、docker概述

        2.1 概述

         2.1.1 docker的意义

        2.2 docker组件

        2.2.1 虚拟化和容器的区别

        2.3 docker 引擎

         2.4 名称空间

         2.5 控制组

        三、部署docker

        3.1 部署步骤

         3.2 配置镜像加速

         3.3 网络加速


        一、什么是虚拟化

        1.1 虚拟化的概述

        虚拟化以软件形式实现物理设备的功能(二层交换机、路由器、三层交换机等)

        1.2 虚拟化发展史

雏形:

        1961年,IBM709机器实现了分时系统,将cPU占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作,通过对这些时间片进迸行轮询从而将一个CPU伪装成多个CPU

        1972年,IBM正式将system370机的分时系统命名为虚拟机

        1990年,IBM推出的system390机支持逻辑分区(将一个CPU分为多份,相互独立,也就是逻辑分割)

        Xen 2003年问世,是一个外部的hypervisor/VWMM程序(虚拟机管理程序),能够控制宿主机和给多个客户机分配资源KVM:2007年问世,现己内置在kernel内核中的

        xen 支持的虚拟化技术:全虚拟化,半虚拟化

        KVM:支持的虚拟化技术:全虚拟化

        1.2.1 虚拟化类型

        全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用

        半虚拟化:需要修改操作系统

        直通:直接使用物理硬件资源

        优势:集中化管理(远程管理、维护)

        提高硬件利用率(物理资源利用率低-例如峰值,虚拟化解决了"空闲"容量)

        动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)

        高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)

        劣势:

        前期高额费用(初期的硬件支持) 降低硬件利用率(特定场景-例如极度吃资源的应用不一定适合虚拟化) 更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏)

        实施配置复杂、管理复杂(管理人员运维、排障困难) 一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)

        安全性(虚拟化技术自身的安全隐患)

        二、docker概述

        2.1 概述

        docker是一个用于开发,交付和运行应用程序开放的平台是一个开源的应用容器引擎,让开发者可以打包其应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

        沙箱:在计算机安全领域,沙箱是一种程序的隔离运行机制。 

docker fpga的虚拟化 docker cpu虚拟化_docker

         2.1.1 docker的意义

        docker引擎统一了基础设施环境-docker容器环境(引擎)

        docker引擎统一了程序打包(装箱)方式-docker镜像(封装的某一个时刻的服务/应用状态 )

        docker引擎统一了程序部署(运行)方式-docker容器(应用跑起来的状态 )

        2.2 docker组件

        Docker守护程序( dockerd)侦听 Docker API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。

        Docker images:镜像

        Docker container:容器

        Docker registry:镜像仓库

        Docker harbor:本地镜像

        Docker hub:公共仓库

        存储镜像的地方,默认在公共的docker hub上查找,由于docker仓库延迟的原因可以创建个人仓库方便使用。

         镜像获取流程:客户机发送命令请求镜像,daemon查看本地是否存在客户机所请求的镜像,如果有返回,没有则向registry镜像仓库请求镜像将镜像放入至容器。

      

docker fpga的虚拟化 docker cpu虚拟化_容器_02

        2.2.1 虚拟化和容器的区别

不同点

container

VM

启动速度

秒级

分钟级

运行性能

接近原生

50%左右

磁盘占用

MB

GB

数量

成百上千

十几台左右

隔离性

进程级别

系统级别

操作系统

主要支持Linux

几乎所有

封装程度

只打包项目代码和依赖关系,共享宿主机的内核

完整的操作系统,与宿主机隔离

        2.3 docker 引擎

        Docker Engine是具有以下主要组件的客户端-服务器应用程序(C/S端): 服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。 REST API,它指定程序可以用来与守护程序进行通信并指示其操作的 接口。

        流程:客户端使用命令传入方式和restAPL进行交互,命令通过restAPI,进入内核中的docker-server端,由server端进行处理,返回通过rest API 返回给docker-client端进行展示。

docker fpga的虚拟化 docker cpu虚拟化_docker_03

         2.4 名称空间

        Docker使用一种称为namespaces提供容器的隔离工作区的技术。运 行容器时,Docker会为该容器创建一组名称空间。 这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。

        docker中的6个名称空间:

mount

文件系统,挂载点

user

操作进程的用户和用户组

pid

进程编号

uts

主机名和主机域

ipc

信号量、消息队列,共享内存

net

网络设备、网络协议栈、端口等

         2.5 控制组

        Linux上的 Docker引擎还依赖于另一种称为控制组( cgroups)的技术。cgroup_将应用程序限制为一组特定的资源。控制组允许DockerEngine 将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。

        三、部署docker

        3.1 部署步骤

##安装依赖包
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
##设置阿里云镜像源
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
##安装 Docker-CE 社区版并设开机自动启动
[root@docker ~]# yum install -y docker-ce
[root@docker ~]# systemctl start docker.service
[root@docker ~]# systemctl enable docker.service

         当安装失败的话请关注错误信息查看内核版本是否支持

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

docker fpga的虚拟化 docker cpu虚拟化_docker fpga的虚拟化_04

 

docker fpga的虚拟化 docker cpu虚拟化_虚拟化_05

         3.2 配置镜像加速

docker fpga的虚拟化 docker cpu虚拟化_docker_06

 ##再次重启服务

[root@docker docker]# sudo systemctl daemon-reload
[root@docker docker]# sudo systemctl restart docker

         3.3 网络加速

##开启路由转发
[root@docker docker]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

##刷新配置文件
[root@docker docker]# sysctl -p
##重启服务
[root@docker docker]# systemctl restart docker
[root@docker docker]# systemctl restart network

docker fpga的虚拟化 docker cpu虚拟化_虚拟化_07

         开启路由网关原因:docker拥有独立的网段172.17.0网段,宿主机需要跨网段访问出去,要开启路由转发,进行高效的网络转发