简介
什么是docker
docker最初是dotcloud公司的创始人Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于dotcloud公司多年云服务的一次革新,并与2013年3月以Apache2.0授权协议开源,主要项目代码在GitHub上进行维护。docker项目后来还加入了Linux基金会,并成立推动开放容器联盟(OCL) docker自从开源后受到了广泛的关注和讨论,至今期GitHub项目已经超过了四万八千多星。基至由于docker项目的火爆,在2013年底,dotcloud公司决定改名为docker。docker最初是在Ubuntu12.04上开发实现的;red hat则从rhel6.5开始对docker进行支持;google也在其PaaS产品中广泛应用docker。 docker使用google公司推出的Go语言进行开发实现的,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离进程,因此也称其为容器。最初实现是基于lxc,从0.7版本后开始去除LXC,转而使用自行开发的libcontainer,从1.11开始则进一步演进为使用runc和containerd。 docker在容器的基础上,进行了进一步的封装,从文件系统,网络互连到进程的隔离等,极大的简化了容器的创建和维护。使得docker技术比虚拟化技术更为轻便,快捷。 下面两张图片比较了docker和传统的虚拟化方式的不同之处。传统的虚拟技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需要的应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,也没有进行硬件虚拟。因此容器要比传统的虚拟机更为轻便。 传统虚拟化Docker
为什么要用docker
作为一种新兴的虚拟化方式,docker跟传统的虚拟化方式相比具有众多的优势。
- 更高效的利用系统的资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外的开销,docker对系统资源的利用率更高。无论是应用执行速度,内存损耗或者文件储存速度,都比传统的虚拟机技术更加高效。因此相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
- 更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行在宿主机内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级。大大的节约了开发测试部署的时间。
- 一致的运行环境
开发过程中一个常见的问题是环境一致性的问题。由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中被发现。而docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会出现运行环境不一致的问题。
- 持续交付和部署
对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意的地方进行正常的运行。 使用docker可以通过定制应用镜像来实现持续性的集成,持续交付,部署。开发人员可以通过dockerfile来进行镜像构建,并合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署。 而使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解相应运行所需要的条件,帮助更好的生产环境中部署该镜像。
- 更轻松的迁移
由于docker确保了执行环境的一致性,使得应用的迁移更加容易。docker可以在很多平台上运行,无论是物理机,虚拟机,公有云,私有云,甚至是笔记本。其运行结果是一致的。因此用户可以很轻松将一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常的运行。
- 更轻松的维护和扩展
docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更加容易,也使得应用的维护更加简单,基于基础镜像进一步扩展镜像也变的非常简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,继而可以直接在生产环境使用,又可以作为基础进行进一步定制,大大降低了应用服务的镜像制作成本。
发表评论
共 0 条评论
暂无评论