【Docker部署SLAM系列2】Docker-desktop部署Ubuntu18.04+ROS+vscode连接+翻车总结(含最新通过rosdep总结)

2023-05-16

文章目录

  • 前言
  • 1、部署Ubuntu18.04容器
  • 2、进入容器
  • 3、配置Ubuntu18.04
  • 4、ROS安装
  • 5、VScode连接docker容器
  • 总结
  • Reference


前言

磨洋工磨洋工,日常磨洋工。

一开始我都是在cmd或者Powershell窗口玩容器的,昨天直接怼进VScode里。

容器里也装了Ubuntu18.04和ROS-melodic。

其实好像啥也没干,跟平常Ubuntu系统里装东西一样。

然后,想实现ssh功能,但是发现翻车了(顺便把这几天实践的总结写在前面):

1. 容器的ssh端口为22,在创建映像暴露时需要映射到本地端口。
2. 慎用 docker commit。镜像所使用的分层存储,除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。
3. 真的想好好用docker,就好好学dockerfile。
4. 在映像里没有梯子,rosdep又是一个坎。把raw.githubusercontent.com的ip全部!全部写进hosts中,后面的就看网络了。
5. (个人愚见)搭建环境最好还是在Linux系统下整活吧,支持度高一点,Windows还是有点不太行。

接上面慎用docker commit,尽量把自己需要的所有环境搭建完后,再commit,是的,这个时候直接黑盒,谁都不用知道(Doge)。

好了,准备再重开docker了。
诶、ORBSLAM2的博文也落下了,再说吧哈哈哈哈。

最后将所有在Windows11下的实践过程记录一下,便于下次在Ubuntu重开,当然在Ubuntu上的话,许多命令可能得加上sudo


1、部署Ubuntu18.04容器

  • 宿主机拉取Ubuntu18.04镜像
docker pull ubuntu:18.04
  • 查看镜像列表
docker images
  • 创建ubuntu16.04容器

说实话,这个命令,根据个人需要,好好斟酌,每篇帖子都不一样,docker run的参数太多了。
docker run官方命令参考:https://docs.docker.com/engine/reference/commandline/run/
ps:docker run:以镜像为基础,创建容器。

我的命令是

docker run -it --name ubuntu18-v1 -p 22:22 -p 80:80 -h ubuntu18-docker-v1 -v [挂载目录绝对路径]:/home ubuntu:18.04 /bin/bash

解释:
-it 终端运行方式:保持 STDIN 打开,并分配一个伪TTY(不要加-d,没办法在后台运行)
–name 创建容器名,随便设置
-p 22:22 端口暴露,将镜像的22端口映射到主机系统的22端口,冒号前的为容器的,冒号后的为镜像的(ps:实践后得,最好不要将容器的端口与主机系统的端口映射一致,毕竟你并不知道你的宿主机这个端口是否被占用,搞个五位数的挺好。如,10088:22)
-h 这个说实话,我不是很理解,指定容器的主机名,目前没用上
-v 挂载,将容器内部的目录挂载到宿主机目录中,随宿主机改动
ubuntu:18.04 本地Ubuntu镜像的版本
/bin/bash 启动方式

诶、这个构建容器太复杂了,很多问题都在这里,比如网络、ssh什么的,我当时就没暴露22,哭了,多看看命令说明吧。

2、进入容器

构建完成后就可以进入容器了。
打开cmd或者powershell(我此时的环境是Windows11,linux的话直接打开终端,记得加sudo),键入以下命令,直接把这个当成容器里的终端了。

docker start ubuntu18-v1		# 开启容器
docker exec -it ubuntu18-v1 /bin/bash		# 进入容器

3、配置Ubuntu18.04

当然就像刚安装完Ubuntu系统一样,

  • 初始化:
apt-get update

ps:初始化如果报http://packages.ros.org/ros/ubuntu xenial InRelease这个错误,可以直接去ROS官网,直接更新最新的key进去,在初始化一下。
在这里插入图片描述

  • 安装vim编辑器
apt-get install vim
  • 安装net-tools
apt-get install net-tools

