基于VSCODE,在DOCKER内运行ORBSLAM2

本文详细介绍了Docker的基本概念、安装与使用,重点讲解了如何利用Docker快速部署和管理ORBSLAM2项目,涉及常用指令、容器与镜像的区别,以及如何在VSCode中集成Docker。
摘要由CSDN通过智能技术生成

1、为什么要用docker安装

1.1docker是啥

自我理解:如果要运行某一个开源库前需要安装太多的依赖,一个一个安装浪费时间且麻烦,docker将相应的依赖放在一个容器里,类似虚拟机,但是虚拟机会安装一些我不需要的东西。所以docker更轻量,docker里的容器可以随便删除。

1.2docker常用指令

1.2.1首先自行百度安装docker

1.2.2docker常见命令

查看所有正在运行的容器:
docker ps
查看所有容器(包括已停止的):
docker ps -a

创建并启动容器:
docker run -it 镜像名
或者指定容器的名称:
docker run --name my_container -d my_image
这里,-it 表示交互模式运行容器,并分配一个伪终端;--name 用于指定容器的名称;-d 表示在后台运行容器。

停止容器:
docker stop 容器名/容器ID
强制停止容器:
docker kill 容器名/容器ID

启动容器:
docker start 容器名/容器ID
重启容器:
docker restart 容器名/容器ID
删除容器:
docker rm 容器名/容器ID
注意,只能删除已停止的容器。

进入容器:
docker attach 容器ID
或者更常用的:
docker exec -it 容器ID /bin/bash
后者可以在正在运行的容器中启动一个新的shell。

查看所有本地镜像:
docker images
从远程仓库拉取镜像:
docker pull 镜像名
查看容器内部细节:
docker inspect 容器ID


查看容器内运行的进程:
docker top 容器ID
查看容器日志:
bash
docker logs 容器名/容器ID

1.3区分容器和镜像

Docker镜像是容器的模板或基础,而容器则是镜像的运行实例

  • Docker镜像:是一个只读的模板,包含了运行应用程序所需的所有内容,如代码、运行时、库、环境变量和配置文件等。镜像可以被视为一个独立的文件系统,包含了创建和启动容器所需的所有依赖。镜像具有轻量级和高效的特点,基于分层的文件系统构建,使得多个镜像可以共享相同的基础层,从而优化存储和传输效率。
  • Docker容器:是由Docker镜像创建的运行实例。容器完全使用沙箱机制,相互隔离,互不影响。容器启动时,Docker引擎会在镜像的基础上创建一个可读写的容器层,并将其与镜像层级联在一起,形成一个新的文件系统作为容器的文件系统。容器中的进程依赖于镜像中的文件,但容器对文件的任何修改都只会在容器层进行,不会影响到原始的镜像文件。

2、如何安装ORBSLAM2

2.1从网上下载好别人的安装脚本(在2.2.3安装运行)

git clone https://github.com/jike5/orbslam2-docker.git

 以下为下载好的脚本,写好了注释,不需要自己在终端添加

# UI permisions
#定义一个变量XSOCK,指向主机上的X11 Unix socket位置。这个socket通常用于X11客户端和服务器之间的通信。
XSOCK=/tmp/.X11-unix
#定义一个变量XAUTH,指定一个临时文件,用于存储X11认证信息。
XAUTH=/tmp/.docker.xauth
#创建或更新$XAUTH指向的文件
touch $XAUTH
#使用xauth命令列出当前显示(由$DISPLAY指定)的认证信息,并使用sed命令修改它,然后将修改后的认证信息合并到$XAUTH文件中。这一步是为了让Docker容器能够访问主机的X11服务器。
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
#修改X11服务器的访问控制,允许名为docker的本地用户访问。
xhost +local:docker

# docker pull jike5/orbslam2-dev:latest

# Create a new container
#-t表示分配一个伪终端,-d表示在后台运行容器。
#--privileged: 给予容器在主机上几乎全部的权限。
#--net=host: 使容器使用主机的网络栈,这样容器内的应用就可以直接看到和使用主机的网络接口。
#--ipc=host: 允许容器使用主机的IPC(进程间通信)命名空间。
docker run -td --privileged --net=host --ipc=host \
    --name="orbslam2" \
#-e "DISPLAY=$DISPLAY": 设置环境变量DISPLAY,这样容器内的应用就知道应该连接到哪个X11显示
    -e "DISPLAY=$DISPLAY" \
#-e "QT_X11_NO_MITSHM=1": 设置环境变量,通常用于解决某些Qt应用在Docker容器中与X11服务器通信的问题。
    -e "QT_X11_NO_MITSHM=1" \
#-v "/tmp/.X11-unix:/tmp/.X11-unix:rw": 将主机上的X11 Unix socket目录挂载到容器内,允许容器访问。
    -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
#-e "XAUTHORITY=$XAUTH": 设置环境变量,指向前面创建的X11认证文件。
    -e "XAUTHORITY=$XAUTH" \
#: 设置ROS(机器人操作系统)的IP地址为127.0.0.1。
    -e ROS_IP=127.0.0.1 \
#为容器添加SYS_PTRACE能力,这通常用于调试。
    --cap-add=SYS_PTRACE \
#将当前目录(pwd)下的workspace目录挂载到容器内的/workspace目录。
    -v `pwd`/workspace:/workspace \
#使用jike5/orbslam2-dev镜像的最新版本。bash: 在容器内启动一个bash shell。
    jike5/orbslam2-dev:latest bash

2.2运行脚本,基于大佬的镜像建立好一个容器

具体安装参考原网站

 2.2.1拉取镜像

docker image pull jike5/orbslam2-dev

2.2.2

在主机建立好路径并下载ORBSLAM2

mkdir -p workspace/data 
cd workspace
git clone https://github.com/jike5/ORB_SLAM2

2.2.3 运行2.1下载内容里的脚本,你则可以搭建一个容器,并且容器里有你需要要的配置

sudo ./run_container_cpu.sh

2.3在容器内运行大佬写的脚本

2.3.1进入容器

docker ps -a | grep orbslam
# you will find you container ID
docker exec -it orbslam3[or container ID] bash

2.3.2 运行两个容器内的脚本

cd /workspace/ORB_SLAM2
./build.sh
./build_ros.sh

3、测试是否安装成功

 我是基于某蓝学院给的第一讲案例进行测试

4、在vscode上运行docker

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值