背景
受项目及信创环境影响,导致debug极不方便,主要限制如下:
-
无法连接互联网
-
客户端只能使用
win7或国产系统,受使用习惯及生态影响,实际只能使用win7
无法debug终究不是个事,还是需要有一个解决方案的。
解决过程
方案1
首先想到的方案便是在某一客户端上安装vscode+go搭建一个简易的开发环境。
vscode支持win7的最后一个版本是1.70.3,搞定这个安装包还是不难的;但go支持win7的最后一个版本是1.20.x,为了使用一些新的特性,至少得是1.23.x以上。
方案2
方案1行不通,那就只能打服务器的主意了。在win7上装vscode及相关插件,在linux服务器上装go,进行远程调试。
评估过程中发现,既要搞win7的插件,又要搞linux的服务,还要处理go的依赖……麻烦!
方案3
既然服务器是linux系统,应用部署使用的是docker,而且vscode是有web版的(叫code server),那么使用docker来搞定这个开发环境应该问题不大的,而且这个镜像还可以到其它同类项目上直接使用!
尝试1
go的镜像有,code server的镜像也好办,但搞两个镜像……算了,太麻烦!
尝试2
把code server集成到go的镜像里,由于一直追求小体积镜像,使用的是alpine版,但code server使用到了glibc,应该能改,但还是太麻烦了。
尝试3
既然把code server集成到go的镜像里太麻烦,那就把go集成到code server的镜像里。思路也很简单:集成go->导入插件->导入依赖->配置环境。
由于本机的环境就是linux+go,也有docker,而且尝试时也已安装过code server并且安装了插件,所以很多东西可以直接打包进镜像里。
几番尝试后,最终打了个开箱即用的镜像,自我感觉良好,但也有几个地方值得拿出来说一下:
-
由于
code server的镜像里没有中文环境,所以中文语言包插件就不必折腾了,只要客户端支持中文,完全不影响使用 -
由于本机就是
linux+vscode+go的开发环境,所以直接打包了,Dockerfile并不通用 -
由于追求开箱即用,是把所有所需都打进了镜像中,若需要灵活,可使用挂载卷的形式
-
为了降低性能损耗,同时避免调试端口的映射,容器的网络使用
host模式
总结
-
搭建本地开发环境,安装插件,更新依赖
-
编写
Dockerfile
|
|
- 打包成镜像
|
|
- 编写
start.sh
|
|