后面就根据自己需要装东西吧,在没搞懂dockerfile之前,其实全部自己装就行,没啥区别。

4、ROS安装

直接上官网:http://wiki.ros.org/melodic/Installation/Ubuntu

关于ROS只想记录一下rosdep这个东西。
有tizi的话是最稳的,但是容器并没有。这里又跟创建容器的时候有关系了,记得加上-network。
两年前还只有什么,延长一下联网响应的时间,用手机热点啥的。那个时候连手机热点是最管用的,后来也不太行了。
这两年出现了各种奇奇怪怪的方法,先下载下来本地化,小鱼…

but这次,以上我通通都不行,卡了很久。归根结底还是网络问题,但是查找一下ip还是有用的:
根本原因:raw.githubusercontent.com连不上
辅助性措施:在下面这几个网站中选其一,查询一下raw.githubusercontent.com的ip,全部填进/etc/hosts的最后一行,查到几个填几个。
查询ip网址:

  1. https://www.ipaddress.com/
  2. https://ping.chinaz.com/github.com
    在这里插入图片描述

填进/etc/hosts的格式跟文件里原有的格式保持一致就行。
主要还是网络的问题。

5、VScode连接docker容器

  1. 在vscode上面装docker和remote container的插件
    在这里插入图片描述
    在这里插入图片描述

  2. 安装好以后,左边栏会有一个docker的标志,如果此时docker-desktop是在运行的话,这里就能同步得到你的镜像和容器。
    在这里插入图片描述

  3. 运行准备进入的容器,然后右键,点击Attach Visual Studio Code
    在这里插入图片描述
    进去后就可以进行各种操作了。
    在这里插入图片描述


总结

挖个坑吧,有生之年一定出这个系列的3,可视化。

本文若能对你有帮助,自然是好,祝安好。

不喜勿喷,但有错误之处欢迎指出,交流学习。


