最近在工作、构建IT生活以及建设开源项目时都使用到了Docker。在《docker系列》文章里我提到了Docker在“服务编排”、“部署”、“集中管理”上有很好的优势,在产品和运维中都能有很好的表现。那么这里我要给开发者们再分享一个便利,那就是通过Docker+VSCode打造程序员的修仙炉。
相信开发者们或多或少都遇到过这样的问题:
而采用Docker去构建一个开发环境有如下优点:
要了解完整的修仙炉,应从Docker开始,以下是采用Docker构建开发环境的解释图:
通过Docker创建开发环境图
如上所示,主要分为3个部分,“主机”、“代码仓库管理平台”、“Docker Registry”:
pull
指令从“代码仓库管理平台”上获取代码并进行项目开发,在开发过程中通过push
指令更新仓库代码。Dockerfile
文件随时随地的重建开发环境。再仔细看“主机1”的内部结构可以看到,这里是将容器和代码进行分离的,这样的好处在于容器和代码可以分开管理,比如当我们决定更新开发环境时,不必担心代码也会被删除,因此可以在不影响代码的情况下升级开发环境,在升级完成后再将代码mount
到新的容器(新的开发环境)中即可,如下所示:
升级开发环境示例图
如上所提及到的升级开发环境,随着项目的不断发展,这样的升级过程是时常出现的,比如:
那么通过Docker我们可以很方便的对每个“开发环境”进行管理,将不同时期的开发环境打上标签(tag),然后发布到“Docker Registry”中,最后将开发环境与项目代码的版本对应,就形成了一套代码和环境都可回溯的开发流程:
可回溯的开发流程示例图
如上所示,主机1拉取“项目1:v1.0”的代码及适配的“项目1开发环境:v1.0”的镜像进行v1.0的编译或开发工作。而主机2则拉取“项目1:master”的代码及适配的“项目1开发环境:latest”的镜像进行master的编译或开发工作。
经过上面的了解,我们已经认识了修仙炉的80%了,它是修仙炉本身,但我们还需要一把火,强烈的火来运行它,而这把火就是“VSCode”编辑器(这是我目前最喜欢的编辑器,无论是进行文档编写还是开发工作都可以胜任,感兴趣的可以浏览我的另一篇文章“程序员最优的做笔记或写博客软件”)。
“VScode”本身是C/S架构,可扩展的,插件也被分为客户端侧和服务器侧,客户端侧一般是跟环境无关的插件,比如渲染和主题。而服务器侧则通常与环境相关,比如语言服务器。在这样的架构中,利用其提供的“Remote”套装可以实现一个编辑器进行多主机多项目及多环境开发。这里我们主要提到的是“Remote”套装中的“Remote – Containers”插件,专门用于容器开发,它有几个用处:
至此,我们将实现整合了“代码-开发环境-编辑器”的开发流程,实现“一次分发即开发”,即:无需额外的操作,就可以完整的恢复开发项目所需的东西。——这就是“程序员的修仙炉”。
接下来是创建修仙炉的一个示例过程,感兴趣的可以继续向下阅读。
为了响应国产化,我这里使用国内的“gitee”作为代码仓库:
项目代码仓库示例图
在项目的根目录下创建“Dockerfile”文件,并将项目所需要的环境写到Dockerfile中:
开发环境示例图
代码示例仓库结构如下:
增加Dockerfile文件后的代码仓库图
详情可参阅:remote-container的官方手册
打开vscode并安装插件:“Remote – Containers”(建议直接安装“Remote Development”,随着对remote开发越来越熟练后,里面的功能都会用上的):
安装remote-containers插件图
注意,只有首次创建开发环境比较久(要拉取代码并创建容器和对应卷),在创建完毕后,后续都可以快速的打开(运行容器即可)。
>remote-containers: clone repository in container volume
,并回车1. 用命令行打开代码仓库图
2. 输入仓库地址图
3. 选择Create a new volume图
4. 输入卷名图
5. 创建完毕图
用图标打开代码仓库图
到了这里,我们已经顺利的将代码放入到带有纯净开发环境的容器中了。之后我们可以做以下活动
致开发者们:你们的热情与张狂,是“时代”的智慧与利剑,加油吧骚年~