type
status
date
slug
summary
tags
category
icon
password

1 为什么要使用Docker?

Docker是目前使用最广泛的容器,在各种应用场景中都有广泛的应用。至于Docker是什么以及Docker的优势,互联网上有很多相关的资料可以参考,这里也就没有必要在复制一遍了。只需要知道Docker的两个概念就可以:镜像与容器。镜像都很熟悉,一个系统安装肯定有镜像。安装win系统要制作镜像盘,安装linux也要镜像。只不过Docker的镜像可以包含的东西更多一点,就是一个定制化的镜像,可以提前把一大堆依赖打包到这个镜像里面,这样你加载这个镜像到容器时候就不需要安装依赖了。容器就是实际运行的系统。
至于为什么需要使用Docker,那肯定是因为有这个虚拟机的需求。今天编译一个这个版本的开源工程,明天编译一个那个版本的开源工程。诚然我们可以展示一下自己深厚的debug能力,各种改cmake文件,各种加软连接。但是对于要求花样繁多的开源工程而言,还是直接套个Docker壳子比较省事。

2 怎么安装Docker?

网络上的教程也比较多,我这里写的只是我配置的过程,仅供参考,我使用的系统是ubuntu20.04。

2.1 安装Docker

更新一下软件包
安装依赖,添加Docker密钥
显示OK,进行下一步
添加官方仓库
安装Docker
检查是否安装成功
如果显示出Docker版本,就说明安装成功了。这个过程基本上没有什么阻碍,唯一的阻碍可能是网络问题。

2.2 一些额外的配置

配置普通用户使用权限

Docker默认是需要sudo权限来使用的,这样子使用vscode的docker插件会不显示,所以需要配置一下。依次运行下面的命令就可以:

安装vscode的Docker插件

vscode的插件市场安装就可以

配置一下Docker的管理软件Portainer

拉取一下portainer的镜像
运行portainer
这个命令就是运行portainer,端口为9000,总是随着docker一块重启。
运行完成之后,我们访问127.0.0.1:9000就能访问portainer了。
notion image
notion image
管理非常的方便,避免记一大堆命令。

docker中的ros与物理机的通讯

其实实现docker中的ros与物理机通讯也非常简单,只要在rundocker镜像时候,设置--net=host就可以了,这个意思就是docker网络暴露在物理机上。尽管存在一些安全风险,但是对于ros而言影响不大。

配置过程

我们拉取一下包含ros的镜像,测试一下。这里直接拉取了一个ros-desktop-full的镜像做测试,镜像还是比较大的,网络不好的小伙伴慎重。
然后选择到自己的工程文件夹中配置dockerfile
将下面的配置文件写入dockerfile:
然后运行下面的命令编译文件
编译完成后运行启动命令进入容器
这里就是设置了--net=host。

测试

 
进入容器之后,可以看到有一个ros_entrypoint.sh文件,使用./ros_entrypoint.sh来运行一下,就可以运行roscore了。
这时候我们在物理机上检查一下话题,发现有对应的话题。
notion image
或者在物理机上运行一个ros话题,反向也能在docker里面查询到。这里忘记截图了,就不展示了。
使用这个方法可以轻松的实现不同ros环境之间的通讯,利用物理机上的可视化程序来查看消息,避免像大部分教程里面的安装虚拟桌面等等比较绕远的方法。
 
在系统中安装OPENCV在VIM中安装YouCompleteMe(VIM与Cpp环境配置)