Docker 基本管理(一)

目录

一、虚拟化简介

1.1.虚拟化概述

1.2.cpu的时间分片(cpu虚拟化)

1.3.cpu虚拟化性性能瓶颈 

1.4.虚拟化工作原理 

1.5 虚拟化类型 

1.6 虚拟化功能

​二、Docker容器概述

2.1 docker是什么? 

2.2 使用docker有什么意义?

2.3 docker的使用场景 

2.4 docker引擎(docker engine) 

2.5 Docker 三要素(核心组件)

2.6 docker的工作流程

2.7 六大名称空间

2.8 资源控制——cgroups(control groups)

2.9 容器特性

2.10 如何把多个目录挂载到同一个目录下 

三、Docker和虚拟化的区别


一、虚拟化简介

1.1.虚拟化概述

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

1.2.cpu的时间分片(cpu虚拟化)

  • 正常每个任务以轮询的方式去处理,这个时候一个CPU一个整体。
  • 以下是针对的CPU单位时间内的一个资源。按时间划分,1秒划分成10个0.1秒,每个0.1秒可以全力处理10单位的任务。在1秒内,都在全力工作。
  • cpu 1s全力运转的性能——》逻辑分割成分成了10份,可以理解为在单位时间内可以处理10个任务,每一个0.1s cpu是满的。原先分片前100M以下的任务一次只可以处理1个,现在100M的任务一次可以处理10个。这就是时间分片的一个概念。
  • 虚拟化作用——》缓解/解决了资源利用率的问题 

1.3.cpu虚拟化性性能瓶颈 

cpu分片后每个任务处理性能会打对折。

  • 如果是50m及50m以下的任务的话,虚拟化后的,1s模拟10个cpu,可以处理10个。虚拟化后的性能更高。
  • 如果是50+m的任务的话,物理硬件的性能就会比虚拟化的性能高了。虚拟化的cpu会卡顿。所以在极度吃资源的情况下,例如mysql高并发这种,就不适合用虚拟化。

1.4.虚拟化工作原理 

虚拟机管理器功能: 调用资源

两大核心组件: QEMU、KVM

  • QEMU:
  1. 可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
  2. QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。
  • KVM:
  1. 用来逻辑分割物理资源,抽象化为虚拟化资源,根据KVM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
  2. 只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
  • 对于workstation而言——》硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。

1.5 虚拟化类型 

1.全虚拟化:将物理硬件资源全部通过软件的放肆抽象化,最后进行调用
2.半虚拟化:需要修改操作系统
3.直通:直接使用物理硬件资源(需要支持,还不完善)
  1. 全虚拟化:KVM ---->产品vmware-ce
  2. 半虚拟化:EXSI ----> workstation vsphere 

1.6 虚拟化功能

  • 在一个操作系统内,模拟多个操作系统
  • 以软件的方式模拟物理设备的功能

​二、Docker容器概述

容器基础概念—>六大名称空间
名称空间:以不同空间划分不同资源Docker的思想来自于集装箱, 是一个以容器的形式将应用程序及其所有依赖项打包在一起的平台。它使用容器使应用程序的创建、部署和运行变得更加容易。Docker 在容器内绑定应用程序及其依赖项。容器允许开发人员将应用程序及其所需的所有部分(例如库和其他依赖项)打包在一起,然后将其作为一个包发送出去。docker的主要目标是"Build,Ship and Run any App,Anywhere",构建,运输,处处运行。

2.1 docker是什么? 

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

2.2 使用docker有什么意义?

把容器化技术做成了标准化平台

  1. docker引擎统一了基础设施环境——docker环境
  2. docker引擎统一了程序打包(装箱) 方式——docker镜像(把引擎放在镜像中,带着镜像到处跑)
  3. docker引擎统一了程序部署(运行) 方式——docke容器(利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了)

