使用Docker+vscode搭建离线的go开发调试环境

文章首发于个人博客

背景

受项目及信创环境影响,导致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并且安装了插件,所以很多东西可以直接打包进镜像里。

几番尝试后,最终打了个开箱即用的镜像,自我感觉良好,但也有几个地方值得拿出来说一下:

  1. 由于code server的镜像里没有中文环境,所以中文语言包插件就不必折腾了,只要客户端支持中文,完全不影响使用

  2. 由于本机就是linux+vscode+go的开发环境,所以直接打包了,Dockerfile并不通用

  3. 由于追求开箱即用,是把所有所需都打进了镜像中,若需要灵活,可使用挂载卷的形式

  4. 为了降低性能损耗,同时避免调试端口的映射,容器的网络使用host模式

总结

  1. 搭建本地开发环境,安装插件,更新依赖

  2. 编写Dockerfile

Dockerfile 复制代码
FROM codercom/code-server:4.109.5
# go 插件
COPY --chown=coder:coder ./.local/share/code-server/extensions /home/coder/.local/share/code-server/extensions
# go sdk
COPY --chown=coder:coder ./go1.2x.x /home/coder/.local/go
# go 依赖
COPY --chown=coder:coder ./go /home/coder/go
# 必要的配置
RUN echo 'export PATH="$PATH:$HOME/.local/go/bin:$HOME/go/bin"' >> /home/coder/.bashrc \
    echo 'export PATH="$PATH:$HOME/.local/go/bin:$HOME/go/bin"' >> /home/coder/.profile
  1. 打包成镜像
sh 复制代码
docker build -t codeserver:1.0 .
  1. 编写start.sh
sh 复制代码
#!/bin/bash
docker container stop codeserver
docker container rm codeserver
docker run --name codeserver \
    --net host \                  # host模式降低性能损耗,同时避免调试端口的映射
    -e PASSWORD="123456" \        # 默认密码
    -v "./src:/home/coder/src" \  # 挂载源码目录
    -d codeserver:1.0 --port 8080 # 指定访问端口
相关推荐
丶伯爵式17 分钟前
Docker 国内镜像加速 | 2026年3月26日可用
运维·docker·容器·镜像加速·国内镜像加速
zopple7 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001119 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本10 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji341610 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan10 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
蓝羽天空10 小时前
Ubuntu 24.04 安装 Docker
linux·ubuntu·docker
维度攻城狮11 小时前
Docker-Ubuntu安装并启动Chrome浏览器
chrome·ubuntu·docker·安装
wuyikeer11 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor35611 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端