技术三观之老黄谈物理机、虚拟机以及Docker

2023-10-13 00:30

本文主要是介绍技术三观之老黄谈物理机、虚拟机以及Docker,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高效集装箱码头

12月底也是2018年的最后一天,从九月初到机关楼截止到现在,自己真正学的东西也没多少,这正应了一句话,人是容易迷失的动物,身处恶劣的环境会反思,会懊悔,会发誓如果再给自己一次机会一定要好好做人,但真正当上天把好的环境无私地送给你的时候,你又是否能够如之前所说坚守约定,为理想,信仰奋斗到底呢?成功的人,是能够在危亡之际展露惊人勇气的人,是经得起时间,困境考验而始终如一的人。

物理机与虚拟机的渊源

所谓物理机就是一台可以看得到摸得着的机器(个人PC一样是物理机),可以简单的认为就是一台电脑主机。虚拟机顾名思义是借组一种工具虚拟出来的机器,它是不存在的,所以你看不到也摸不着。但是当你使用它的时候,体验却和在使用一台真实物理机一模一样。“石器时代”,我们在部署一个计算机应用的时候,往往会将多个应用部署到一台物理机上,例如JavaWeb应用,我们会将无数的WebApp打包发布到Tomcat的webapps文件中,然后启动软件应用,服务开启。这种部署方式所暴露的最大问题就是应用集中部署,没有隔离,一旦某个应用由于误操作或者其他原因导致服务器崩溃,那么所有应用便不能正常使用,这就是我在之前的博客中提到的老黄概念之一“病态串联”,集中化管理有好处“但牵一发而动全身”,两军交战本应该是利益核心方的冲突,却苦了无辜的黎明百姓,“城门失火,殃及池鱼”,他搞坏了服务器,你就得和他一样不能运行。问题与解决问题往往是并存的,为了不让服务器崩掉,项目经理就想办法了,既然放在一台服务器上机器“受不了”,我们一共有十个应用,那搞他十个服务器不就行了。一旁的技术青年小张正是操营的徐庶,笑而不语。好了就不来“沉浸式”了,如果大家喜欢,我以后会专门来几篇这种有“沉浸式编程”风格的文章。为了解决单体机器的问题,就有了虚拟机技术,我们可以通过虚拟一个拥有自己硬件配置的机器来实现应用的隔离,可能只有一台物理真机但通过虚拟化我们就可以将一台机器虚拟成十个机器,然后将各个应用部署到不同的虚拟机上,这样就算是张三搞坏了服务器自己不能运行了,李四和他没有丝毫关系,也不会受到任何影响,因为李四有自己的机器,自己的软件应用环境。

物理资源的虚拟化Hypervisor

Hypervisor就是上边提到的物理资源的虚拟化技术,他可以将现有的硬件资源充分利用,解决我有三台真机却有十个应用的尴尬局面。这里需要强调几个概念:1.物理真机就是Host宿主机。2.虚拟机又叫客户机(Guest)。3. KVM、VMware以及Xen是Hypervisor的几种具体实现。3.Hypervisor可以直接在宿主机部署(没有安装系统应用),也可以在已安装系统应用的宿主机上部署,我们大部分是在已安装系统应用的真机上实现虚拟化(例如VMware)。理解了上边几个概念之后我再与大家谈谈云计算,去年在北京我和好基友小安同学探讨过云计算,当时我对这一块了解的不是很深,但有几个基本问题我却是明白的,我接触过阿里云,知道云端部署Android后台的基本流程,有过Xshell安装云服务环境的基本经验,知道DNS域名解析和IP的关系,当然曾经我的编程恩师陈老师还让我见过一台报废的服务器,所以我并没有和其他人一样成为一个只会给技术上香叩头的“宗教徒”,技术没有神秘之处,之所以神秘是因为你根本不知他,不懂他。因为一篇新闻看到了大数据,人工智能战胜了人类,某技术多么厉害就觉得自己拥有了优先权,发言权,然后就是高谈阔论,这样的人看似拥有了全世界,实际上却是最贫穷的,哪里贫穷,精神贫穷,头脑贫穷,内心贫穷。好了,回归正题,云计算其实并不神秘(虽然看起来很神秘,好多人以为是一种神秘虚拟的存在,别吓我,没那么玄乎),他就是前边我提到的计算机虚拟技术,只不过这些虚拟机对外开放形成了Paas(阿里的基于平台的对外服务,对了你了解Saas和Iaas吗),你可以通过一些第三方软件操作控制这台人家给你的虚拟机(需要IP,用户以及密码),这样你好像就拥有了一台电脑,一台看不见摸不着的“云计算机”(可以自己安装系统,安装各种软件),请记住你拥有的是一台虚拟机Guest,而不是Host宿主机,Host宿主机在阿里的机房里。可能你还是觉得他玄乎,那你只能动手了,请记住看书和看文章的程序员永远不会是好程序员,不要废话,动手,让那些门外汉去讨论概念吧。

Docker容器来了

图片来自知乎某帖子
前边讲到了虚拟机讲到了通过多个虚拟机实现应用环境的隔离,但如果你用过VMware你就会知道(大学学习RedHat的时候用过)虚拟机是一个什么概念,他就是一个待安装应用的操作系统,而且会占用宿主机的大量内存和资源。回过来想想,我们的目的是实现应用的隔离,这样会不会有点小题大作了,一个应用对应一台启动缓慢的虚拟电脑?我们面向的是应用,而不是机器。这样Docker应运而生,Docker是一个容器引擎,他可以为所有的微服务应用提供运行时的环境,他的沙箱机制类似JVM的跨平台原理,还有类似Git的Pull,Push机制,通过Docker你可以为自己的应用提供一个高度内聚,粒度足够细小的应用运行环境,而这一切都在Docker Registry远端仓库中,你要做的就是敲几行类似node.js环境下npm命令,这些命令就像是maven,gradle中的坐标定位一样会从Docker Registry公有仓库中自动为你进行下载安装。以下就是虚拟机和容器技术的实力对比:
没有对比就没有伤害
孰优孰劣,我不多说。重要概念需要大家牢记,Docker三剑客:容器,镜像,仓库。容器与镜像好比Java中的对象和类,镜像是对容器的抽象预定义,是静态的按照Docker标准打包实现的未运行的应用环境(各种配置文件),容器是已经运行起来的具体镜像。镜像则类似操作系统的用户文件(操作系统包括内核和用户文件),这里指的就是应用运行所需的各种环境(精简的操作系统级以及应用级环境的配置文件)。Docker的三个关键操作:build,ship,run,Docker操作的对象是一种应用运行的环境而不是具体的应用,他管理的容器对应的是各种环境比如数据库需要的环境,Java需要的环境,PHP需要的环境这些环境运行起来就是Docker中的容器,待运行状态就是镜像也可以理解为对应用环境的封装。

容器的方向舵K8S

容器的方向盘
就好比微服务一样,服务多了需要规范化管理于是有了Dubbo,SpringCloud,谷歌的Grpc以及其中必不可少的服务注册组件Zookeeper,服务解耦以及通过消息持久化提供缓存服务的消息中间兔子队列等,容器一样如此,K8S是一个容器集群管理系统,他管理的对象就是各个宿主机上基于Docker创建的无数容器,主要职责是容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。他主要管理容器的运行状态,并且控制容器与外界的通信,类似的容器管理平台还有像Compose,Marathon,Swarm,Mesos等等,最后附上K8S与Docker的系统结构图:
Docker与K8S

这篇关于技术三观之老黄谈物理机、虚拟机以及Docker的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/199492

相关文章

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名