有镜像才能有容器 

  • 镜像——》封装的一个时刻的服务/应用状态
  • 容器——》应用跑起来的状态(正常提供服务的状态 - 运行时

docker的作用 

  • 解决环境和切换的问题

比如说装Linux虚拟机,重装Windows系统,都是需要一个叫镜像的东西,我们通过这个镜像来装系统,docker就是这种思想,把环境打包,用的时候直接拉取就可以。

  • 更快速的交付和部署

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

  • 高效的部署和扩容

Docker容器可以打包为镜像文件(类似VM虚拟机的那些快照文件),迁移的时候我们只需要在新服务器上安装docker,就能把之前打包好的镜像文件导入到docker里面,运行容器,就能实现访问,不需要重新配置环境。

  • 轻量、消耗少

使用Docker能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术让Docker能以更加紧密的资源提供更有效的服务合并。基于LXC轻量级特点,启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,在单机环境下与KVM之类的虚拟化方案相比,能够更加快速和占用更少资源。

  • 更高的资源利用率

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

  • 更简单的管理

它有可视化ui界面,展示整个docker环境的容器列表,容器状态,容器属性、容器创建等,可以对容器进行相关的操作,如容器的基本信息、启停、删除、状态监控(CPU、内存、网络情况)、日志查看、进入容器终端(docker exec)。目前市面有很多,可以搜索docker管理界面软件。 

2.3 docker的使用场景 

  1. 打包应用程序部署简单
  2. 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如: 需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。
  3. 适合做微服务的部署
  4. 适合持续集成和持续交付(CI/CD):开发到测试发布

 

2.4 docker引擎(docker engine) 

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

  • server端: 服务器是一种长期运行的程序,称为守护程序进程(dockerd命令 )
  • client端: rest API ,它指定程序可以用来与守护进程通信并指示其操作的接口。
  • 命令行界面(CLI) 客户端(docker命令)
  1. docker run
  2. docker start
  3. docker rm

2.5 Docker 三要素(核心组件)

  • docker images: 镜像:统一的封装方式----->模板
  • docker container: 容器:统一的运行时环境—>基于镜像,运行状态/运行时状态
  • docker registry: 镜像仓库:放置镜像的仓库---->存放镜像模板
  1. 存储镜像的地方,默认在公共的docker hub上查找,可以搞个人仓库。
  2. 仓库大类: ①公共仓库—》docker hub ②私有仓库registry harbor

2.6 docker的工作流程

build:制作镜像(image)
pull:拉取镜像(拉倒本地去使用)
run:运行容器的(docker)1.客户端发起各种各样的命令,给与主机
2.主机会调用镜像,如果有镜像直接用,运行为容器
3.如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器

2.7 六大名称空间

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

2.8 资源控制——cgroups(control groups)

  • 六种名称空间是有cgroups管理的
  • 最后一种centos的cgroups管理版本是3.8版本,3.6和 3.5已经不用了
  • cgroups管理linux内核态中资源管理的模块
  • cgroups管理一些系统资源
  • 不是docker原生的 

2.9 容器特性

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

2.10 如何把多个目录挂载到同一个目录下 

(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加式文件系统es
docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)实现了一次构建,多次、多处使用。

三、Docker和虚拟化的区别

特性Docker容器(一个进程控制)虚拟机虚拟化(完整的操作系统)
启动速度秒级分钟级
运行性能接近原生(直接在内核中运行)10%-20%左右的损失50%左右损失(全虚拟化类型)
磁盘占用50-100MB3-5G
数量成百上千,每个进程可控制一个容器几十个
隔离性进程级别操作系统(更彻底,安全级别高)
操作系统主要支持Linux几乎所有
封装程度只封装目标代码和依赖关系,共享宿主机内核完整的操作系统,与宿主机隔离
容器 是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。
这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/92584.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支持https访问

文章目录 1. 打开自己的云服务器的 80 和 443 端口2. 安装 nginx3. 安装 snapd4. 安装 certbot5. 生成证书6. 拷贝生成的证书到项目工作目录7. 修改 main.go 程序如下8. 编译程序9. 启动程序10. 使用 https 和端口 8081 访问页面成功11. 下面修改程序,支持 https 和…

读书笔记 |【项目思维与管理】➾ 顺势而动

读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 💖The Begin💖点点关注,收藏不迷路💖 …

MySQL 函数

mysql 函数语法 create function 函数名(参数名 参数类型,。。。) returns type —返回值类型 ----returns 有个 s [characteristics…] begin 函数体 ### 函数体中肯定有 return 语句 end 参数列表 指定参数为 IN | out | INOUT 只对存储过程…

【Linux操作系统】举例解释Linux系统编程中文件io常用的函数

在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 文章目录 1. open()1.1 原型、参数及…

Android:自定义沿着曲线轨迹移动

前言 前几天,后台有老铁留言,说有个需求,画两条曲线,中间是一个小球,沿着两条线中间的轨迹从左往右移动,让提供个思路,做为一个极度宠粉的博主,思路不仅要提供,实现方案也…

八大排序超详解(动图+源码)

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注&…

【Linux】IO多路转接——select接口

目录 I/O多路转接之select select初识 select函数 socket就绪条件 select基本工作流程 select服务器 select的优点 select的缺点 select的适用场景 I/O多路转接之select select初识 select是系统提供的一个多路转接接口。 select系统调用可以让我们的程序同时监视多…

拦截器和过滤器的区别

😀前言 本篇博文是关于拦截器VS 过滤器的分享,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我…

【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值

数据预处理 💫数据预处理的重要性💫处理缺失值⭐️识别表格中的数据⭐️计算每列缺失值的数量⭐️删除含有缺失值的样本或特征⭐️填充缺失值 💫处理异常值⭐️异常值的鉴别⭐️异常值的处理 💫将数据集划分为训练数据集和测试数据…

Jmeter-压力测试工具

文章目录 Jmeter快速入门1.1.下载1.2.解压1.3.运行 2.快速入门2.1.设置中文语言2.2.基本用法 Jmeter快速入门 1s内发送大量请求,模拟高QPS,用以测试网站能承受的压力有多大 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK&#xff0…

使用ip2region获取客户端地区

目录 从gitee拉取ip2region.xdb资源文件 写测试类 注意要写对资源路径 本地测试结果 ​编辑 远端测试结果 从gitee拉取ip2region.xdb资源文件 git clone https://gitee.com/lionsoul/ip2region.git 将xdb放入resources资源文件夹 引入依赖 <dependency><groupId&…

Vue响应式数据的原理

在 vue2 的响应式中&#xff0c;存在着添加属性、删除属性、以及通过下标修改数组&#xff0c;但页面不会自动更新的问题。而这些问题在 vue3 中都得以解决。 vue3 采用了 proxy 代理&#xff0c;用于拦截对象中任意属性的变化&#xff0c;包括&#xff1a;属性的读写、属性的…

Pycharm社区版连接WSL2中的Mysql8.*

当前时间2023.08.13&#xff0c;Windows11中默认的WSL版本已经是2了&#xff0c;在WSL2中默认的Ubuntu版本已经是22.04&#xff0c;而Ubuntu22.04中默认的Mysql版本已经是8.*。 Wsl 2 中安装mysql WSL2中安装Mysql的方法参考自微软官方文档【开始使用适用于 Linux 的 Windows …

《论文阅读12》RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

一、论文 研究领域&#xff1a;全监督3D语义分割&#xff08;室内&#xff0c;室外RGB&#xff0c;kitti&#xff09;论文&#xff1a;RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds CVPR 2020 牛津大学、中山大学、国防科技大学 论文链接论文gi…

C++储备

一、类的 三大特性 封装&#xff0c;继承&#xff0c;多态 二、虚函数 为啥要用到虚函数 C虚函数详解_Whitesad_的博客-CSDN博客 三、函数重载 四、封装的保护权限 1.public 成员类内&#xff0c;内外都可以访问 2.protected 成员&#xff0c;类内可以访问&#xff0c…

两只小企鹅(Python实现)

目录 1 和她浪漫的昨天 2 未来的旖旎风景 3 Python完整代码 1 和她浪漫的昨天 是的,春天需要你。经常会有一颗星等着你抬头去看&#xff1b; 和她一起吹晚风吗﹖在春天的柏油路夏日的桥头秋季的公园寒冬的阳台&#xff1b; 这世界不停开花&#xff0c;我想放进你心里一朵&am…

【软件工程】软件测试

软件测试的对象 软件程序文档 测试对象&#xff1a;各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场&#xff0c;对软件测试的目的存在着两种完全对立的观点。 &#xff08;1&#xff09;一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)&#xf…

语聚AI公测发布,大语言模型时代下新的生产力工具

语聚AI 公测发布 距离语聚AI内测上线已经过去近1个月。 这期间&#xff0c;我们共邀请了近百位资深用户与行业专家加入语聚AI产品体验。通过大家的热情参与积极反馈&#xff0c;我们不断优化并完善了语聚AI的功能与使用体验。 经过研发团队不懈的努力&#xff0c;今天语聚AI终…

深度学习实战基础案例——卷积神经网络(CNN)基于SqueezeNet的眼疾识别|第1例

文章目录 前言一、数据准备1.1 数据集介绍1.2 数据集文件结构 二、项目实战2.1 数据标签划分2.2 数据预处理2.3 构建模型2.4 开始训练2.5 结果可视化 三、数据集个体预测 前言 SqueezeNet是一种轻量且高效的CNN模型&#xff0c;它参数比AlexNet少50倍&#xff0c;但模型性能&a…

实战项目:基于主从Reactor模型实现高并发服务器

项目完整代码仿mudou库one thread one loop式并发服务器实现: 仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器&#xff1a;通过模拟实现的⾼并发服务器组件&#xff0c;可以简洁快速的完成⼀个⾼性能的服务器搭建。并且&#xff0c;通过组件内提供的不同应⽤层…