当前位置: 首页 > news >正文

3.1虚拟化和安装Docker

虚拟化和Docker优化

引言

以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务,多个服务可能会相互影响。

虚拟化

cpu的时间分片(cpu虚拟化),cpu虚拟化性性能瓶颈。

虚拟化工作原理

image-20220109115326552

两大核心组件:QEMU、KVM

  • QEMU:

    ①可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。

    ②QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。

  • KVM:

    ①用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。

    ②只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。

image-20220903110336937

虚拟化类型

  1. 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
  2. 半虚拟化:需要修改操作系统
  3. 直通:直接使用物理硬件资源(需要支持,还不完善)

全虚拟化:KVM——》产品vmware—ce

半虚拟化:EXSI——》(workststion)vsphere

对于workstation而言——硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。

image-20220903110353381

容器概述

Docker是什么

  • 是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
  • 在Linux容器里运行应用的开源工具——容器引擎,让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
  • Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
  • Docker的设计宗旨:Build,Ship and Run Any App, Anywhere
    即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

Docker的使用场景

  • 打包应用程序部署简单

  • 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。

  • 适合做微服务的部署

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

image-20220109153957551

Docker 三要素(核心组件)

  • 镜像(Docker images):统一的封装方式,一个面向Docker容器引擎的只读模板
  • 容器(Docker container):统一的运行时环境,基于镜像,运行状态/运行时状态
  • 镜像仓库(Docker registry):放置镜像的仓库,存放镜像模板

CentOS安装Docker的两种方式
●使用CURL获得Docker的安装脚本进行安装
●使用YUM仓库来安装Docker

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

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

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

image-20220109160214727

容器特性——性能损耗10-20%

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:可以即时部署更新和升级。
  • 便携式:可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。

六大名称空间

namespace资源隔离——用容器技术封装

image-20220109122533046

mount文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
user操作进程的用户和用户组
pid进程编号
uts主机名和主机域 (同一个环境里不能又叫node1又叫node2)
ipc信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net(网络资源)网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

小结:

IAAS(基出设施)SAAS(软件服务)PAAS(平台服务)DAAS(数据服务)
openstack / KVM linux环境下
ESXI ESXI企业
xen
docker
VMware workstation个人

容器:提供在多台主机上运行应用程序相同的运行环境
docker是开源的容器引擎,go语言开发的,是容器里运行应用的工具,是一个径量级的虚拟机可以利用locker在多台主机上轻松的创建并运行容器。

docker容器可以被看做运行在宿主机上一个进程,容器共享宿主机的内核,容器间是通过namespace(命名空间、名称空间)隔离资源,通过cgroups(资源配额)去限制资源。

镜像
运行容器的基础,包含运行的应用程序所需的所有内容。
容器
是从镜像创建的运行实例。
仓库
集中保存镜像的地方(公有仓库dolker hub,私有仓库harhor)。

安装docker

目前 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 
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli
systemctl start docker.service
systemctl enable docker.service 

安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。
Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。

#查看 docker 版本信息
docker version
#查看docker信息
docker info

设置镜像加速

1.申请加速器地址
使用阿里云的镜像,加速镜像下载速度
登录阿里云账号

2.搜索容器镜像服务点击进入找到镜像工具——镜像加速器,找到自己需要的版本,将命令复制到系统里面。

image-20220905140217471

image-20220905140718112

网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #开启路由转发
sysctl -p
systemctl restart network
systemctl restart docker

片转存中…(img-V6bLQN1J-1663301244921)]

网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #开启路由转发
sysctl -p
systemctl restart network
systemctl restart docker

开启路由转发是让docker0能根据虚拟机ip为自己所有的docker容器分配虚拟ip

相关文章:

  • 讲价 数学问题
  • Qt官方示例学习目录
  • 【下班神器】python写自动关机程序并打包成exe文件
  • SQL 改写系列十:半连接转内连接
  • 根据上下级关系统计数据
  • 金仓数据库KingbaseES客户端编程开发框架-Hibernate Spatial(2. 概述)
  • 第二十三章 多线程(一)
  • mysql的常见的外键约束
  • React基础-JSX语法介绍
  • SAP ABAP代码自动生成demo
  • 【JS】JavaScript入门笔记第七弹之JS简单类型与复杂类型~
  • 什么是狭义人工智能、通用人工智能和超级人工智能?
  • mybatis-spring的整合
  • Python并发方案深度对比
  • 大疆创新2022数字芯片B卷
  • Android开源项目规范总结
  • Bootstrap JS插件Alert源码分析
  • canvas 高仿 Apple Watch 表盘
  • js作用域和this的理解
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Phpstorm怎样批量删除空行?
  • Python爬虫--- 1.3 BS4库的解析器
  • ReactNative开发常用的三方模块
  • 创建一种深思熟虑的文化
  • 浮现式设计
  • 关于 Cirru Editor 存储格式
  • 关于List、List?、ListObject的区别
  • 基于webpack 的 vue 多页架构
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 蓝海存储开关机注意事项总结
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前嗅ForeSpider采集配置界面介绍
  • 前言-如何学习区块链
  • 如何进阶一名有竞争力的程序员?
  • 什么是Javascript函数节流?
  • 微信小程序:实现悬浮返回和分享按钮
  • 小程序01:wepy框架整合iview webapp UI
  • 异常机制详解
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​人工智能书单(数学基础篇)
  • ​水经微图Web1.5.0版即将上线
  • $.proxy和$.extend
  • (4)logging(日志模块)
  • (solr系列:一)使用tomcat部署solr服务
  • (二十四)Flask之flask-session组件
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (一)kafka实战——kafka源码编译启动
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)EOS中账户、钱包和密钥的关系
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)setTimeout 和 setInterval 的区别
  • (转)用.Net的File控件上传文件的解决方案