程序员修神之路--容器技术为什么会这么流行(记得去抽奖)

菜菜哥,你上次讲的kubernetes我研究了一下,你再给我讲讲docker呗

docker可很流行呀

kubernetes是容器编排技术,容器不就是指的docker吗?

docker可不等于容器哦,docker只算是容器的一种吧,算了容器的典型代表

容器的诞生

在传统的软件部署方式中,程序员需要把要发布的应用程序打成包发给运维人员,然后由运维人员在生产环境进行部署。当随着应用的版本迭代越来越多,应用的依赖库版本错综复杂,往往会出现开发环境和生产环境不一致的情况发生,而且由于多数情况下采用微服务的架构,每个团队都有可能使用不同版本的依赖库,并有可能在升级的时候替换掉他们,因而同一个应用程序采用相同版本的依赖库是多么的重要。

当应用程序比较少或者都是一些单体应用的时候,可以利用虚拟机来隔离每个服务,通过虚拟机的虚拟化技术来为每个应用程序提供不同的运行环境。但是当拆分为微服务之后,每个服务会变的小而多,这个时候如果为每个应用程序分配一个虚拟机,资源耗费是相当多的,但是每个虚拟机上运行多个微服务又会发生依赖库版本的问题,如果有一种起到类似虚拟机隔离作用,但是成本比虚拟机低很多的技术该有多好?

容器技术

得益于linux的容器技术,现代开发者已经由传统的虚拟机方式转向linux容器技术。容器类似虚拟机,但比虚拟机开销要小的多,并且同样把每个应用都隔离开来。容器技术允许你在同一台服务器上运行多个服务,而且还可以根据每个服务提供不同的运行环境。

虚拟机中的进程运行在虚拟机的操作系统中,而运行在容器中的进程实际是运行在宿主机的操作系统中,只是表面看来好像运行在容器的沙盒一样,但实际上确实是和其他进程相互隔离的。

linux之所以能实现容器这种功能,得益于它的命名空间和控制组。linux命名空间时每个进程相互隔离,只能看到它自己的系统资源,例如:文件,进程,网络等,而linux的控制组技术能够限制每个进程可以使用的资源的最大量。一个技术进行隔离,一个技术进行限制,这就导致了容器技术要比虚拟机要灵活的多。

虚拟机和容器

一个虚拟机的正常运行,需要运行自己的一系列系统进程,只是这些系统进程就耗费了大量资源。容器和虚拟机相比较就显得轻量的多,它允许在相同配置的硬件基础上运行更多数量的应用。虽然容器本身也有消耗,但是和虚拟机系统的消耗比起来要小的多。

虚拟机是利用软件技术将物理硬件虚拟化为多个虚拟硬件资源,从而被每个虚拟机的操作系统使用。虚拟机里的进程会进行虚拟机的系统调用,虚拟机的指令会通过软件技术变为宿主机上真正的cpu指令,而容器中的进程执行的指令不需要任何的虚拟化过程,直接会被cpu执行,所以单纯在执行指令的过程中,虚拟机要比容器的执行过程要长,资源耗费要多。

docker介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker容器平台的出现把linxu容器化技术推向了一个高潮,它不仅简化了程序部署的方式,更简化了打包应用和依赖,使容器真正做到了在不同的操作系统之间移植,甚至一个完整的操作系统也可以被打包成一个可移植的镜像。

运行docker包的前提是,目标机器一定要运行docker。

当你的应用被打包成docker镜像之后,无论在什么操作系统中运行,它都能看见相同的文件,相同的依赖库,因为这些依赖库已经被一起打包到了docker镜像中,即使目标机器上安装了正确的版本的依赖库,它也会只用镜像中的依赖库,这就是程序员期盼的无论何时何地的环境一致性呀

END

●程序员修神之路--有状态的服务其实可以做更多的事情

●程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁

●程序员修神之路--设计一套RPC框架并非易事

●程序员过关斩将--要想获取我的用户信息,就得按照规矩来

●程序员过关斩将--更加优雅的Token认证方式JWT

●程序员过关斩将--cookie和session的关系其实很简单

●程序员修神之路--用NOSql给高并发系统加速

●程序员修神之路--高并发系统设计负载均衡架构

●程序员修神之路--做好分库分表其实很难之一(继续送书)

●程序员修神之路--做好分库分表其实很难之二(送书继续)

●程序员过关斩将--你为什么还在用存储过程?

●程序员过关斩将--小小的分页引发的加班血案

●程序员修神之路--问世间异步为何物?

●程序员修神之路--提高网站的吞吐量????

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

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

相关文章

经典排序算法(6)——直接选择排序算法详解

直接选择排序(Straight Select Sort)是一种典型的选择排序算法,通过不断选择序列中最大(小)的元素。 一、算法基本思想 (1)基本思想 直接选择排序的基本思想就是:不断从未排序队列中…

一篇文章看懂Git是什么以及如何简单的上手Git

本文来自DotNET技术圈作者:显杰1.Git是什么Git是目前世界上最先进的分布式版本控制系统什么是版本控制系统?好比设计师从开始设计第一个版本的设计稿开始:Demo > Demo1 > Demo2 > ... >Demo1001 > Demo最终版本 > Demo最终…

[翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构

作者:Samuele RescaServerless 技术为开发人员提供了一种快速而独立的方式将实现投入生产。这种技术在企业的技术栈中日益流行,自 2017 年以来,它一直是 ThoughtWorks 技术雷达的实验级别的技术[译注:技术雷达是 ThoughtWorks 每半…

经典排序算法(7)——堆排序算法详解

堆排序(Heap sort)是指利用堆(最大堆、最小堆)这种数据结构所设计的一种排序算法。堆是一个完全二叉树的结构,并同时满足如下性质:即子结点的键值或索引总是小于(或者大于)它的父节点…

经典排序算法(8)——归并排序算法详解

归并排序(Merge sort),是创建在归并操作上的一种有效的排序算法,效率为O(nlog n)。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。 一、算法基本思…

祝贺王远当选为中国区第二位 Teams MVP

今天一上班就传来喜讯,Microsoft Teams 大中华区技术社区专家委员会成员之一的王远成功当选了2020-2021年度微软最有价值专家(MVP),这是对他在基于Office 365的音视频会议系统(尤其是在Microsoft Teams)方面的深入研究…

经典排序算法(9)——桶排序算法详解

桶排序(Bucket sort)或所谓的箱排序,并不是比较排序,它不受到 O(nlogn) 下限的影响。 一、算法基本思想 (1)基本思想 桶排序工作的原理是将数组分到有限数量的桶子里,每个桶子再个别排序&#x…

[原]排错实战——使用process explorer替换任务管理器

前言 一般,我们会使用任务管理器查看系统中有哪些进程在运行,强制杀掉某个进程。可是系统自带的任务管理器功能有限,process explorer是一个功能更强大的工具。它可以让我们查看更多更详细的信息( 比如查看某个进程的父进程&#…

ABP vNext中使用开源日志面板 LogDashboard

ABP vNext 使用 logdashboard本文示例源码:https://github.com/liangshiw/LogDashboard/tree/master/samples/abpvnextABPABP是aspnetcore3.0的开源web应用程序框架,非常适合现代web应用程序。有关ABP的更多内容可以查看官方文档Logdashboard可以直接在基…

经典排序算法(10)——基数排序算法详解

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 一、算法基本思想 (1)基本思想 基数排序是基于桶排序来实现。通过键值的部分信息&#…

经典排序算法(11)——计数排序算法详解

计数排序(Counting sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(nk)(其中k是整数的范围),快于任何比较…

GitHub Actions,卧槽!牛批!

“ 阅读本文大概需要 19 分钟。 ”前段时间我更新了我的分布式爬虫管理框架—— Gerapy(话都说到这儿了打个广告,跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!,哇,哇,就是,哇…

平衡二叉树AVL详解

一、平衡二叉树的定义 平衡二叉树(Balanced Binary Tree)又被称为AVL树,它且具有以下性质: (1)它是一棵空树或它的左右两个子树的高度差的绝对值不超过1; (2)并且左右两个…

【壹个小技巧】一看就会的CI/CD :Github Actions

什么是 CI/CD?我这里先不说概念,先说一个平时开发的场景问题:我们平时开发一个项目,经常会遇到这些“小”问题:就是如何保证自己的项目是正确的,至少拿给别人的时候,可以编译运行的?或者说多人…

Hyper-V虚拟机自动添加检查点和导出备份

背景说明笔者使用Hyper-V在内部搭建了大量的环境和系统,比如:k8s内部集群Azure Devops Server(TFS>VSTS>Azure Devops Server)SharePoint…大部分基本上都是用于内部研究、测试等场景,但是为了避免很多麻烦,必要的备份还是必…

哈夫曼树详解

一、哈夫曼树的定义 (1)简单路径长度 所谓树的简单路径长度,是指从树的跟节点到每个节点的路径长度之和。 完全二叉树是简单路径长度更小的二叉树。 (2)加权路径长度 所谓树的加权路径长度,是指树中所以带…

深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json

原文:Deep-dive into .NET Core primitives, part 3: runtimeconfig.json in depth作者:Nate McMaster[1]译文:深入理解.NET Core 的基元(三) - 深入 runtimeconfig.json作者:Lamond Lu前情回顾深入理解.NE…

B-树、B+树、B*树详解

一、B树 B树是一种多路搜索树(并不是二叉的),性质如下: 1、定义任意非叶子结点最多只有M个儿子;且M>2; 2、根结点的儿子数为[2, M]; 3、除根结点以外的非叶子结点的儿子数为[M/2, M]&#…

微软正在开发基于Rust的安全编程语言

此前,微软表示正探索将 Rust 作为 C 和 C 的安全替代方案,并且也对外展示了使用 Rust 重写 Windows 组件的体验。根据微软的说法,Rust 是一种从根本上考虑安全性的编程语言,他们将尝试使用 Rust 重写各种产品,因为在过…

堆树(最大堆、最小堆)详解

一、堆树的定义 堆树的定义如下: (1)堆树是一颗完全二叉树; (2)堆树中某个节点的值总是不大于或不小于其孩子节点的值; (3)堆树中每个节点的子树都是堆树。 当父节点的键…