🧨🧨🧨
docker 在何种背景下诞生,
为什么好多人都在使用docker作为服务部署的实现方式,
docker未来有什么样的前景,以及为什么要学习并使用docker呢
🎗️🎗️🎗️
一、设计初衷
1、拜访长老
多年以前,在一个风雨交加的夜晚,一个叫做docker的年轻人,来到Linux帝国,拜会帝国的长老
他对长老说:“天下程序员苦于应用部署环境久矣,我想要改变这一现状,希望长老您能帮帮我。”
长老回答:“小小年纪,口气不小。你有何所求,坐下来慢慢说,我愿闻其详。”
docker坐下后说道:“当今天下,开发、测试、部署,种种库的依赖纷繁复杂,版本之间的差别,再加上测试环境与部署环境不一致,程序员们饱受其苦,是时候改变这一状态了。”
docker继续说道:“我想做一个虚构的容器,让程序运转此中,将它们需要的库打包,以便在不同的机器移植后,仍可以提供一致的运行情况,彻底解开程序员们身上的束缚。”
Linux长老听闻后,轻轻点头:“嗯,年轻人主意倒是不错,不过,听你所说,貌似虚拟机就能解决这个需求。”
编辑
docker连忙摇头说道:“长老所说不错,虚拟机的确能够解决这个问题,但虚拟机体积大,且笨重如牛,起步就是以G为单位,因为虚拟机要运行一个完整的操作系统,所以格外的占用资源,一台机器上还没等跑程序,光跑了几台虚拟机就已经把性能拖垮了,我想要做一个轻量级的虚拟容器,只提供一个运行环境,不需要运行一个操作系统,所有容器中的内核还是和外面的宿主机共用的,这样就可以批量复制多个容器,轻便又快捷。”
Linux长老站了起来,在房间内来回踱步,思考半晌后,突然高兴说道:“不错,真是个好主意,这个项目我投了。”
docker一听,喜上眉梢,“要实现我说的目标,可不是一件简单的事情,还望长老助我一臂之力。”
编辑
“你稍等”,Linux长老转身回到内屋,不一会走了出来,手上还拿了一些东西。
“年轻人,回去以后,放手去干吧,我赐你三个锦囊,若遇到问题,可依次拆开,必有大用。”
2、研发之路
docker高兴的收下了锦囊,拜别Linux长老,消失在了夜色中
自此,docker回到家后,开始了他的虚拟容器的开发之路,日后响彻大江南北的docker容器,正式扬帆起航。🚩🚩🚩
然而,想要做成一件事,向来都不是容易的, 很快,docker就遇到了他的第一个问题
2-1、 chroot & pivot_root
作为一个容器,首要任务就是限制容器中进程的活动范围——能访问的文件系统目录。决不能让容器中的进程去肆意访问真实的系统目录,得将他们的活动范围划定到一个指定的区域,不得越雷池半步!
那么该如何限制这些进程的活动区域呢?
苦思良久后,Docker拆开了Linux长老送给他的第一个锦囊,上面写着两个函数的名字:chroot & pivot_root。
docker从未使用过这两个函数,于是在Linux帝国四处打听它们的作用。后来得知,通过这两个函数,可以修改进程和系统的根目录到一个新的位置。
docker大喜,长老真是诚不欺我!
有了这两个函数,docker开始想办法怎么来“伪造”一个文件系统来欺骗容器中的进程。
[root@master1 ~]# cd / [root@master1 /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
为了不露出破绽,docker很聪明用操作系统镜像文件挂载到容器进程的根目录下,变成容器的rootfs和真实系统目录一模一样,足可以以假乱真。
2-2、 namespace
🧨🧨🧨文件系统的问题终于解决了
但docker不敢懈怠,因为在他的心里,还有另一个大问题一直困扰着他
那就是如何把真实系统所在的世界隐藏起来,别让容器中的进程看到。
比如进程列表、网络设备、用户列表这些,是决不能让容器中的进程知道的得让他们看到的世界是一个干净如新的系统。
docker心里清楚,自己虽然叫容器,但这只是表面现象,容器内的进程其实和自己一样,都是运行在宿主操作系统上面的一个个进程,想要遮住这些进程的眼睛,瞒天过海,实在不是什么容易的事情。
docker想过用HOOK的方式,欺骗进程,但实施起来工作太过复杂,兼容性差,稳定性也得不到保障,思来想去也没想到什么好的主意。
正在一筹莫展之际,docker又想起了Linux长老送给自己的锦囊,他赶紧拿了出来,打开了第二个锦囊,只见上面写着:namespace。
编辑
docker还是不解其中之意,于是又在Linux帝国到处打听什么是namespace。
经过一阵琢磨,docker总算是明白了,原来这个namespace是帝国提供的一种机制,通过它可以划定一个个的命名空间,然后把进程划分到这些命名空间。
而每个命名空间都是独立存在的,命名空间里面的进程都无法看到空间之外的进程、用户、网络等等信息。
这不正是docker想要的吗?真是踏破铁鞋无觅处,得来全不费功夫!
docker赶紧加班加点,用上了这个namespace,将进程的“视野”锁定在容器规定的范围内,如此一来,容器内的进程彷佛被施上了障眼法,再也看不到外面的世界。
编辑
2-3、 CGroup
🚩🚩🚩文件系统和进程隔离的问题都解决了,docker心里的石头总算是放下了。心里着急着想测试自己的容器,可又好奇这最后一个锦囊写的是什么,于是打开了第三个锦囊,只见上面写着:CGroup。
这又是什么东西?docker仍然看不懂,不过这一次管不了那么许多了,先运行起来再说。
试着运行了一段时间,一切都在docker的计划之中,容器中的进程都能正常的运行,都被他构建的虚拟文件系统和隔离出来的系统环境给欺骗了,docker高兴坏了!
很快,docker就开始在Linux帝国推广自己的容器技术,结果大受欢迎,收获了无数粉丝,连nginx、redis等一众大佬都纷纷入驻。
然而,鲜花与掌声的背后,docker却不知道自己即将大难临头。
这天,Linux帝国内存管理部的人扣下了docker准备“处决”掉他,docker一脸诧异的问到,“到底发生了什么事,为什么要对我下手?"
管理人员厉声说到:“帝国管理的内存快被一个叫Redis的家伙用光了,现在要挑选一些进程来杀掉,不好意思,你中奖了
危险了!除了内存,还有CPU、硬盘、网络等等资源,如果某个容器进程霸占着CPU不放手,又或者某个容器进程疯狂写硬盘,那迟早得连累到自己身上。看来必须得对这些进程进行管控,防止他们干出出格的事来。
这时候,他想起了Linux长老的第三个锦囊:CGroup!说不定能解这燃眉之急。
经过一番研究,docker如获至宝,原来这CGroup和namespace类似,也是Linux帝国的一套机制,通过它可以划定一个个的分组,然后限制每个分组能够使用的资源,比如内存的上限值、CPU的使用率、硬盘空间总量等等。系统内核会自动检 查 和 限 制 这 些 分组中的 进程 资 源使用量。
编辑
😸😸😸
Linux长老这三个锦囊简直太贴心了,一个比一个有用,docker内心充满了感激。
随后,docker加上了CGroup技术,加强了对容器中的进程管控,这才松了一口气。
在Linux长老三个锦囊妙计的加持下,docker可谓风光一时,成为了Linux帝国的大名人。
👻👻👻
二、docker诞生
1、dotCloud 成立
🚩 2008年,一家名为 dotCloud 的公司成立,总部位于美国旧金山,该公司最初提供的是面向开发者的多语言云平台服务,允许开发者在云上部署、管理和扩展应用程序。他们的目标是利用容器技术创建一种大规模的创新工具,让任何人都可以使用。
🚩 2010年,dotCloud获得了创业孵化器Y Combinator的支持,并开始吸引到一些真正的投资。在接下来的3年中,dotCloud内部孵化了一款名为Docker的产品。
🚩 2013年初,dotCloud 公司创始人之一的 Solomon Hykes 发起了一个 Docker 的开源项目,docker的源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。docker是基于LXC的高级容器引擎,提供了一种用容器轻松创建、部署和运行应用程序的工具。docker的底层技术是Linux容器技术,可以提供轻量级的虚拟化,以隔离进程和资源。
编辑
docker的诞生背景是dotCloud公司需要一种方便的方式来创建和管理容器,于是开发了一套内部工具,之后被命名为“docker”。docker的理念是想通过对应用封装、分发、部署和运行生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。
随着docker的火爆,dotCloud公司正式决定更名为docker股份有限公司。docker的标志设计得十分有意思,起初docker公司是一家名为dotCloud的PaaS提供商,为了方便创建和管理这些容器,dotCloud开发了一套内部工具,之后被命名为“Docker”。
2、 docker标志
关于 docker 的标志设计是其品牌形象的一部分,它传达了一些重要的意义和理念:
船舶容器的象征: docker 标志的最显眼的部分是一个带有船舶轮廓的容器。这个图标象征着集装箱,容器的概念是 docker 技术的核心。它指的是容器化技术的概念,即将应用程序及其所有依赖项封装在一个独立的环境中。 编辑
简洁性和易识别性: docker 标志设计简洁而又易于识别,它以简单的线条和形状组成,这有助于让人们很容易地将其与 docker 技术联系起来。
现代感和创新: docker 标志的设计风格传达了现代感和创新性。这反映了 docker 作为一种革命性的技术,它改变了软件开发和部署的方式。
开放性和社区: docker 标志的设计也传达了开放性和社区精神。docker 是一个开源项目,它受到全球开发者社区的支持和贡献。标志设计的简洁性和易于理解性也有助于向更广泛的社区传达 docker 的理念和价值观。
总的来说,docker 标志的设计是为了传达 docker 技术的核心概念、品牌形象以及其在现代软件开发领域中的地位和重要性。它是 docker 公司和社区的一种象征,同时也是 docker 技术的视觉化代表。
3、 docker发展里程碑
- 2014年6月,docker发布了1.0版本,主要解决了之前版本的一些问题,增强了安全性和稳定性,并引入了Docker Hub这个中央仓库。
- 2015年4月,docker发布了1.6版本,主要引入了Docker Compose这个工具,可以帮助用户管理和运行多个容器。
- 2016年7月,docker发布了1.12版本,主要引入了Docker Swarm这个工具,可以帮助用户管理和编排多个docker容器。
- 2018年11月,docker发布了18.09版本
编辑
三、 docker发展前景
- 首先,随着云计算的普及和数字化转型的加速,越来越多的企业和组织需要将应用程序迁移到云端。而Docker作为一种轻量级的容器技术,可以为应用程序提供更好的隔离和安全性,同时也使得应用程序的部署和管理更加简单和高效。因此,Docker在云计算领域的应用前景非常广阔。
- 其次,随着物联网和边缘计算的发展,越来越多的数据需要在边缘设备上进行处理和存储。而Docker可以提供一种容器化的解决方案,将数据处理和存储应用进行容器化,部署在边缘设备上,使得数据的处理在边缘端就可以完成,从而减少了数据传输和处理的延迟,提高了应用的响应速度和稳定性。因此,Docker在边缘计算领域的应用前景也非常广阔。
- 此外,随着容器技术的不断发展,Docker也在不断完善和更新。Docker持续改进和更新其技术,完善核心功能,增加新功能并解决安全和稳定性问题。同时,Docker社区也在不断发展壮大,越来越多的企业和开发者加入到这个社区中,共同推动容器技术的发展。
四、总结
Docker是一种开源的容器化技术,它使得应用程序可以在任何Docker环境中快速、可靠地运行,而无需进行大量的配置和安装工作。由于其强大的功能和广泛的应用,Docker的发展前景非常广阔。其在云计算、边缘计算等领域的应用将会越来越广泛,同时随着技术的不断完善和更新,Docker也将会在未来继续保持其领先地位。