github自定义codespace

github codespace的作用

github提供的codespace功能,实际上就是一台docker虚拟机(默认2核8GB内存32GB磁盘空间),且默认情况下,该虚拟机已经为我们默认安装了一些基础的开发环境,如java、python环境等等。
好处是该虚拟机位于外网,在编译各种软件时,可以通过极快的网速下载各种依赖,几乎不会出现像国内网络经常遇到的下载某个依赖失败的情况(Timeout)。

免费版版本的限制:

  • codespace不能作为常驻服务器使用,因为一段时间不使用,就会自动关闭
  • codespace可使用的资源(cpu,内存和磁盘)有限制,但是提供的资源几乎可以满足个人的绝大部分需求了

默认情况下,Github的codespace的虚拟机是一个Ubuntu系统,可能不一定能够满足我们的需求(比如说我们可能需要一个centos环境)。
幸运的是,codespace也支持自定义,因此我们可以自定义一套满足自身需求的codespace。

自定义codespace

自定义配置如下。

制定.devcontainer

在指定仓库中的根目录下,创建一个文件夹:.devcontainer.
在该文件夹中创建两个文件。

  • devcontainer.json,该文件用于声明容器的环境
  • Dockerfile,用于定义docker镜像
devcontainer.json文件

下面就是devcontainer.json的一个案例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "CentOS Dev Container001",
"build": {
"dockerfile": "Dockerfile"
},
"settings": {
"terminal.integrated.defaultProfile.linux": "bash"
},
"extensions": [
"ms-python.python",
"redhat.vscode-yaml"
],
"remoteUser": "root"
}

其中

  • name用于声明docker容器的名字。
  • build制定如何构建镜像,这里选择使用Dockerfile
  • settings,用于配置VSCode在docker容器中的默认配置
  • extensions,用于配置VSCode的扩展插件
  • remoteUser,用于指明登录该docker容器的用户
Dockerfile文件

Dockerfile案例如下所示,和普通的Dockerfile文件完全一样。

1
2
3
4
5
# 使用 CentOS 作为基础镜像
FROM bigtop/slaves:3.3.0-centos-7

# 设置默认用户和工作目录
WORKDIR /opt

.devcontainer推送到github仓库

.devcontainer文件夹及内部的文件作为一次修改,推送到github上的远程仓库中。

在github上创建容器

登录github,选择你上一步推送的仓库。
按照如下方式,开始创建自定义codespace。
Pasted image 20250106232418

在新弹出的页面中,进行如下选择。
其中:

  • branch: 选择.devcontainer所推送的那个分支
  • Dev container configuration,会自动解析devcontainer.json中的name,并在此展示
  • region保持默认和Machine type保持默认即可

IMG-20250106235831116

点击Create codespace即可在github上创建一个自定义的Docker容器。

打开codespace的方式

当codespace创建OK之后,github支持多种打开方式,常用的如下。

  • 使用浏览器直接打开
  • 使用VSCode打开 (需要本机安装VSCode,注意衍生的版本不行,如Cusor,VSCodium就不支持)
    IMG-20250106234150677