虚拟化和docker基本管理
前言
通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互
目录 前言 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。 Docker 是一个开源的应用容器引擎,基于go语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口的,更重要的是容器性能开销极低。 一.虚拟化概述 虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率 二.耦合与解耦合 耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。 1.耦合 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 对象之间的耦合度就是对象之间的依赖性。 对象之间的耦合越高,维护成本越高 2.解耦合 字面意思就是解除耦合关系。 在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。 三.虚拟化的作用 1.虚拟化节省了对IT硬件的投资 在虚拟化中,您将多个物理机转换为虚拟机,并将所有虚拟机转换为托管在单个(或少数)物理机上。这将减少您购买多个硬件资源的需求。通过这种方式,它可以集中您的运营环境,还可以显着节省购买硬件设备的投资成本。 2、虚拟化可以节省过多的电力成本 服务器,台式机和存储单元等设备必然会耗费大量电力来保持运行。但如果是虚拟化环境,从长远来看,能够节省大量的能源费用。 3、虚拟化具有更轻松云系统架构KVM,更具成本效益的维护 虚拟化基础架构可以节省人力和服务器生命周期维护费用。使用较少的物理服务器,手动配置,监视和维护的次数较少。物理服务器数量的减少还会降低硬件维护成本并增加可用的工作空间量。 4、虚拟化确保更好的可靠性和安全性 虚拟化通过使其更具流动性和上下文感知来提高安全性。使用基于软件的安全解决方案时,与传统的物理安全性相比,安全性变得更加准确,易于管理且部署成本更低。 虚拟化环境还可以节省IT基础架构中安全漏洞期间发生的意外成本,因为IT工作人员拥有的机器较少,而且基础设施较小。这使得解决安全威胁变得更加容易和快捷。 四.虚拟化工作原理 虚拟机管理器功能:调用资源 两大核心组件:QEMU、KVM 1.QEMU QEMU是I/O控制的模块,可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。 QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。 2.KVM 用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。 只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。对于workstation而言(硬件辅助虚拟化),表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。 3.虚拟化类型 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用 半虚拟化:需要修改操作系统 直通:直接使用物理硬件资源(需要支持,还不完善) 全虚拟化:KVM——》产品vmware—ce 半虚拟化:EXSI——》workststion vsphere 4.虚拟化功能 在一个操作系统内,模拟多个操作系统 以软件的方式模拟物理设备的功能 五.Docker 是什么 Docker 是一个开源的应用容器引擎,基于go 语言开发并遵循了apache2.0 协议开源 Docker 是在Linux 容器里运行应用的开源工具,是一种轻量级的“虚拟机” Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的,可移植的,自给自足的容器。 六.Docker特点 容器化越来越受欢迎,因为容器是: 灵活:即使是最复杂的应用也可以集装箱化。 轻量级:容器利用并共享主机内核。 可互换:可以即时部署更新和升级。 便携式:可以在本地构建,部署到云,并在任何地方运行。 可扩展:可以增加并白动分发容器副本。 可堆叠:可以垂直和即时堆叠服务。 容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。 虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。 七.Docker与KVM的区别 1.隔离与共享 虚拟机通过添加Hypervisor层(虚拟化中间层),虚拟出网卡、内存、CPU等虚拟硬件,再在其上建立虚拟机,每个虚拟机都有自己的系统内核。而Docker容器则是通过隔离(namesapce)的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU资源等进行控制(cgroup),最终让容器之间互不影响,容器无法影响宿主机。 容器与宿主机共享内核、文件系统、硬件等资源。 2.性能与损耗 与虚拟机相比,容器资源损耗要少。 同样的宿主机下,能够建立容器的数量要比虚拟机多 但是,虚拟机的安全性要比容器稍好,要从虚拟机攻破到宿主机或其他虚拟机,需要先攻破 Hypervisor层,这是极其困难的 而docker容器与宿主机共享内核、文件系统等资源,更有可能对其他容器、宿主机产生影响。 八.Docker的使用场景 打包应用程序部署简单 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦) 例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。 适合做微服务的部署 适合持续集成和持续交付(CI/CD):开发到测试发布 部署微服务 提供PASS产品(平台即服务){OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker(K8S)属于PAAS} 九.Docker引擎(Docker Engine) Docker Engine是具有以下主要组件的**客户端-服务器(C/S架构)**应用程序: server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。 client端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。 命令行界面(cLI)客户端((docker命令)。 docker run docker start docker rm 十.Docker的架构(Docker architecture) Docker使用客户端-服务端(C/S)架构。Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。 Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快。 Docker daemon:守护进程 Docker守护程序(dockerd)侦听Docker API请求并管理Docker对象。例如图像、容器、网络和卷,守护程序还可以与其他守护程序通信以管理Docker服务。 1.简述Docker体系架构 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目录下。 2.Docker 三要素(核心组件) Docker images:镜像:统一的封装方式——》模板 Docker container:容器:统一的运行时环境 ——》基于镜像,运行状态/运行时状态 Docker registry:镜像仓库:放置镜像的仓库——》存放镜像模板 存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。 仓库大类:①公共仓库—》docker hub ②私有仓库registry harbor 3.Docker运行流程 工作流程: 客户端发起各种各样的命令,给与主机 主机会调用镜像,如果有镜像直接用,运行为容器 如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器 4、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以后的内核才支持) 5、控制组—cgroups(Control groups) 六种名称空间是由cgroups管理的 最后一种centos的cgroups管理版本是3.8版本 cgroups 管理linux内核态中资源管理的模块 cgroups 管理一些系统资源 不是docker原生的。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |