揭开容器的神秘面纱:帮助初学者深入了解容器技术

戳蓝字“CSDN云计算”关注我们哦!


本文转载自:Docker 


640?


简介

640?


无论你是学生,还是公司的开发人员,或是软件爱好者,相信你都听说过容器。 你可能还听说容器是轻量级虚拟机,但这究竟意味着什么,容器究竟是如何工作的,以及它们为什么如此重要呢?
本文将带你深入了解容器,它们的关键技术思想,以及它们的应用。 除了计算机科学的基本概念之外,你不需要该领域的其它任何先决知识。


内核和操作系统

640


你的笔记本电脑以及其它所有计算机都是基于CPU,持久存储(磁盘驱动器,SSD),内存,网卡等硬件构建的。
要与此硬件进行交互,操作系统中被称为内核的软件将充当硬件与系统其余部分之间的桥梁。内核负责调度要运行的进程(程序),管理设备(在磁盘和内存上读写地址)等等。
操作系统的其余部分用于引导和管理用户进程的运行用户空间,并将不断与内核进行交互。
640?内核是操作系统的一部分,并与硬件接口。 整个操作系统都位于“内核空间”中,而用户程序则位于“用户空间”中。 内核空间负责管理用户空间。


虚拟机

640?


假定你有一台运行MacOS的计算机和一个可以在Ubuntu上运行的应用程序。一个常见的解决方案是在运行Ubuntu的MacOS计算机上启动虚拟机,然后在那里运行你的程序。
虚拟机由某些特定的硬件和内核虚拟化组成,运行客户操作系统。称为管理程序的软件创建虚拟化硬件,其可以包括虚拟磁盘,虚拟网络接口,虚拟CPU等。虚拟机还包括可以与此虚拟硬件通信的宾客内核。
管理程序可以托管,这意味着它是一些在主机操作系统(MacOS)上运行的软件,如示例中所示。它也可以是裸机,直接在机器硬件上运行(替换你的操作系统)。无论哪种方式,管理程序方法都被认为是重量级的,因为它需要虚拟化多个部分(如果不是全部硬件和内核)。
当同一台机器上需要有多个隔离组时,为每个组运行一个VM太繁重且浪费资源,不是一个好方法。
640?开销不按比例
VM需要硬件虚拟化才能实现机器级隔离,而容器则只需要在同一操作系统内进行隔离操作。 随着隔离空间数量的增加,开销差异变得非常明显。 普通的笔记本电脑可以运行数十个容器,但很难运行一台VM。


cgroups

640


2006年,Google的工程师发明了Linux“控制组”,缩写为cgroups。这是Linux内核的一项功能,可隔离和控制用户进程的资源使用情况。
这些进程可以放入命名空间,实质上是共享相同资源限制的进程集合。计算机可以有多个命名空间,每个命名空间都具有内核强制执行的资源属性。
我们可以管理每个命名空间的资源分配,以便限制一组进程可以使用的总CPU,RAM等的数量。例如,后台日志聚合应用程序可能需要限制其资源,以免意外地压倒它正在记录的实际服务器。
虽然不是原始功能,但Linux中的cgroup最终被重新设计为包含命名空间隔离的功能。命名空间隔离本身并不新鲜,Linux已经有多种命名空间隔离。一个常见的例子是进程隔离,它将每个单独的进程分开并防止诸如共享内存之类的事情。
cgroup隔离是一种更高级别的隔离,可确保cgroup命名空间中的进程独立于其他命名空间中的进程。下面概述了一些重要的命名空间隔离功能,为我们对容器的隔离奠定了基础。
  • PID(进程标识符)命名空间:这可确保一个命名空间内的进程不知道其他命名空间中的进程。

  • 网络命名空间:隔离网络接口控制器,iptables,路由表和其他低级网络工具。

  • 挂载命名空间:已挂载文件系统,因此命名空间的文件系统范围仅限于已挂载的目录。

  • 用户名空间:将命名空间内的用户限制为仅限该命名空间,并避免跨命名空间的用户ID冲突。


简单地说,每个命名空间看起来都是它自己的机器。


Linux 容器

640?


Linux cgroups为一种名为Linux容器(LXC)的技术铺平了道路。 LXC实际上是我们今天所知的第一个实现容器的主要实现,利用cgroup和命名空间隔离来创建具有独立进程和网络空间的虚拟环境。
从某种意义上说,这允许独立和隔离的用户空间。 容器的概念直接来自LXC。 事实上,早期版本的Docker直接构建在LXC之上。
Docker
Docker是最广泛使用的容器技术,也是大多数人在引用容器时的意思。 虽然还有其他开源容器技术(如CoreOS的rkt)和大型公司构建自己的容器引擎(如谷歌的lmctfy),但Docker已成为容器化的行业标准。 它仍然建立在Linux内核和最近的Windows提供的cgroups和命名空间之上。640图片来源:Docker
Docker容器由多层镜像组成,二进制文件一起打包到一个包中。 基本镜像包含容器的操作系统,该操作系统可以与主机的操作系统不同。
容器的操作系统是镜像形式。 这不是主机上的完整操作系统,不同之处在于镜像只是操作系统的文件系统和二进制文件,而完整的操作系统包括文件系统,二进制文件和内核。
在基础镜像的顶部是多个镜像,每个镜像构建容器的一部分。 例如,在基本镜像的顶部可以是包含apt-get依赖性的镜像。 最重要的可能是包含应用程序二进制文件的镜像,依此类推。
很酷的部分是如果有两个带有镜像层a,b,c和a,b,d的容器,那么你只需要在本地和存储库中存储每个镜像层a,b,c,d的一个副本。 这是Docker的联合文件系统。
640?
由散列标识的每个镜像只是构成容器的许多可能镜像层之一。但是,容器仅由其顶级镜像标识,该镜像具有对父镜像的引用。此处显示的两个顶级镜像(镜像1和镜像2)共享前三个图层。镜像2具有两个附加的配置相关层,但与镜像1共享相同的父镜像。
引导容器时,将从repo下载镜像及其父镜像,创建cgroup和命名空间,并使用该镜像创建虚拟环境。在容器内,镜像中指定的文件和二进制文件似乎是整个计算机中的唯一文件。然后启动容器的主进程,并将容器视为活动状态。
Docker还有其他一些非常酷的功能,例如写入时复制,卷(容器之间的共享文件系统),docker守护程序(管理机器上的容器),版本控制的存储库(如容器的Github)等等。要了解有关它们的更多信息并查看有关如何使用Docker的一些实际示例,这篇Medium上的文章[1]非常有用。
640命令行客户端(1)告诉计算机上的进程名为docker daemon(2)该做什么。 守护程序从注册表/存储库中提取图像(3)。 这些镜像在本地计算机上缓存(4),并且可以由守护程序启动以运行容器(5)。 图片来源:Docker。


为什么使用容器

640


除了工艺隔离外,容器还具有许多其他有益的特性。
容器可作为一个独立的单元,可以在任何支持它的地方运行。在每个实例中,容器本身都是完全相同的。如果主机操作系统是CentOS,Ubuntu,MacOS,甚至是像Windows这样的非UNIX系统都无关紧要——从容器内部看操作系统将是容器指定的任何操作系统。因此,你可以确定你在笔记本电脑上构建的容器也将在公司的服务器上运行。
容器还充当标准化的工作或计算单元。一个常见的范例是每个容器运行单个Web服务器,数据库的单个分片或单个Spark工作程序等。然后,为了扩展应用程序,你只需要扩展容器的数量。
在这个范例中,每个容器都有一个固定的资源配置(CPU,RAM,线程数等),并且扩展应用程序需要只扩展容器的数量而不是单个资源原语。当应用程序需要按比例放大或缩小时,这为工程师提供了更容易的抽象。
容器也是实现微服务架构的一个很好的工具,每个微服务只是一组协作容器。例如,可以使用单个主容器和多个从容器来实现Redis微服务。
这种(微)服务导向架构具有一些非常重要的属性,使工程团队可以轻松创建和部署应用程序(有关更多详细信息,请参阅我之前的文章[2])。


编排

640?


自从Linux容器出现以来,用户一直试图在许多虚拟机上部署大型应用程序,其中每个进程都在自己的容器中运行。这样做需要能够在数百个虚拟机中有效地部署数十到数千个容器,并管理他们的网络,文件系统,资源等。今天Docker使它更容易,因为它公开了抽象来定义容器网络,文件卷系统,资源配置等。
但是仍然需要一个工具来:
  • 真实地采取规范并将容器分配给机器(调度)

  • 真实地通过Docker在机器上启动指定的容器

  • 处理升级/回滚/系统不断变化的性质

  • 应对容器崩溃等故障

  • 创建集群资源,如服务发现,VM间网络,集群入口/出口等。


这组问题涉及在一组(可能是瞬态的或不断变化的)容器之上构建的分布式系统的编排,人们已经建立了一些非常奇妙的系统来解决这个问题。
在下一篇文章中,我将深入讨论Kubernetes(主流的开源编排器)的实现,以及两个同样重要但鲜为人知的Mesos和Borg。
相关链接:
  1. https://medium.freecodecamp.org/a-beginner-friendly-introduction-to-containers-vms-and-docker-79a9e3e119b

  2. https://hackernoon.com/how-microservices-saved-the-internet-30cd4b9c6230?gi=d7bc571ea278



推荐阅读

  • 5G大规模商用来临之前,你必须知道的几个知识点

  • “离开360时,它只给了我一块钱”

  • AI找Bug,一键快速预测

  • 原子互换:一统公链江湖的神来之笔

  • 春晚鬼畜 B 站日排行最高,赵本山:我的时代还没有结束!

  • PDF翻译神器,再也不担心读不懂英文Paper了

  • 新闻联播也可以拿来做数据分析?

  • 高晓松侃5G!2019开年大讲揭示运营商的秘密


1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。

640?wx_fmt=png喜欢就点击“好看”吧!

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

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

相关文章

微服务精华问答 | 微服务有什么优点和不足呢?

戳蓝字“CSDN云计算”关注我们哦!过去几年来,“微服务架构”这个术语出现了,它描述了一种将软件应用程序设计为可独立部署的服务套件的特定方式。尽管这种架构风格没有确切的定义,但围绕业务能力,自动化部署&#xff0…

Gartner预测2019年全球IT支出将达到3.8万亿美元

戳蓝字“CSDN云计算”关注我们哦!【2019年1月29日】全球领先的信息技术研究和顾问公司Gartner表示,2019年全球IT支出将达到3.76万亿美元,较2018年增长3.2%。Gartner研究副总裁John-David Lovelock表示:“尽管经济衰退传闻、英国脱…

4个最受欢迎的大数据可视化工具!

戳蓝字“CSDN云计算”关注我们哦!想像阅读书本一样阅读数据流?这只有在电影中才有可能发生。 在现实世界中,企业必须使用数据可视化工具来读取原始数据的趋势和模式。大数据可视化是进行各种大数据分析解决的最重要组成部分之一。 一旦原始数…

边缘计算与物联网精华问答 | 边缘计算和物联网有什么关系?

戳蓝字“CSDN云计算”关注我们哦!随着物联网时代到来,云计算平台将面临着海量设备接入、海量数据等高难度挑战,这使得云计算中心实时返回数据决策也变成了不可能的任务。于是,边缘计算开始进入到公众的视线。1Q:边缘计算和物联网有…

要闻君说:FaceTime的服务究竟坑有多大?CNCF 技术监督委员会首添中国面孔,来自阿里!高通华为暂和解……...

关注并标星星CSDN云计算每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨,大家好!偶是要闻君。终于等到了工作日的最后一天,内心狂喜,想必有的看官已经放假啦。十分感谢小伙伴们长达一月的陪伴&#xff0c…

C语言 fprintf 函数 - C语言零基础入门教程

目录 一.fprintf 函数简介二.fprintf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fprintf 函数简介 fprintf 是 C / C 中的一个格式化库函数,位于头文件 中,其作用是格式化输出到一个流文件中&#xff1…

云漫圈 | 漫画:什么是加密算法?

戳蓝字“CSDN云计算”关注我们哦!文章来自:程序员小灰作者:小灰加密算法的历史加密算法最早诞生在什么时候?是在计算机出现之后吗?不不不,早在古罗马时期,加密算法就被应用于战争当中。在大规模…

深入浅出大数据:到底什么是Hadoop?

戳蓝字“CSDN云计算”关注我们哦!作者:小枣君来源:鲜枣课堂1998年9月4日,Google公司在美国硅谷成立。正如大家所知,它是一家做搜索引擎起家的公司。无独有偶,一位名叫Doug Cutting的美国工程师&#xff0c…

趣挨踢 | 30 个让程序员崩溃的瞬间,笑死我了!

戳蓝字“CSDN云计算”关注我们哦!文章来自:程序员最幽默前方高能,看完不笑的来找我。我自己看了好几遍,程序员真的是一群逗比的人才!1. 公司实习生找 Bug2. 在调试时,将断点设置在错误的位置3. 当我有一个很…

“史上最强春节档”来袭!数据解读值得看的影片是......

戳蓝字“CSDN云计算”关注我们哦!作者介绍:徐麟,目前就职于互联网公司数据部,哥大统计数据狗,从事数据挖掘&分析工作,喜欢用R&Python玩一些不一样的数据个人公众号:数据森麟&#xff08…

大厂必问的分布式究竟是什么鬼?

戳蓝字“CSDN云计算”关注我们哦!新的一年又开始了,各大招聘咨询机构都会对过去一年市场上的人才供需进行盘点。根据高端招聘平台100 offer发布的Java人才盘点报告,在过去的2018年,Java仍然是最流行、招聘供需量最大的技术语言。在…

为什么不用原生Spring-Cloud-Config

戳蓝字“CSDN云计算”关注我们哦!引言近几年传统应用架构已经逐渐朝着微服务架构演进。那么随着业务的发展,微服务越来越庞大,此时服务配置的管理变得会复杂起来。为了方便服务配置文件统一管理,实时更新,配置中心应运…

cesium实现区域贴图及加载多个gif动图

1、cesium加载多个gif动图 Cesium的Billboard支持单帧纹理贴图,如果能够将gif动图进行解析,获得时间序列对应的每帧图片,然后按照时间序列动态更新Billboard的纹理,即可实现动图纹理效果。为此也找到了相对于好一点的第三方库libg…

DevOps“兵器”60样,你都会使哪几样?

戳蓝字“CSDN云计算”关注我们哦!编前按:获得开发者社区支持的自动化,开源的工具是大家梦寐以求的。这里列举了 60 多款最棒的开源工具,可以帮助你很好的实行 DevOps。一、开发工具版本控制&协作开发1.版本控制系统 GitGit是一…

云漫圈 | 腾讯面试,我竟然输给了final关键字

戳蓝字“CSDN云计算”关注我们哦!作者:乔戈里来源:程序员乔戈里腾讯面试现场——————final 在 Java 中是一个保留的关键字,可以声明变量、方法、类。什么是final变量 / 类 / 方法?任何变量前被 final 修饰就是 fin…

学习微服务网关zuul,看这篇就够了

戳蓝字“CSDN云计算”关注我们哦!作者:爱撒谎的男孩 原文:https://chenjiabing666.github.io/2018/12/25/zuul%E6%9C%8D%E5%8A%A1%E7%BD%91%E5%85%B3/本文系读者投稿,已获作者原创授权。如果你有好文章,可以戳这里投稿…

写给程序员的裁员防身指南

戳蓝字“CSDN云计算”关注我们哦!大家都知道 18 年底许多大公司都开始了「人员优化」动作,不仅仅美团等大厂有所行动,就连一些平时求贤若渴的小公司也有所动作。本来我以为关于劳动法的事情,许多人应该多多少少都应该了解。但最近…

使用Kubernetes和Docker将Spring Boot与MongoDB作为容器部署

戳蓝字“CSDN云计算”关注我们哦!对于本教程,您将拥有一个Docker化Spring-Boot实例程序,该应用程序与MongoDB通信以获取GET/POST API请求,并部署在Kubernetes集群中。前提条件MinikubeKubectlDockerMavenDocker是一个具有"社…

5种数据分析常用的思维方法!

戳蓝字“CSDN云计算”关注我们哦!转自:中国统计网来源:网络大数据在数据分析中,数据分析思维是框架式的指引,实际分析问题时还是需要很多“技巧工具”的。就好比中学里你要解一元二次方式,可以用公式法、配…

分布式系统与消息投递

戳蓝字“CSDN云计算”关注我们哦!原文:https://draveness.me/message-delivery消息是一个非常有趣的概念,它是由来源发出一个离散的通信单元,被发送给一个或者一群接受者,无论是单体服务还是分布式系统中都有消息的概念…