目录
一、虚拟化基础
Ⅰ、虚拟化管理程序Hypervisor
(1)Hypervisor类型:半虚拟化
(2)Hypervisor类型:硬件辅助全虚拟化
(3)Hypervisor类型:软件全虚拟化
Ⅱ、虚拟化分类
(1)基于平台的平台虚拟化
(2)基于操作系统的操作系统虚拟化
二、Docker容器
Ⅰ、docker介绍
Ⅱ、docker引擎
Ⅲ、docker 三个核心组件
Ⅳ、docker六大名称空间
Ⅴ、资源控制—cgroups
Ⅵ、容器特性
Ⅶ、docker与虚拟化的区别
三、docker基础使用
Ⅰ、下载安装docker
Ⅱ、docker查看命令
Ⅲ、docker镜像的操作命令
Ⅳ、docker容器的操作命令
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化是一种资源管理技术,打破实体结构的不可分割的障碍,可以对数据中心的所有资源进行虚拟化和管理,可以实现服务虚拟化、存储虚拟化、网络虚拟化和桌面虚拟化。
虚拟化管理程序是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件,也称VMM(Virtual Machine Monitor),即虚拟机监视器。
hypervisor是一种在虚拟环境中的“元”操作系统。它们可以访问服务器上包括磁盘和内存在内的所有物理设备。hypervisor不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行hypervisor时,它会加载所有虚拟机客户端的操作系统,同时会分配给每一台虚拟机适量的内存、CPU、网络和磁盘。
对客户端操作系统(VM)的内核进行修改,将运行在Ring0上指令转为调用Hypervisor。
例如:Xen
(若要安装linux,需要安装修改过内核后的操作系统,若安装Windows,因为内核不能修改,则无法安装。)
对CPU指令集进行改造;客户操作系统可以直接使用Ring 0而无需修改。例如:KVM、ESXI。
(只是修改了CPU,网络和存储仍然没有,此时可以用支持虚拟化的网卡,也可以对网卡和存储使用半虚拟化驱动程序)对操作系统没有要求。
KVM:用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化;只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
模拟CPU让VM使用,即软件全虚拟化qemu,效率最低。(不依赖硬件,可以模拟出异构的系统)
QEMU:可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。
如果把x86平台的CPU、内存和外设作为资源、那对应的虚拟化技术就是平台虚拟化,在同一个x86平台上,可以虚拟多个x86平台,每个平台可以运行自己独立完整的操作系统 (不提供操作系统、只提供操作系统运行的环境,不过可以实现系统的快速安装、迁移)
如果把操作系统及其提供的系统调用作为资源,那虚拟化就表现为操作系统虚拟化。例如Linux容器虚拟化技术就是在同一个Linux操作系统之上,虚拟出多个同样的操作系统,每个应用程序认为自己运行在一个独立的OS。(Linux容器技术)
docker是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
“快速开发,随处运行” ------docker可以让开发者们打包应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
Docker Engine是具有以下主要组件的客户端-服务器(C/S架构)应用程序:
server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
client端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(cLI)客户端((docker命令)
docker引擎统一了基础设施环境-docker环境—>image—>封装一个简易的操作系统
docker引擎统一了程序打包(s方式-docker镜像——>images
docker引擎统—了程序部署(运行)方式-docker容器—>基于镜像—>运行为容器
Docker images:镜像:统一的封装方式
Docker container:容器:统一的运行时环境
Docker registry:镜像仓库:放置镜像的仓库
①公共仓库—》docker hub
②私有仓库registry harbor
mount 文件系统,挂载到一个文件系统内,不能重复挂载一个指定目录
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域 (同一个环境里不能又叫node1又叫node2)
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等
六种名称空间是由cgroups管理的
最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了
cgroups 管理linux内核态中资源管理的模块
cgroups 管理一些系统资源
不是docker原生的。
灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:可以即时部署更新和升级。
便携式:可以在本地构建,部署到云,并在任何地方运行。
可扩展:可以增加并自动分发容器副本。
可堆叠:可以垂直和即时堆叠服务。
特性 | Docker容器(一个进程控制) | 虚拟机虚拟化(完整的操作系统) |
启动速度 | 秒级 | 分钟级 |
运行性能 | 10%-20%左右的损失 | 50%左右损失(全虚拟化类型) |
磁盘占用 | MB级别 | GB级别 |
数量 | 可开启成百上千,每个进程可控制一个容器 | 几十个(取决于硬件性能) |
隔离性 | 进程级别 | 操作系统级别 |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只封装目标代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
docker初期版本是1.13(同一版本,开源)——》分类型 1.15 - 1.17 过程中分成两种:
①开源社区 docker-ce
②企业版 docker-ee
目前 Docker 只能支持 64 位系统
systemctl stop firewalld.service
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2
--------------------------------------------------------------------------------
#yum-utils:提供了 yum-config-manager 工具。
#device mapper:是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理
#的块设备驱动提供了一个高度模块化的内核架构。
#device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos
/docker-ce.repo
yum install -y docker-ce
systemctl enable --now docker.service
docker info 课查看docker当前镜像、容器数量等信息
docker search 关键字
#搜索镜像
docker pull 仓库名称:[标签]
#拉取镜像
docker inspect [镜像ID/镜像名]
#获取镜像信息
docker tag 名称:[旧标签] 新名称:[新标签]
#更改镜像标签
docker rmi 仓库名称:标签/镜像ID号
#删除镜像
*批量删除镜像
docker rmi `docker images -q`
docker commit 容器ID 生成的镜像名
#将容器提交为镜像
docker save -o 存储文件名 存储的镜像
#导出镜像为tar
docker load -i 文件名 镜像名
#导入镜像tar文件,可以异地导入,但是必须要有docker引擎,并且版本不可以差太多
docker ps -a
#查看所有容器的运行状态
docker create [选项] 镜像 /bin/bash
#创建容器;常用选项:-i:让容器的输入保持打开;-t:让 Docker 分配一个伪终端
docker start 容器的ID/名称
#启动容器
docker cp test.txt centos:/opt
#将文件传进容器
docker cp centos:/opt/test.txt ./
#将容器内文件传出到./
docker rm [-f] 容器ID/名称
#删除不在运行的容器,选项f强制删除
docker export 容器ID/名称 > 文件名
#容器导出
docker import
#容器导入
cat 文件名 | docker import – 镜像名称:标签
#容器导入
docker run [选项] 镜像:tag /bin/bash
#合并创建、启动操作,如果没有所须的镜像,还会直接进行镜像的拉取
#选项-d让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束
docker exec -it 容器ID/名称 /bin/bash
docker attach 容器ID/名称
docker stats
#查看docker消耗的资源状态
docker run -it会创建前台进程,会在输入exit后终止进程。
docker attach会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行