Bootstrap

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


前言

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

一开始我都是在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容器)
;