目录
一.虚拟化概述
1.虚拟化是什么?
2.虚拟化两大组件
3.虚拟化类型
4.虚拟化功能
二.容器概述
1.容器是什么?
2.容器的优点
3.容器的缺点
三.Docker概述
1.Docker是什么?
2.Docker容器与虚拟机的区别
3.容器在内核中支持两种重要技术
3.1 namespace的六项隔离
3.2 控制组(Control groups)
4.Docker核心概念
4.1 镜像
4.2 容器
4.3 仓库
四.YUM安装Docker
1.YUM安装Docker依赖包
2.设置阿里云镜像源
3.查看Docker版本信息
五.配置阿里云镜像加速器
六.知识总结补充
1.Docker容器有哪些状态?
2.什么是Docker?Docker原理?
3.简述Docker主要使用的技术?
4.简述Docker体系架构?
5.Docker有哪些优势?和虚拟化比有什么优势?
6.Docker在后台的标准运行过程?
7.集群里面有一个Docker,其使用率达到80%怎么办?
虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
虚拟机管理器功能:调用资源
两大核心组件:QEMU、KVM
QEMU:
①可以理解为队列,核心目的是**调用资源内核中的资源**,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
②QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。
KVM:
①用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
②只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
对于workstation而言,硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。
全虚拟化:KVM——》产品vmware—ce(社区版)
半虚拟化:EXSI——》workststion vsphere
①在一个操作系统内,模拟多个操作系统
② 以软件的方式模拟物理设备的功能
容器是一种技术,开发人员打包开发完成的一个应用(系统)以及所需的开发环境,然后通过容器可以运行在不同的计算机上面,也不需要重新配置相关环境,不同的是每一台计算机都需要配置运行容器的容器引擎,目前市场上主流就是Docker容器引擎,不过Docker容器引擎的配置很简单,比配置应用(系统)运行的环境简单,方便太多。每台要运行应用(系统)的计算机上面配置了Docker容器引擎之后,都单独独立可以运行之前打包完成的应用(系统)
Docker 的容器技术可以在一台下机上轻松为任何应用创建一个轻量级的、可移植的、目给自足的容器。
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
特性 | Docker容器 | OpenStack虚拟机 |
部署难度 | 非常简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统一致 | VM会占用部分资源 |
镜像体积 | MB级别 | GB级别 |
管理效率 | 简单 | 各组件相互依赖,管理复杂 |
可管理性 | 单进程 | 完整的系统管理 |
网络连接 | 弱 | 借助neutron可以灵活组件各类网络管理 |
性能 | 接近原生(直接在内核中运行) | 50%左右的所示 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 进程级别 | 操作系统级别 |
封装程度 | 直达包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
是在Linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量
运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)
namespace | 系统调用参数 | 隔离内容 |
UTS | CLONE_NEWUTS | 主机名与域名 |
IPC | CLONE_NEWWIPC | 信号量、消息队列和共享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备、网络栈、端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
UDER | CLONE_NEWUSER | 用户和组(3.8以后的内核才支持) |
Linux上的Do侧看人引擎还依赖于另一种称为控制组(Cgroups)的技术,Cgroup将应用和程序限制为一组特定的资源,控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。Cgroups主要是用作资源控制——可以用来划分时间片
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 目录下。
目前 Docker 只能支持 64 位系统。
Yum安装默认安装最新版本,目前最新版本是2023版本,但工作中不会用这么新的版本
1. #关闭防火墙和selinux
systemctl stop firewalld.service
setenforce 0
2.#安装依赖包
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。
-------------------------------------------------------------------------------------------
1. #设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. #安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
3. #设置为开机自动启动
systemctl start docker.service
systemctl enable docker.service
1. #查看docker版本信息
docker version
2. #查看docker信息
docker info
1.浏览器访问
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
获取镜像加速器配置
2.配置镜像加速器
vim /etc/docker/daemon.json
添加自己的加速器地址,如下图
3.重新加载配置并重启服务
#重新加载配置并重启服务
systemctl daemon-reload
systemctl restart docker
4.验证查看
docker info
运行
已暂停
重新启动
已退出
docker是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是docker引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。
cgroup资源控制与namespaces两者构成了docker底层原理
docker是一种容器技术,**把linux中的cgroups(资源管理)和namespace(名称空间)等**容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行cli、api等),这种C/S架构
Docker客户端 - Docker
docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
Docker服务端-Docker Daemon资源限制
docker服务端是一个服务进程,管理着所有的容器。
Docker镜像一Imagefont
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码。运行时间,库,环境变量,和配置文件
Docker容器-Docker Container
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
Docker镜像仓库-- Registryfont
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private、常用)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker的镜像、容器、日志等内容全部都默认存储在**/var/lib/docker**目录下。
docker引擎统一了基础设施环境-docker环境——>image——>封装一一个简易的操作系统(3.0+G)
docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式-docker镜像——>images
docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)
实现了一次构建,多次、多处使用
把这个docker干掉,它的资源可能会释放,然后重新再建一个,因为集对于集群来说它会有高可用的设置,所以干掉一个影响并不大