docker容器为基础 编译运行minob

docker 容器的创建、attach与退出(ubuntu为例)

  1. 需要先pull一个ubuntu 20.04的镜像

  • 创建容器
docker run -it --name minob_ubuntu --privileged -v /mnt/c/NonSystemThing/docker_file_shared/miniob:/root/docker_file_shared ubuntu:20.04

可以通过以下两种方法之一来退出 Docker 容器的命令行,并让容器在后台继续运行:

方法一:使用 Ctrl + PCtrl + Q 组合键

这是 Docker 提供的一个快捷方式,用于让容器在后台继续运行而不退出容器。

  1. 进入容器后,不要直接输入 exit

  2. 按下 Ctrl + P,然后按 Ctrl + Q。这会把你从容器的交互模式中分离出来,但容器会继续在后台运行。

方法二:使用 docker exec 进入容器并运行新的命令

你也可以选择进入已经运行的容器并执行新命令,避免退出当前的进程。

  1. 退出当前的交互式容器会话(输入 exit),这时容器会停止。

  2. 使用以下命令重新进入容器:

  3. bash

  4. 复制编辑

  5. docker exec -it minob_ubuntu bash

  6. 这样你可以进入容器并执行新的命令。

想要再次进入容器命令行:

docker attach命令

  • 附加到主进程docker attach 会连接到容器的主进程(即容器启动时指定的命令,比如用 docker run -it ubuntu:20.04 bash 启动的容器,主进程是 bash)。

  • 会共享输入输出:直接与主进程的输入输出进行交互。如果主进程终止(例如你退出了 bash),容器也会停止。

  • 无法启动新的进程:无法在容器中启动额外的进程,只能与容器的主进程进行交互。

docker exec

  • 启动新进程docker exec 允许你在容器中启动一个新的进程,而不会干扰主进程。你可以启动一个新的 shell 或其他命令。

  • 不会影响容器的状态:即使你通过 docker exec 启动新的进程并退出,它不会导致主进程(或容器)停止运行。

  • 多次执行:你可以多次使用 docker exec 进入容器并启动多个不同的进程。

主要区别:

  1. attach 连接到容器的主进程,并且与该进程共享输入和输出。如果主进程结束,容器会停止。

  2. exec 启动新的进程,不会影响容器的主进程,因此可以进行多次交互。

具体场景中:

  • 如果希望继续与容器的主进程(例如 bash)交互,可以使用 docker attach

  • 如果希望启动一个新的 bash 进程并继续使用容器而不影响主进程,可以使用 docker exec

如果你使用 docker attach 后想退出,只需要按 Ctrl + C,但这可能会导致容器退出。如果你希望保留容器继续运行并退出当前会话,docker exec 是更好的选择。

因此推荐使用docker exec -it minob_ubuntu bash命令再次进入容器

  • 如果想关闭容器,可以使用docker stop minob_ubuntu命令

  • 启动刚刚创建的docker容器
docker start minob_ubuntu

这个命令会启动容器,但不会自动进入容器的交互模式。如果希望在启动容器后进入交互模式,可以执行:

docker start -i minob_ubuntu

-i 选项会在启动容器时将你附加到容器的标准输入输出流,这样你就可以进入容器的 shell。

另外,使用 docker ps 查看容器状态时,容器会显示为“Up”,表示已经成功启动。

  • 安装必要的库
apt update # essential
apt upgrade
apt-get install sudo
apt-get install git

minob编译

拉取仓库:

git clone https://github.com/oceanbase/miniob 

之后可以参考文档进行build https://github.com/oceanbase/miniob/blob/main/docs/docs/how\_to\_build.md

  1. 拉取对应的依赖
bash build.sh init
  • 编译链接minob
bash build.sh (build/release) --make -j

之后可以参考文档运行 https://github.com/oceanbase/miniob/blob/main/docs/docs/how\_to\_run.md


vscode使用cpptools插件编译与运行配置

c_cpp_properties.json(ctrl+P: edit…)

{
"configurations": [
{
"name": "Linux",
"compilerPath": "/usr/bin/clang-14",
"cStandard": "c17",
"intelliSenseMode": "linux-clang-x64",
"configurationProvider": "ms-vscode.cpptools",
"compileCommands": "build/compile_commands.json",
}
],
"version": 4
}

launch.json

{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "cppdbg",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/${defaultBuildTask}/bin/observer",
"args": ["-f", "${workspaceFolder}/etc/observer.ini", "-P", "cli"],
"cwd": "${workspaceFolder}/${defaultBuildTask}/",
"internalConsoleOptions": "openOnSessionStart",
"osx": {
"MIMode": "lldb",
"externalConsole":true
},
"stopAtEntry": true
},
// {
// "type": "lldb",
// "request": "launch",
// "name": "LLDB",
// "program": "${workspaceFolder}/${defaultBuildTask}/bin/observer",
// "args": ["-f", "${workspaceFolder}/etc/observer.ini", "-P", "cli"],
// "cwd": "${workspaceFolder}/${defaultBuildTask}/"
// }
]
}