目录
一、什么是虚拟化
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机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
沙箱:在计算机安全领域,沙箱是一种程序的隔离运行机制。
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镜像仓库请求镜像将镜像放入至容器。
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端进行展示。
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
3.2 配置镜像加速
##再次重启服务
[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拥有独立的网段172.17.0网段,宿主机需要跨网段访问出去,要开启路由转发,进行高效的网络转发