去年团队决定用Docker来统一开发环境。在此之前每个人的电脑上装的软件版本都不一样,经常出现"在我电脑上是好的"这种问题。我们想着用Docker之后大家的环境都一样,应该就不会有这种问题了。
理想很丰满现实很骨感。真正用Docker搭建开发环境的过程中踩了不少坑。今天把这些坑写出来,希望能给打算用Docker做开发环境的朋友一些参考。
最开始遇到的是镜像体积太大的问题。我们直接用官方的镜像,一个PHP镜像就有几百兆。加上MySQL Redis这些,整个环境拉下来要好几个G。新人入职光拉镜像就要等半天。后来我们改成了用Alpine基础镜像,自己构建精简版,把体积压缩到了原来的三分之一。
然后是文件权限问题。Docker容器里运行的进程默认是root用户,在容器里创建的文件挂载到宿主机之后所有者变成了root,宿主机上编辑的时候会有权限问题。这个问题困扰了我们很久。后来的解决方案是在构建镜像的时候创建一个和宿主机用户ID相同的用户,容器里用这个用户来运行进程。
网络问题也花了不少时间。Docker默认的网络模式在不同操作系统上表现不一样。在Linux上很顺畅,在Mac和Windows上就各种问题。比如容器之间不能互相访问,端口映射不生效等等。我们花了很多时间才把这些问题一一解决。
数据库数据持久化也踩过坑。最开始我们把MySQL的数据目录挂载到宿主机,结果发现不同操作系统的文件系统不一样,有时候会出现数据损坏的情况。后来改成了用Docker volume来存储数据,就稳定多了。
开发体验也是一个问题。用Docker之后,改代码要进容器里改,看日志也要进容器,执行命令也要进容器。虽然可以用docker exec,但每次都要敲一长串命令很麻烦。后来我们写了一些脚本封装常用操作,还配置了docker-compose,体验才好了一些。
最后是性能问题。在Mac上用Docker,文件挂载的性能特别差。一个普通的PHP项目,页面加载要好几秒。查了很多资料才知道是Docker for Mac的文件系统性能问题。后来用了cached模式,情况有所改善,但还是不如原生的快。
踩了这么多坑之后,我们的Docker开发环境终于稳定了。现在新人入职只需要安装Docker,然后执行一条命令就能把整个环境跑起来,再也不用花半天时间装软件了。团队的开发效率确实提升了不少。
回头看这段经历,我觉得Docker确实是个好东西,但用它来做开发环境并没有想象中那么简单。需要花时间去研究,去踩坑,去优化。不过一旦搭建好了,带来的好处也是实实在在的。
如果你也打算用Docker搭建开发环境,我的建议是先小范围试用,不要一上来就全团队推广。先在一两个项目上试试,把坑踩完了再推广。还有就是一定要写好文档,把常用的命令和遇到的问题都记录下来,方便团队成员查阅。
技术这东西就是这样,没有银弹。Docker能解决环境不一致的问题,但也会带来新的问题。关键是要权衡利弊,根据自己团队的实际情况来做选择。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录