Reference

  1. https://blog.csdn.net/weixin_41790086/article/details/102932185(慎用docker,拉到帖子最后)
  2. https://blog.csdn.net/frdevolcqzyxynjds/article/details/107248448(docker创建并运行ubuntu16.04容器,不过是在CentOS7上的)
  3. https://blog.csdn.net/weixin_40641725/article/details/105512106(vscode远程连接docker容器)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Docker部署SLAM系列2】Docker-desktop部署Ubuntu18.04+ROS+vscode连接+翻车总结(含最新通过rosdep总结) 的相关文章

  • MDK仿真出现NOT IN SCOPE(不在范围内)

    这两天刚拿到一套GD32F1系列的开发板 xff0c 想着测试一下 xff0c 看和STM32的有啥不同 xff0c 自己仿真时候 xff0c 想要在窗口观察一下数值 xff0c 结果总是提示NOT IN SCOPE没办法 xff0c 就查
  • Keil调试局部变量显示“not in scope“的问题解决

    Keil调试局部变量显示 34 not in scope 34 的问题解决 参考文章 xff1a xff08 1 xff09 Keil调试局部变量显示 34 not in scope 34 的问题解决 xff08 2 xff09 https
  • MPU6050可以读取ID值,温度值和原始数据值为零问题解决

    MPU6050可以读取ID值 xff0c 温度值和原始数据值为零问题解决 参考文章 xff1a xff08 1 xff09 MPU6050可以读取ID值 xff0c 温度值和原始数据值为零问题解决 xff08 2 xff09 https w
  • 英伟达Jetson Xavier NX部署YOLO5

    1 查看JetPack版本 新到手的NX首先需要确定一下JetPack的版本 xff1a sudo apt span class token operator span cache show nvidia span class token
  • 史上最全 | BEV感知算法综述(基于图像/Lidar/多模态数据的3D检测与分割任务)...

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 BEV综述 获取论文 xff01 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文
  • matlab-字符串的处理操作

    建立一个字符串向量 xff0c 然后对该向量做如下处理 xff1a 取第1 5个字符组成的子字符串 将字符串倒过来重新排列 将字符串中的小写字母变成相应的大写字母 xff0c 其余字符不变 统计字符串中小写字母的个数 代码 ch 61 39
  • curl发送带有Authorization的POST请求

    一 参数说明 格式 xff1a curl H 请求头 d 请求体 X POST 接口地址 参数内容格式 H header 请求头 Content Type application json d请求内容 remote host 10 163
  • AStar寻路算法 (C#)

    一 介绍 A星算法其实并不是最短路径算法 xff0c 它找到的路径并不是最短的 xff0c 它的目标首先是能以最快的速度找到通往目的地的路 B星实际上是A星的优化 但是B星的缺点是不能向后查找 所以会有问题 还有一种D星的可以用来找最短路径
  • 深度相机介绍(TOF、RGB双目、结构光参数对比)

    一 深度相机的介绍 随着计算机视觉与人工智能技术的飞速发展 xff0c 采用深度相机进行场景三维重建 目标检测 环境感知等应用越来越广泛 xff0c 与传统的2D相机不同 xff0c 深度相机可以通过拍摄空间来获得景深信息 xff0c 从而
  • 网络编程——UDP

    目录 UDP的服务器端 UDP的echo客户端代码 UDP的echo服务器端代码 UDP的服务器端 先运行服务器端 xff0c 再运行客户端 服务端 xff1a 开发者 xff1a Virtuous 开发版本 xff1a 1 0 开发时间
  • HTTP 完全解析

    Http 详解 HTTP 的定义 HTTP即是 xff1a Hypertext Transfer Protocol xff0c 超文本传输协议 xff0c 种 络传输协议 xff0c 位于 TCP IP 协议族的最顶层 应 层 URL 说到
  • STM32 自定义串口协议

    STM32 自定义串口协议 1 串行通信1 1 原理与优缺点1 2 分类1 2 1 按通信方向1 2 2 按通信方式 1 3 异步串行引脚连接1 3 1 串口外设之间1 3 2 ARM与PC之间 1 4 字符帧格式1 5 串口通信过程1 6
  • 无人机——电机篇(一)

    文章目录 1 电机的定义 2 电机的分类 3 电机的参数 4 电机效率 5 电机的选择 1 电机的定义 电机俗称 马达 是无人机的动力来源 无人机通过改变电机的转速来改变无人机的飞行状态 即改变每个电机的速度 使得无人机能够盘旋空中 上升或
  • HTTP请求/响应报文结构

    HTTP请求报文 一个HTTP请求报文由四个部分组成 xff1a 请求行 请求头部 空行 请求数据 1 请求行 请求行由 请求方法字段 URL字段 和 HTTP协议版本字段 3个字段组成 xff0c 它们用空格分隔 比如 GET data
  • AStar寻路算法

    概述 AStar算法是一种图形搜索算法 xff0c 常用于寻路 他是以广度优先搜索为基础 xff0c 集Dijkstra算法和最佳优先 best fit 于一身的一种算法 示例1 4向 示例2 8向 思路 递归的通过估值函数找到最佳路径 x
  • ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 xff01 说在前面的话 标题 xff1a
  • 什么是地址映射

    ARM体系结构 地址映射 一 什么是地址映射 1 ARM Cortex A8架构 xff0c 32位CPU xff0c CPU设计时就有32根地址线和32根数据线 2 32根地址线决定了CPU的地址空间为4G xff0c 那么这4G空间如何
  • 寄存器和GPIO

    一 什么是GPIO 1 GPIO的英文全称General Purpose Input Output Ports 中文意思是通用I O端口 2 GPIO就是芯片的引脚 xff08 芯片上的引脚有些不是GPIO xff0c 只有一部分是 xff
  • 什么是I2C通信

    ARM体系 I2C通信 一 什么是I2C 1 I2C总线是由Philips公司开发的一种简单 双向二线制同步串行总线 它只需要两根线即可在连接于总线上的设备之间传送信息 2 主设备用于启动总线传送数据 xff0c 并产生时钟以开放传送的设备
  • 什么是AD转换

    ARM体系 ADC 一 什么是ADC 1 ADC xff1a analog digital converter xff0c AD转换 xff0c 模数转换 xff08 也就是模拟转数字 xff09 2 模拟信号只有通过A D转化为数字信号后

随机推荐