1、模板配置
Docker 提供了一个通用配置文件dockerfile。在初次配置成功后,它可以作为一个模板文件增加不同应用的相关文件。
随着应用逐渐增多,研发人员只需维护好与之对应的 Docker 配置文件即可,而这个配置文件则固定的分为几个标签,每个标签标识docker的一些属性,同时存储了Docker 运行、启动的命令。
2、CI/CD
Docker 提供了一组应用打包构建、传输及部署的方法和框架,用户只需要关注自己的逻辑功能,框架会自动被触发构建和运行。Docker 还提供了跨越这些异构环境以满足一致性的微环境——从开发到部署、再到流畅发布,同时提高资源的配置和隔离方案。
目前通用的实践就是和Jenkins、GitLab 等相关工作流平台串联起来,融入项目开发的CI/CD(持续集成与持续发布)流程中,让一键部署成为可能。
3、DevOps节点运行能力
在传统软件开发过程中,开发、测试和运维是不同的软件开发的流程,甚至不是一个团队成员。对于互联网公司而言,由于业务迭代非常的快,需要通过“小步快跑”的方式进行敏捷开发,以此来满足用户差异化的需求、应对竞争对手的产品策略。如果在周级别的迭代过程中需要管理环境、人员调配,资源评估,那将是非常糟糕的。因此,在极端情况下,如:每周发布多次甚至每天发布多次的场景,高效的团队协作就显得尤为重要。
DevOps 正式在这种场景下应运而生,它打破了开发人员和运维人员之间的壁垒,通过“节点服务”组成工作流,串联项目完整生命周期,涵盖了研发、构建、测试、发布、监控及反馈等流程,从而促进了软件的一致性和标准化,支持节点可重入,可回滚,可灰度发布的能力,严格管控传统低效的开发流程,让这一切变得更智能化。
标准的“节点服务”依赖一些隔离的执行环境:既要快速启停、又要服务稳定执行、还要支持高并发调度,这一切都可以通过 Docker 来轻松实现。
4、自动化测试
测试是软件开发过程中非常关键的一环,直接影响产品的质量。测试工程师每天都需要完成大量的测试任务,手动执行测试会耗费大量的时间,这时考虑使用 Docker 进行自动化改造。自动化的成本是首次自动化程序的编写和维护,而收益则是解放人力、提高生产力。
测试人员在进行一些功能测试、性能测试以及UI测试时,需要快速搭建不同的运行环境、掌握Docker技术,可以让测试人员如虎添翼。
5、应用服务隔离
隔离是当今微服务发展与部署的核心考核点,服务之间的资源刚性交付和保证是服务上线后稳定运行的基本。例如,服务器上混部了两个服务:
- Node服务,用来启动Web应用服务;
- Java服务,用来提供前后端分离的API接口和业务逻辑。
如果服务混部就可能出现这种情况——两个服务争夺服务器的CPU资源,无论哪一方失败都将造成灾难。如下图所示,服务器的CPU资源已经被Java服务占满,此时node服务就会饥饿等待。
在资源有限的前提下,操作系统没法同一时间满足多个应用进程的突发流量使用。当然,在这种场景下可以通过独立部署、为虚拟机设定资源优先级等方案解决,但是这个扩容能力和效率会比较低,同时资源也不好准确评估。
但在 Docker中,这些完全没有必要担心,因为Docker提供了进程级的隔离,可以更加精细地设置CPU和内存的使用率,进而更好地利用服务器的资源。
6、弹性扩缩容
在生产实践中,业务不可避免的产生突发流量,比如双11的整点抢购、游戏服务的活动大礼包开放、节假日的各种优惠活动等都会带来流量的波动。在大促或流量不均的场景,服务器的自动扩容/缩容就会很关键。
在流量低谷时进行自动缩容,可以大幅度减少服务器成本。在峰值来临时,通过可观测性预测自动触发服务器扩容操作,从而保证服务器稳定运行。
在传统的虚拟机或物理机的实战中,这些操作显得非常的繁琐和低效。而在Docker中却非常灵活并且高效,因为,每个容器都可作为单独的进程运行,并且可以共享底层操作系统的系统资源。这样可以提高容器的启动和停止效率,扩容也就毫不费力了。
7、节省成本
成本优化也是很多企业使用Docker的原因之一。传统企业一般会使用虚拟机,虚拟机虽然可以隔离出很多“子系统”,但占用的空间更大,启动更慢。在线和离线服务没有混部充分利用服务器资源。
Docker技术不需要虚拟出整个操作系统,只需要虚拟出一个小规模的环境,与“沙箱”类似,达到开箱即用的效果。
此外,虚拟机一般要占用很大的存储空间(可以达到数十GB);而容器只需要占用很小的存储空间(最小的仅为几KB),这样就能节省出更多的服务器资源,从根本上节省成本。
可以看出,Docker已经渗透到了日常开发的方方面面。
转载请注明:IT运维空间 » linux » Docker的开发环境场景
发表评论