
在测试以及生产环境中使用docker,应该已经是非常普遍;但其实在开发环境中,也是可以利用docker。
我不是说在开发环境下使用docker去跑个数据库,而是说100%的将开发环境也部署在docker中,即工程师使用的桌面、IDE等等全部都是运行在docker之中。
这应该也不是什么新鲜的做法,在虚拟机开始流行的时代,便有vagrant这样的产品:https://www.vagrantup.com/ 便于开发环境的搭建。
其好处也显而易见:新员工入职不需要再花个一两天甚至一周去“搭建开发环境”。
入职后,只要在开发机上把虚拟机跑起来,那么环境也就搭建完毕,也就是半天甚至几分钟的事。
但这样做,还是有些许限制,即需要给每个员工配备性能强劲的台式机,或者笔记本;笔记本的话,往往也就意味着是Macbook Pro了。
从设备折旧,甚至开发体验上来说,其实可以更进一步的:把开发环境跑在docker集群上。
没错,也就是七八十年代流行的终端 + 主机的模式。
IT运维把集群搭建起来,员工入职的时候,就分配一台性能一般的电脑作为终端,这里终端设备重要的是显示器、键盘鼠标等;CPU、内存等则不重要,这台机器只要能跑VNC远程桌面登录即可。实际上,我觉得现在一些手机都能胜任:
- USB type-c接4K的显示器
- 接蓝牙键盘
- 连Wi-Fi
除了终端,IT运维需要给员工配备的是运行在集群上的虚机,然后,再在虚机上面把开发环境的docker跑起来;当然,绕过虚机,集群能够提供docker也行。
提供虚机的话,是把管理职责分隔一下,即运维只负责虚机的维护,确保集群能够满足团队需要的虚机数量、性能;至于虚机上面跑的开发环境是啥,IT运维可以完全不关心。
员工拿到虚机之后,则应该可以随意选择去跑适合自己口味的docker镜像,喜欢ubuntu的就ubuntu,喜欢CentOS的就CentOS;做go后端开发的可以有适合go的docker,做前端的可以有node的docker。
这里的重点其实不是“统一开发环境”,而是让研发团队,可以有一个“平台”来快速交换开发环境。
员工入职时候,小白可以选择跟着使用大神的环境;而小白也可以在使用的过程中,去修改镜像,然后提交去内部的docker hub,提供给其他同事使用。
通过把home目录映射到虚机上,也可以实现docker开发环境升级、变更的时候,保留之前的工作目录。
这样一套环境,慢慢的自然可以在团队内部形成不同的“流派”,然后大家自发的去维护。
如此一来即解决了入职时快速上手的问题,也有利于营造团队内部的技术氛围、交流;从成本的角度看,也肯定要比给所有人都配高配的Macbook Pro低,而性能也是极佳。
作为程序员来说,也再也不用上下班背笔记本了,有网络,能够登录内网集群就可以畅快开发了。
注意,是“内网集群”,所有的数据、网络访问也都是可控的,我猜想企业的安全部门,也会非常喜欢这点。
当然,搞这么一套开发环境需要投入,也有一定的技术门槛,小团队,投入去搞这些我觉得划不来,猜想适合有百人以上的开发团队去搞;而完善之后,会是多赢;而如果是千人的开发团队,我认为类似的方案就会是必不可少的。