docker是什么

docker的第一篇博客应该是一个通俗易懂的扫盲贴。

本篇博文为大家介绍为什么需要docker这样一个东西,以及docker是什么。通过IT发展遇到了什么、docker又是如何去解决的,从而来阐述docker的作用。

关于docker是什么,官方的解释是:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

看上去是不是有点懵逼,下面用通俗的语言去阐述docker是什么,有什么用。

场景模拟:物品运输

举这么一个简单的例子:比如你有一堆东西要从A运到B(在没有集装箱的情况下),包括衣服、书、水果、颜料、化学物品;你需要考虑哪些问题?

1、由于他们的形状各不相同,在没有集装箱的情况下,你可能要考虑他们的摆放顺序,如多汁水果不要被重物压坏。--------------类比:避免服务对资源的过度抢占。

2、运输批次的问题,因为某些货物可能不宜放在一起,如水果和化学物品最好能装不同的车---------------------类比:资源的隔离,防止冲突

3、运输工具转变后可能要遇到重新摆列的问题,因为货车、飞机、轮船的仓储结构是不尽相同的。--------------------类比:代码运行环境的依赖,代码的移植

扫描二维码关注公众号,回复: 2732777 查看本文章

对应地,在软件开发环境中,开发、测试、运维人员不得不考虑以下因素,docker也恰恰解决了这些问题

1、  资源数额的抢占

如何避免服务/程序/进程占用过量的资源,影响物理机上的其他的程序。docker利用cgroup机制来实现资源限制、优先级分配、资源统计、任务控制等功能;通俗地讲就是我们可以利用docker来控制服务所能够调动的资源,docker好比一个箱子,我们把服务装到箱子里,你可以去控制这个箱子有多大,来决定服务能用多少资源;

2、  资源的隔离,避免保证进程/服务之间资源冲突

同一台宿主机上可能会运行多个程序,这些程序可能有不同的依赖环境,要让他们在宿主机中共存可能会很麻烦;比如IIS和Apache访问端口可能会冲突,此时你可能就需要去隔离.net和PHP所开发的网站;你可以在物理机上创建虚拟机来实现隔离应用的需求,但是docker同样能胜任,而且比虚拟机所需要的资源要少得多。

3、  如何保证开发、测试、运维环境的一致性、代码的可移植性

可能开发环境用的是ubuntu、运维环境是centos、测试环境是windows(当然这种极端情况可能不多);但即使操作系统版本相同,想要保持共同的代码运行环境也是极难的。docker好比一个集装箱,我们可以把代码运行时所需要的库、依赖包等环境一起打包封装进docker,这样开发就可以把这个容器直接分发给测试、运维,他们只要在机器上运行docker就能获得与开发环境等价的运行环境。

除了以上三点,docker还有一些其他优势

1、  资源的利用率与启停速度更胜虚拟机

虚拟机需要在硬件之上单独运行一个虚拟化层,然后在虚拟机上单独建立操作系统;而docker未必有完整的操作系统,他是与宿主机共享内核的,因此在资源调度效率方面要优于虚拟机。但是对应的,隔离性会比虚拟机要差一些。

2、  开发、运维的逻辑职责更加清晰

容器技术使得开发人员只需要关心容器中运行的应用环境,运维人员只需要关注如何去管理容器,职责更加分明;docker使得开发环境与生产运行环境保持了一致性,减少“开发时一切正常,一定是运维的问题”的现象。

猜你喜欢

转载自blog.csdn.net/syaziou/article/details/79329579