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](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fec8491c3-9702-49eb-b223-fbc77244d09e%2Fc413bcd7-03f6-4f15-bd63-7867d6077910%2FUntitled.png?table=block&id=28eae199-f641-4128-9228-7ccb8fdc7c0e&t=28eae199-f641-4128-9228-7ccb8fdc7c0e)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fec8491c3-9702-49eb-b223-fbc77244d09e%2F4ddcef04-6079-4af3-adc5-e24cd2762ddb%2FUntitled.png?table=block&id=20e025f7-d611-47ec-b1d7-3a90cc9e65df&t=20e025f7-d611-47ec-b1d7-3a90cc9e65df)
管理非常的方便,避免记一大堆命令。
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](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fec8491c3-9702-49eb-b223-fbc77244d09e%2F6f07a329-60b2-4ac5-a7b2-9912a8746c2c%2FUntitled.png?table=block&id=d1df7848-7408-4ccf-9820-76eefc470abe&t=d1df7848-7408-4ccf-9820-76eefc470abe)
或者在物理机上运行一个ros话题,反向也能在docker里面查询到。这里忘记截图了,就不展示了。
使用这个方法可以轻松的实现不同ros环境之间的通讯,利用物理机上的可视化程序来查看消息,避免像大部分教程里面的安装虚拟桌面等等比较绕远的方法。
- 作者:獭兔不是懒兔
- 链接:https://zachou.top/article/66754a8a-d81f-4ff9-8a83-99024edfcbfb
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章