前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker+VSCode打造程序员的修仙炉

Docker+VSCode打造程序员的修仙炉

作者头像
Homqyy
发布2023-03-06 13:25:45
1.2K0
发布2023-03-06 13:25:45
举报
文章被收录于专栏:知行合一知行合一

前言

最近在工作、构建IT生活以及建设开源项目时都使用到了Docker。在《docker系列》文章里我提到了Docker在“服务编排”、“部署”、“集中管理”上有很好的优势,在产品和运维中都能有很好的表现。那么这里我要给开发者们再分享一个便利,那就是通过Docker+VSCode打造程序员的修仙炉。

相信开发者们或多或少都遇到过这样的问题:

  • 在一个开发环境中进行开发,很难将其移植到另一个开发环境中
  • 为了让别人也可以开发自己项目,我们需要共享自己的开发环境出去,但这带来了一定的挑战和问题:
    • 采用多用户共用一台设备:需要共享者拥有系统的运维能力,要懂得基本的用户权限管理,否则如果使用人员进行了不规范的操作将会导致开发环境被破坏,甚至可能导致项目被误删。
    • 采用虚拟机导出的形式:在《Docker系列》文章中我们提到虚拟机的问题,它大而冗,不仅启动和运行的时间久,还需要占用大量的设备资源。虽然这个方案还是可行的,但仅限于线下或局域网内可行。如果涉及到类似开源项目,跨地域间的协同开发则很难解决。(也许可以吧,你可以尝试把虚拟机也发布到网上试试)
    • 采用虚拟环境工具:受限于提供了此工具的语言,比如python。同时虚拟环境往往与操作系统强相关,这有极大的局限性。
  • 开发环境的每一次共享都需要“共享者”本人的参与,这无疑很浪费共享者的时间和精力。

而采用Docker去构建一个开发环境有如下优点:

  • 由于容器间的隔离,得以让项目的开发环境保持精简,不会掺杂无关的工具或库。
  • 由于Docker的分发能力,让项目开发环境得以快速分享。
  • 由于Docker的自动构建能力,让项目开发环境得以自动重建。
  • 由于Docker的移植能力,促使我们可以在任何一台运行Docker的主机中进行项目开发。
  • 当然,还有利用了Docker我们可以将开发环境与代码分离,方便于管理。

修仙炉介绍

要了解完整的修仙炉,应从Docker开始,以下是采用Docker构建开发环境的解释图:

通过Docker创建开发环境图

如上所示,主要分为3个部分,“主机”、“代码仓库管理平台”、“Docker Registry”:

  • 代码仓库管理平台:这里通常使用的是git仓库,可以是公网仓库也可以是内网仓库,其负责项目代码的版本控制。
  • 主机:
    • 用于开发项目的终端设备。用户在主机设备上运行Docker并创建好开发环境后,通过pull指令从“代码仓库管理平台”上获取代码并进行项目开发,在开发过程中通过push指令更新仓库代码。
    • 主机可将开发环境的镜像发布到“Docker Registry”后,由其他主机再通过“Docker Registry”得到开发环境,以对相同的项目进行开发,可便捷的实现分布式协同开发。
    • 当然,主机也可以通过代码仓库的Dockerfile文件随时随地的重建开发环境。
  • Docker Registry:负责镜像的存储和分发,这里可以是公网的Registry,也可以是内网的私人Registry。

再仔细看“主机1”的内部结构可以看到,这里是将容器和代码进行分离的,这样的好处在于容器和代码可以分开管理,比如当我们决定更新开发环境时,不必担心代码也会被删除,因此可以在不影响代码的情况下升级开发环境,在升级完成后再将代码mount到新的容器(新的开发环境)中即可,如下所示:

升级开发环境示例图

