这篇文章给大家介绍如何理解docker,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
随着用户的需求越来越多样,系统的规模越来越庞大,运行的软件越来越复杂,环境配置问题所造成的的麻烦也层出不穷等等,为了解决这些问题,开源社区推出过不少优秀的工具。这些工具虽然在某些程度上确实能解决部分问题,但是始终没有一种方案能带来“一劳永逸”的效果。
伴随着信息技术的飞速发展,虚拟化的概念早已经广泛应用到各种关键场景中。从20世纪60年代IBM推出的大型主机虚拟化,到后来以Xen、KVM为代表的虚拟机虚拟化,在到现在以Docker为代表的容器技术,虚拟化技术自身也在不断进行创新和突破。传统来看,虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现。而容器技术则更为优雅,它充分利用了操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。Docker正式众多容器技术中的佼佼者。
Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”。可以实现通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,处处运行”。这里的应用组件,既可以是一个Web应用、一个变异环境、也可以使一套数据库平台服务,甚至一个操作系统或集群。
此外,现在主流的操作系统包括Linux各大的发行版、macOS、Windows等都已经支持Docker。例如,Redhat RHEL6.5/CentOS 6.5、Ubuntu 16.04以及更新的版本,都已经在官方软件源中默认带有Docker软件包。此外,各大云服务提供商也纷纷退出了基于Docker的服务。种种迹象表明Docker已经是一个非常成熟的虚拟化技术了。
基于Linux平台上的多项开源技术,Docker提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流云平台。可以说,Docker首次为应用的开发、运行和部署提供了“一站式”的使用解决方案。
Docker提供了各种容器管理工具(如分发、版本、移植等),让用户无须关注底层的操作,更加简单明了的管理和使用容器;其次,Docker通过引入分层文件系统构建和高效的镜像机制,降低了迁移难度,极大地改善了用户体验。用户操作Docker容器就像操作应用自身一样简单。
早期的Docker代码实现是直接基于LXC的。自0.9版本开始,Docker开发了libcontainer项目作为更广泛的容器驱动实现,从而替换掉了LXC的实现。简单的讲,读者可以将Docker容器理解为一种轻量级的沙盒(sandbox)。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当做应用本身也没有任何问题。
在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的显示;同时必须是“任何时间任何地点”可获取的。因此开发者们需要一种新型的创建分布式应用程序的方式,快速分发和部署,而这正是Docker所能够提供的最大优势。
举个简单的例子,假设用户试图基于最常见的LAMP(Linux+Apache+MySQL+PHP)组合来构建网站。按照传统的做法,首先需要安装Apache、MySQL和PHP以及他们各自运行所依赖的环境;之后分别对他们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行功能测试,看是否功能正常;如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险。可以想想,如果应用数目变多,事情会变得更加难以处理。
更可怕的是,一旦需要服务器迁移(例如从亚马逊迁移到其他云)往往需要对每个应用都进行重新部署和调试。这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率。就起更远,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。
而Docker提供了一种更为聪明的方式,通过容器来打包应用、解耦应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器时候是同一类型的平台。这无意将帮助我们节约大量的宝贵时间,并降低部署过程中出现问题的风险。
对开发和运维(DevOps)人员来说,最梦寐以求的效果可能就是依次创建或配置,之后可以在任意地方、任意时间让应用正常运行,而Docker恰恰是可以实现这一终极目标的“瑞士军刀”。具体说来,在开发和运维过程中,Docker具有如下几个方面的优势:
更快速的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试人员和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试、部署的大量时间。并且,整个过程全程可见,是团队更容易理解应用的创建和过程。
更高效的资源利用。运行Docker容器不需要额外的虚拟化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。与传统虚拟机方式相比,Docker的性能要提高1~2个数量级。
更轻松的迁移和扩展。Docker容器几乎可以在任意的平台上运行,高阔物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用。
更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
关于如何理解docker就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。