我把本地开发环境全部容器化了
由于本地项目比较多,且对于环境要求各不相同,导致电脑上要装多个环境才能满足项目的运行。以我常用的 PHP 开发为例,需要 PHP 7.1 、PHP 7.3、PHP 8.1 、PHP 8.3,在这些项目中 compose 如何寻找到正确的 PHP 版本来安装依赖也是一个比较难以解决的问题。 为了不再受此困扰,我决定用容器来解决我面临的问题。开发环境容器化还有一个考虑就是容器本身对 CI/CD 比较友好,我们在测试和线上环境已经开始转向容器化部署,如果本地也进行容器化,编写好的 Dockfile 可以复用到后面的部署流程。 我的方案是为每个项目编写一个 docker-compose.yml 当我开始进入某个项目的开发工作时。只要打开对应的项目通过 docker-compose.yml 启动容器就可以启动对应项目的开发环境进行开发了。 容器化给我带来了哪些好处: 纯净的物理机:我不需要在物理机上安装各种各样的环境 低负载开发: 只有运行开发的相关环境,其他不相关的服务都不会在后台运行 部署和开发一致: 由于都是 Docker 部署,不会因为环境问题导致本地开发没问题线上出错的情况 专注于开发本身 :免去了多种环境下互相兼容下的管理工作,专注于开发本身。 在容器话的过程中,我也遇到了一些问题,在这里记录一下,供诸君参考。 一些问题 首先遇到的问题就是依赖缓存的问题,比如一个 GO 的项目,因为 GO 的环境是在容器里,这样每次启动项目都要重新下载一次依赖,浪费时间也没有必要,于是我就将 mod 依赖下载目录通过挂载卷映射到我本机上。 如此依赖就解决了每次启动容器,都要重新安装依赖的问题,这样做还有一个额外的好处就是我其他的 GO 项目也也可以把 mod 依赖下载路径映射到相同的位置,这样就能实现下载依赖的复用,也能避免过多的磁盘占用。 如果你是前端项目使用 pnpm 管理工具,也可以参考上述思路解决 npm 包的依赖复用问题。 遇到的另一个问题就是 Windows 环境下,文件读写性能不足的问题。Windows 用户在开发环境容器化是需要注意一下,如果你的项目运行需要大量的文件读取,会导致项目启动异常慢,这个是 Windows 下面使用容器的硬伤,目前无解。Linux 和 MacOS 并不会出现此类问题。 工具推荐 如果你用 Visual Studio Code 进行开发,可以安装一个 Docker 的扩展,通过设置 Docker: Compose Down 和 Docker: Compose Up 两个快捷键实现快速的启动和停止项目。 ...