加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

虚拟化与Docker

发布时间:2022-10-25 13:31:34 所属栏目:系统 来源:网络
导读: 文章目录
前言
在Linux中,Linux操作系统会有一个进程PID=1派出其他进程来控制不同服务,多个服务可能会互相影响,使用者期望将这三个不同的服务,跑在不同的运行环境中实现相互不影响,同

文章目录

前言

在Linux中,Linux操作系统会有一个进程PID=1派出其他进程来控制不同服务,多个服务可能会互相影响,使用者期望将这三个不同的服务,跑在不同的运行环境中实现相互不影响,同时不会增加服务器成本

虚拟化简介

通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率。

1、虚拟化概述

虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率

2、耦合与解耦合

耦合性是程序结构各个模块之间相互关联的度量,它取决于各个模块之间的接口 复杂程度,调用模块的方式以及哪些信息通过接口。

1.耦合

1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象

2、对象之间的耦合度就是对象之间的依赖性

3、对象之间的耦合越高,维护成本越高

2.解耦合

1、字面意思就是解除耦合关系

2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但是可用通过一些现有的方式将耦合度降至最低。

设计的核心思想

尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。

虚拟化的作用

缓解/解决了资源利用率的问题

物理硬件的性能就会比虚拟化的性能高,在极度吃资源的情况下,例如mysql高并发这种,就不适合用虚拟化。

虚拟化工作原理

在这里插入图片描述

KVM + QEMU

KVM:负责将当前宿主机的一些硬件资源,进行虚拟化处理

QEMU:调用内核的逻辑分割后的资源对象、给与VM(虚拟机)、传递交互指令

虚拟化类型

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

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

3、直通:直接使用物理硬件资源(需要支持,还不完善)

虚拟化功能

在一个操作系统内,模拟多个操作系统

以软件的方式模拟物理设备的功能

Docker概述

Docker是一个用于开发,交付和运行的应用程序的开放平台。Docker可以将应用程序与基础架构分开,从而可以快速交付软件。是一个开源的应用容器引擎,让开发者可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,互相之间不会有任何接口,沙箱(Sandbox)在计算机安全领域,沙箱是一种程序的隔离运行机制。

Docker优点

1、灵活:即使是最复杂的应用也可以集装箱化

2、轻量级:容器利用并共享主机内核

3、可互换:可以即时部署更新和升级

4、便携性:可以在本地构建,部署到云,并在任何地方运行

5、可扩展:可以增加并自动分发容器副本

6、可堆叠:可以垂直和即时堆叠服务

容器是在linux上本机运行的,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。

虚拟机运行是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

在这里插入图片描述

Docker从一开始就以提供标准化的运行时环境为目标,真正做到"Build云系统架构KVM,Ship and Run any APP,Angwhere",可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出了Caas (容器即服务)技术。

Docker与KVM(虚拟机)的区别 隔离与共享

虚拟机通过添加Hypervisor层(虚拟化中间层),虚拟出网卡、内存、CPU等虚拟硬件,再在其上建立虚拟机,每个虚拟机都有自己的系统内核。而Docker容器则是通过隔离(namesapce)的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU资源等进行控制(cgroup),最终让容器之间互不影响,容器无法影响宿主机。

容器与宿主机共享内核、文件系统、硬件等资源。

性能与损耗

与虚拟机相比,容器资源损耗要少。

同样的宿主机下,能够建立容器的数量要比虚拟机多

但是,虚拟机的安全性要比容器稍好,要从虚拟机攻破到宿主机或其他虚拟机,需要先攻破 Hypervisor层,这是极其困难的

而docker容器与宿主机共享内核、文件系统等资源,更有可能对其他容器、宿主机产生影响。

不同点Docker容器虚拟机

启动速度

快,几秒钟

慢,几分钟

运行性能

接近原生(直接在内核中运行)

运行于Hypervisor上,50%左右损失

磁盘占用

小,甚至几十KB(根据镜像层的情况)

非常大,上GB

并发性

一台宿主机可以启动成百上千个容器

最多几十个虚拟机

隔离性

进程级别

资源隔离/限制

操作系统

主要支持Linux

主要支持Linux

封装程度

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

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

使用Docker的意义

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

docker引擎统一了程序打包(装箱)方式-docker镜像

docker引擎统一了程序部署(运行)方式-docker容器

镜像 封装的某个时刻的服务/应用状态

容器 应用跑起来的状态(正常提供服务的状态-运行时)

实现了一次构建,多次,多处使用。

Docker的使用场景

打包应用程序简单部署

可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云

持续集成和持续交付(CI/CD):开发到测试发布

部署微服务

提供PAAS产品(平台即服务)(OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker(K8S)属于PAAS)

Docker引擎(Docker Engine)

Docker Engine是具有以下主要组件的**客户端-服务器(C/S架构)**应用程序:

docker run
docker start
docker rm

在这里插入图片描述

Docker的架构(Docker architecture) Docker体系架构

Docker客户端 - Docker

docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。

Docker服务端-Docker Daemon资源限制

docker服务端是一个服务进程,管理着所有的容器。

Docker镜像一Imagefont>

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码。运行时间,库,环境变量,和配置文件

Docker容器-Docker Container

Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。

Docker镜像仓库-- Registryfont>

Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓

Docker的镜像、容器、日志等内容全部都默认存储在/var/lib/docker目录下。

Docker 三要素(核心组件)

Docker images:镜像:统一的封装方式——》模板

Docker container:容器:统一的运行时环境 ——》基于镜像,运行状态/运行时状态

Docker registry:镜像仓库:放置镜像的仓库——》存放镜像模板

存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。

仓库大类:①公共仓库—》docker hub ②私有仓库registry harbor

Docker运行流程

在这里插入图片描述

工作流程

Linux 的namespace (命名空间) namespace系统调用参数隔离内容

utc

CLONE_NEWUTS

主机名和主机域 (同一个环境里不能又叫node1又叫node2)

ipc

CLONE_NEWWIPS

信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)

pid

CLONE_NEWPID

进程编号

network

CLONE_NEWNET

网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

mount

CLONE_NEWNS

文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录

user

CLONE_NEWUSER

用户和用户组(3.8以后的内核才支持)

控制组—cgroups(Control groups)

六种名称空间是由cgroups管理的

最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了

cgroups 管理linux内核态中资源管理的模块

cgroups 管理一些系统资源

不是docker原生的。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!