如上所提及到的升级开发环境,随着项目的不断发展,这样的升级过程是时常出现的,比如:

  • 升级某个工具版本,比如:升级cmake版本。
  • 增加或删除一个库,比如:增加cJSON库,删除iniparse库。
  • 升级语言环境版本,比如:升级java版本。
  • 适配不同架构,比如:ARM架构

那么通过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”插件,专门用于容器开发,它有几个用处:

  • 可以直接进入容器进行开发,这意味着VSCode的编辑器可以操作容器中的代码。
  • 编辑器的服务器侧插件将被安装到容器中,这意味着插件也将被隔离到容器中,生命周期与容器一致,便于管理和资源利用。
  • 容器中用到的编辑器的配置和插件清单以文件的形式被存储到容器中,如果我们将其随着项目代码上传到代码仓库,就可以实现“项目”与“编辑器”的对应关系。简言就是:可以随着项目版本共享“VSCode”编辑器的配置和插件。

至此,我们将实现整合了“代码-开发环境-编辑器”的开发流程,实现“一次分发即开发”,即:无需额外的操作,就可以完整的恢复开发项目所需的东西。——这就是“程序员的修仙炉”。

接下来是创建修仙炉的一个示例过程,感兴趣的可以继续向下阅读。

创建代码仓库

为了响应国产化,我这里使用国内的“gitee”作为代码仓库:

项目代码仓库示例图

编写Dockerfile

在项目的根目录下创建“Dockerfile”文件,并将项目所需要的环境写到Dockerfile中:

开发环境示例图

代码示例仓库结构如下:

增加Dockerfile文件后的代码仓库图

用vscode进行开发

详情可参阅:remote-container的官方手册

1. 安装插件

打开vscode并安装插件:“Remote – Containers”(建议直接安装“Remote Development”,随着对remote开发越来越熟练后,里面的功能都会用上的):

安装remote-containers插件图

2. 用容器运行开发环境

注意,只有首次创建开发环境比较久(要拉取代码并创建容器和对应卷),在创建完毕后,后续都可以快速的打开(运行容器即可)。

  • 方法1:
    1. 在命令窗口输入:>remote-containers: clone repository in container volume,并回车
    2. 输入仓库地址:https://gitee.com/homqyy/docker-example-development_env,并回车
    3. 选择“create a new volume”(创建一个新卷):这里建议选择它,这样我们可以创建一个自己的卷名,便于记忆。
    4. 输入卷名:docker-example-development_env,并连续按两次回车
    5. 接着就等着docker环境被创建即可。
      • 如果中途出现错误直接点击“retry”即可。
      • 创建完毕后,会有一个“.devcontainer”目录,这个目录是用来存放vscode关于remote-container的配置的,建议一并提交到代码仓库中,这样可以共享关于此项目的vscode的配置。
      • 进入容器的开发环境后,编辑器的左下角有一个“Dev Container: Existing Dockerfile”的标识。

1. 用命令行打开代码仓库图

2. 输入仓库地址图

3. 选择Create a new volume图

4. 输入卷名图

5. 创建完毕图

  • 方法2:点击“remote”的图标,在右上角的下拉框中选择“Containers”,接着点击“+”,随后如“方法1”的操作一致:

用图标打开代码仓库图

到了这里,我们已经顺利的将代码放入到带有纯净开发环境的容器中了。之后我们可以做以下活动

  • 进行开发
  • 开发过程中通过git来同步代码。
  • 更新开发环境后可以push到Registry中。
  • 安装插件到开发环境中(注意,由于这里运行的是容器,因此插件也被很好的隔离了,这样可以更好的管理插件,同时也不会污染主机环境,在删除容器的同时,所有容器相关的资源也都被释放)

结语

致开发者们:你们的热情与张狂,是“时代”的智慧与利剑,加油吧骚年~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年4月30日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 修仙炉介绍
  • 创建代码仓库
  • 编写Dockerfile
  • 用vscode进行开发
    • 1. 安装插件
      • 2. 用容器运行开发环境
      • 结语
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档