Docker学习笔记 — Docker应用场景总结
Docker应用场景总结
学习Docker也有一段时间了,了解了Docker的基本实现原理,也知道了Docker的使用方法,这里对Docker的一些典型应用场景做一个总结吧。如果发现有新的应用场景,再对笔记进行更新。
当前,Docker主要还使用在简化开发流程和运维上面,貌似还算不上云计算技术,其在资源隔离和配额限制方面的潜力还尚未被挖掘出来,希望未来Docker能够像OpenStack一样在云计算领域占据重要地位。
配置简化
这是Docker的主要使用场景。将应用的所有配置工作写入Dockerfile中,创建好镜像,以后就可以无限次使用这个镜像进行应用部署了。这大大简化了应用的部署,不需要为每次部署都进行繁琐的配置工作,实现了一次打包,多次部署。
这大大加快了应用的开发效率,使得程序员可以快速搭建起开发测试环境,不用关注繁琐的配置工作,而是将所有精力都尽可能用到开发工作中去。
代码流水线管理
代码从开发环境到测试环境再到生产环境,需要经过很多次中间环节,Docker给应用提供了一个从开发到上线均一致的环境,开发测试人员均只需关注应用的代码,使得代码的流水线变得非常简单,这样应用才能持续集成和发布。
快速部署
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。
应用隔离
资源隔离对于提供共享hosting服务的公司是个强需求。 如果使用VM,虽然隔离性非常彻底,但部署密度相对较低,会造成成本增加。
Docker容器充分利用linux内核的namespace提供资源隔离功能。结合cgroups,可以方便的设置每个容器的资源配额。既能满足资源隔离的需求,又能方便的为不同级别的用户设置不同级别的配额限制。
服务器资源整合
正如通过VM来整合多个应用,Docker隔离应用的能力使得Docker同样可以整合服务器资源。由于没有额外的操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比VM提供更好的服务器整合解决方案。
通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。
多版本混合部署
随着产品的不断更新换代,一台服务器上部署多个应用或者同一个应用的多个版本在企业内部非常常见。
但一台服务器上部署同一个软件的多个版本,文件路径、端口等资源往往会发生冲突,造成多个版本无法共存的问题。
如果用docker,这个问题将非常简单。由于每个容器都有自己独立的文件系统,所以根本不存在文件路径冲突的问题; 对于端口冲突问题,只需要在启动容器时指定不同的端口映射即可解决问题。
版本升级回滚
一次升级,往往不仅仅是应用软件本身的升级,通过还会包含依赖项的升级。 但新旧软件的依赖项很可能是不同的,甚至是有冲突的,所以在传统的环境下做回滚一般比较困难。
如果使用docker,我们只需要每次应用软件升级时制作一个新的docker镜像,升级时先停掉旧的容器, 然后把新的容器启动。 需要回滚时,把新的容器停掉,旧的启动即可完成回滚,整个过程各在秒级完成,非常方便。
内部开发环境
在容器技术出现之前,公司往往是通过为每个开发人员提供一台或者多台虚拟机来充当开发测试环境。开发测试环境一般负载较低,大量的系统资源都被浪费在虚拟机本身的进程上了。
Docker容器没有任何CPU和内存上的额外开销,很适合用来提供公司内部的开发测试环境。而且由于Docker镜像可以很方便的在公司内部共享,这对开发环境的规范性也有极大的帮助。
PaaS
使用Docker搭建大规模集群,提供PaaS。这一应用是最有前景的一个了,目前已有很多创业公司在使用Docker做PaaS了,例如云雀云平台。用户只需提交代码,所有运维工作均由服务公司来做。而且对用户来说,整个应用部署上线是一键式的,非常方便。
云桌面
在每一个容器内部运行一个图形化桌面,用户通过RDP或者VNC协议连接到容器。该方案所提供的虚拟桌面相比于传统的基于硬件虚拟化的桌面方案更轻量级,运行速率大大提升。不过该方案仍处于实验阶段,不知是否可行。可以参考一下Docker-desktop方案。
参考文档
1. http://dockerone.com/article/126
2. https://blog.nicescale.com/docker-use-cases/
更多推荐
所有评论(0)