使用 Docker 和 VSCode 远程开发 Miniob

本文档阐述如何使用 Docker 构建一个具备 Miniob 开发环境的容器,并且通过 VSCode 的 Remote-SSH 插件 SSH 到容器中进行远程开发。Docker 和 VSCode 可以安装在不同机器上。

方法简单易行,仅需配置 2 个 环境变量(仓库 URL、SSH秘钥)及安装必要的 VSCode 开发插件即可。

安装 Docker 和 Docker-compose

Windows

参考本仓库文档 在 Windows 上使用 Docker 安装 Docker Desktop 即可。只需执行 安装 Docker 这一小节。

Linux

如果你选择在远程建议参考官方文档安装 Docker EngineDocker Compose.

安装 VSCode

前往官网下载 Visual Studio Code,正常安装即可。

配置 Dockerfile

文件在 docker/Dockerfile.

配置 Root 密码

默认密码 root,可在 64 行自行修改。不需修改可跳过。

若镜像于服务器运行建议使用强密码,并在第一次登录后关闭密码登录,改用秘钥登录。

配置 Docker Compose

Fork 仓库

Fork 本仓库,复制 Fork 后仓库的 HTTPS 地址,如 https://github.com/oceanbase/miniob.git.

也可以不 Fork,用本仓库 Git HTTPS 地址,后续自行进行 git remote add.

下面配置镜像中的仓库 URL 及克隆方式。

修改 docker/docker-compose.yml 文件的最后两行。注意等号前后不要有空格。

Clone by SSH

REPO_ADDR 设置为 SSH URL, 如:git@github.com:oceanbase/miniob.git

Clone by HTTPS

私有仓库

如果 fork 出来的是私有仓库。

假设仓库 HTTPS 地址为:https://github.com/oceanbase/miniob.git.

REPO_ADDR 格式:https://<username>:<password>@github.com/oceanbase/miniob.git

usernamepassword GitHub / Gitee(GitHub 不支持 password,需要创建 token,见链接)。

用户名如果是邮箱,字符 '@' 需要转义为 '%40'.

# example
REPO_ADDR=https://oceanbase%40email.com:mypassword@github.com/oceanbase/miniob.git

公有仓库

如果 fork 出的是公有仓库,直接将 REPO_ADDR 设置为仓库地址即可。

REPO_ADDR=https://github.com/oceanbase/miniob.git

配置映射端口

默认映射本机端口 10000 到容器端口 22. 可在 docker-compose.yml 中自行修改。不许修改可跳过此步骤。

启动容器

Clone by SSH

如果用 SSH 的方式 clone,需要将 Github/Gitee 对应的 SSH 私钥设置到环境变量内再启动 Container.

假设 Github/Gitee 上传的公钥对应的秘钥位于 ~/.ssh/id_rsa.

terminal 进入本仓库 docker 目录,在 docker 目录下执行命令启动容器。

Linux Shell

export PRIVATE_KEY=$(cat ~/.ssh/id_rsa) && docker-compose up -d --build

Windows Powershell

$env:PRIVATE_KEY=$(cat ~/.ssh/id_rsa) && docker-compose up -d --build

Clone by HTTPS

不需要 PRIVATE_KEY 环境变量。

docker-compose up -d --build

此输出表示容器启动成功。

container started

管理容器

一些管理容器的命令。

# 停止容器
docker stop miniob-dev

# 启动容器
docker start miniob-dev

# 重启容器
docker restart miniob-dev

使用 VSCode 远程开发

打开 VSCode,设置远程开发及调试。

安装 Remote-SSH 插件

一般会默认安装。快捷键组合 Ctrl + Shift + x 打开 VSCode 插件面板,检查 Remote - SSH 插件是否安装,如果没有安装就安装此插件。

remote ssh

连接 Docker 容器

配置 SSH Host

按快捷键 Ctrl + p, 输入 remote-ssh: connect to host 连接远程主机。

connect to host

选择 Add new ssh host.

add ssh host

输入命令.

ssh root@localhost -p 10000

以 root 用户连接容器的 10000 端口.

ssh cmd

选择写入哪个配置文件,默认第一个就行。

ssh config ifle

连接容器

按快捷键 Ctrl + p, 输入 remote-ssh: connect to host 连接远程主机。

主机选 localhost 并回车,跳出密码输入页面。若在之前步骤没有修改,密码默认为 root.

password

打开代码目录

代码位于 /root/source/miniob. 点击左侧 open folder,进入该目录。需要再输入一次密码。

open folder

安装开发插件

Ctrl + Shift + x 打开 VSCode 插件面板, 安装如下插件. 注意要安装在 Docker 容器中,点击 install in SSH:localhost.

C/C++ 和 C/C++ Extension Pack.

ext1

C/C++ Extension Pack 安装好后会让你选择 kits, 选 GCC 8.5 这个。

kits

CMake 和 CMake Tools.

ext2

进行 Debug

启动 Server

在 src/observer/sql/parser/parse_stage.cpp 的 handle_event 函数开头打个断点, 也就是第 90 行。

按 F5 开始调试。出现如下界面表示 miniob 的 server 端启动成功。

server started

启动 Client

Ctrl + Shift + ` 新启动一个 shell.

执行 ./build/bin/obclient 启动客户端.

执行 SQL

执行一句 SQL 测试断点是否正常工作。

show tables;

debug

正常进入断点。后续可以配置 Git 进行开发了。