Docker有什么好处?

Docker背后的想法是建立软件程序可移植的轻量容器,让其能够在任何安装了Docker的机器上运行,而不用关心底层操做系统,相似船舶使用的集装箱,野心勃勃的他们成功了。

Docker能够解决虚拟机可以解决的问题,同时也可以解决虚拟机因为资源要求太高而没法解决的问题。Docker能处理的事情包括:

  • 隔离应用依赖
  • 建立应用镜像并进行复制
  • 建立容易分发的即启即用的应用
  • 容许实例简单、快速地扩展
  • 测试应用并随后销毁它们

标准化应用发布,docker容器包含了运行环境和可执行程序,能够跨平台和主机使用;
节约时间,快速部署和启动,VM启动通常是分钟级,docker容器启动是秒级;
方便构建基于SOA架构或微服务架构的系统,经过服务编排,更好的松耦合;
节约成本,之前一个虚拟机至少须要几个G的磁盘空间,docker容器能够减小到MB级;
方便持续集成,经过与代码进行关联使持续集成很是方便;
能够做为集群系统的轻量主机或节点,在IaaS平台上,已经出现了CaaS,经过容器替代原来的主机。

目前大型互联网公司有腾讯、京东、美团、新浪、大众点评等都在使用。好比说腾讯的盖亚,基于docker部署管理,听说已经有万台规模,用于大数据处理。美团主要是用于持续集成,自动构建方面,另外新浪也作了实践。容器化是一个大趋势,之后这方面的公司会愈来愈多。git


Docker提供功能普遍,这里有几个的例子:web

  • Images(镜像):Docker能够经过Pull和Push命令构建对象到服务中心docker

  • Containers(容器):Docker能够经过Start/Stop命令管理容器的生命周期缓存

  • Logging(日志):Docker能够经过stdout,stderro捕获输出全部的容器内部信息服务器

  • Volumes(存储):Docker能够建立和管理容器的相关文件存储网络

  • Networking(网络):Docker能够建立管理虚拟的接口和内部全部容器之间的网络桥接架构

  • RPC:Docker服务器提供容许外部程序去控制全部容器的行为的API分布式

镜像管理

镜像是Docker管理最基础的部分,同时也是Docker最大的亮点。镜像管理涉及到镜像的制做、更新、存储、分发、权限等多个方面。微服务

镜像制做方面,应该坚持三个原则,第一是坚持镜像老是从Dockerfile生成。这样作最大的好处是能够经过Dockerfile“阅读”镜像,在后续的协做、升级维护等方面会带来巨大的便利。第二是镜像之间应该避免依赖过深,建议为三层,这三层分别是基础的操做系统镜像、中间件镜像和应用镜像。第三是坚持全部镜像都应该有对应的Git仓库,以方便后续的更新。性能

镜像的更新须要一个自动化的流程,这能够经过SCM和CI系统自动触发实现。具体的流程以下图所示。开发者首先将代码和Dockerfile提交到Git仓库,而后Git经过webhook方式触发Jenkins的主动获取代码和Dockerfile文件,Jenkins再经过Docker相关的插件生成镜像并推送镜像到私有的Registry。这样,在服务器上就能够经过拉取新的镜像部署容器。

关于Registry,可能会涉及三方面的问题,一个是单点问题,对应的解决方案能够考虑DRBD、分布式存储以及云存储。二是Regitry的性能问题,目前可用的解决方案是经过HTTP反向代理缓存来加速Layer的下载。三是Registry用户权限,Nginx LUA能够提供一个简单快速的实现方案。

发布管理

和传统的发布流程相比,Docker最大的好处是不须要考虑外部依赖,利用容器的自包含的特色,咱们能够将发布回滚流程标准化和产品化。而传统的发布和回滚,须要casebycase去针对不一样应用作升级回滚的方案。要作到基于Docker的发布,镜像的生成必须坚持自动化,不然会发现升级比传统的方法更麻烦。所以在现实中咱们也发现不少企业将代码目录放到主机目录映射到容器内,这样作破坏了Docker的自包含特性,解决的办法是坚持应用镜像更新自动化。

发布管理

和传统的发布流程相比,Docker最大的好处是不须要考虑外部依赖,利用容器的自包含的特色,咱们能够将发布回滚流程标准化和产品化。而传统的发布和回滚,须要casebycase去针对不一样应用作升级回滚的方案。要作到基于Docker的发布,镜像的生成必须坚持自动化,不然会发现升级比传统的方法更麻烦。所以在现实中咱们也发现不少企业将代码目录放到主机目录映射到容器内,这样作破坏了Docker的自包含特性,解决的办法是坚持应用镜像更新自动化。

日志管理

因为容器是无状态的,因此存储在容器内的日志会随着容器的销毁而消失。stdout/stderr类型的日志,可经过logspout转发到syslog中心来收集。打印到文件的支持,好比accesslog,须要将日志存储到外部的Volume,并在Docker主机上使用logstash收集转发。

配置管理

容器里没有CM agent,没法接收CM指令。CM运行到Host上也没法管理容器中的文件,若是手工修改容器内的配置,那新建立的容器仍然是旧的。配置大致上分为两种类型,一种是服务之间的链接信息,这种配置建议考虑使用服务发现系统,也可使用一些更加传统的方法,好比经过环境变量来协调做开发和生产环境的配置差别。一种是通常的配置文件参数,配置文件和Dockerfile应该一块儿存储到一个Git仓库,修改后自动build更新镜像。

网络管理

目前Docker支持的网络包括Host网络、NAT网络、物理网桥和网络虚拟化。Host网络中容器和主机共享网络命名空间,不一样容器须要作好端口规划,防止端口冲突。Nat网络是基于四层代理以及NAT技术,依赖portmap,进出都须要转发,性能低,主机上须要作好端口规划,容易搞混。物理网桥方案,和传统虚拟机的网桥没有区别,适合容器数量有限且相对静止的场景。网络虚拟化是基于隧道的overlay网络,目前开源方案有SocketPlane、Weave、Flannel,适合数量大,动态建立销毁容器的场景。

相关文章
相关标签/搜索