【泡泡Docker乐园】使用泡泡Docker基础镜像放心大胆地开发吧!

2023-05-16

【泡泡Docker乐园】使用泡泡Docker基础镜像放心大胆地开发吧!

2020-4-7 泡泡推广&编辑组
泡泡Docker乐园,带你进入Docker的狂欢派对

简介:【泡泡Docker乐园】本次将推出一系列便于开发使用的Docker基础镜像集和相关工具链使用教程,消除挡在coding路上的环境障碍。

编译:王琛

审核:刘富强,邱笑晨,吴奇,王强

欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权

1.前言

相信大部分人在coding路上都遇到过这些问题:一不小心就把系统弄坏了不能开机,和别人合作coding环境总是不能一致,每次换电脑或者装系统都要再配一次环境,这个大佬开源的代码环境和我不一样,等等。同样的,对于Docker入门者而言,尤其是对于SLAM相关开发研究人员而言。Docker本身没有可视化界面,也不能直接通过默认Docker设置获取开发环境,看到这么好的工具想进一步使用下去学习成本比较高。

考虑到这样的种种问题,泡泡制作了一系列方便大家用于开发的基础镜像,并释出相关教程来方便大家的开发。相信无论是刚上路的新手还是老练的工程师都能从中受益。

我们这次的工作相关优势有:

  • (1) 拥有可视化界面,对于SLAM和相关领域来说,可视化是必不可少的
  • (2) 可以使用SSH接入,大部分的coding工具都有使用SSH获取远程环境进行开发的功能,也是今天我们要将的开发环境设置方式
  • (3) Docker基础镜像容易扩充,我们发布的镜像基本是最小集,大家可以按照自己的需求对其环境进行补充
  • (4) Docker环境易于同步和保存,不管是换电脑还是与人合作,只要使用同样的Docker镜像环境就是一致的

(5) Docker不会影响本地环境,无论你是新手想要开始学习,还是你想运行各种环境不同的程序,放手去干吧!
后文我们将按顺序介绍泡泡本次的Docker基础镜像集和具体的开发设置。

2.泡泡Docker基础镜像集

本次泡泡总共发布三个系列的Docker基础镜像集:

(1) 使用xfce桌面的ubuntu镜像集,具有比较完整的桌面环境,适合新手进行学习开发。可以通过以下命令获取

$ docker pull optsolution/ubuntu-xfce-vnc

(2) 在(1)基础上安装有ROS的desktop-full版本的镜像集。可以通过以下命令获取

$ docker pull optsolution/ros-vnc

(3) 丢掉笨重的完整桌面,同时使用轻量的openbox支持可视化功能的镜像集。可以通过以下命令获取

$ docker pull optsolution/ubuntu-openbox-vnc

这几个镜像集除了刚刚提到的差异之外,使用的方法一致,在此使用ubuntu-xfce-vnc作为例子详细描述一下。

2.1 Headless模式:

如果你只想要使用最基础的功能,那么最简单的命令就是

$ docker run -it optsolution/ubuntu-xfce-vnc

然后你就可以使用容器的命令行继续工作了。

2.2 VNC模式:

如果你想要看到桌面,那么可以使用命令

$ docker run -it -p 5900:5900 optsolution/ubuntu-xfce-vnc

然后打开你的VNC viewer,输入 :5900 就可以看到桌面了。如下图所示
在这里插入图片描述使用同样的方法使用optsolution/ros-vnc,可以尝试打开rviz。如下图所示
在这里插入图片描述
如果你使用的是ubuntu-openbox-vnc,会到看一片漆黑。不要担心出错了,此时你可以在里面右键操作打开终端等窗口,如下图所示
在这里插入图片描述
在这里插入图片描述
如果你觉得分辨率不太好,想设置自己合适的分辨率,可以使用类似如下命令

$docker run -i -t -p 5900:5900 -e RESOLUTION=1920x1080 optsolution/ubuntu-xfce-vnc

其中 RESOLUTION=width x height,可以自行设置

2.2 SSH模式

如果你希望使用SSH连接由optsolution/ubuntu-xfce-vnc镜像生成的容器,或者你希望按照我们后续的教程进行开发,你可以使用如下的命令

$ docker run -it -p 2222:22 optsolution/ubuntu-xfce-vnc

细心的你应该看到了终端中提示的ssh登陆密码,你可以再开启另一个终端并且使用命令

$ ssh root@localhost -p 2222

然后复制刚刚提示的密码进行连接。当然如果只是终端连接的话未免太无趣了,这样就和Headless模式一样的。重点是这个内容和下部分的开发教程有关。
在这里插入图片描述

SSH模式中有一个已知的问题,如果切换了不同镜像再使用SSH连接的话可能会遇到如下错误

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

原因是和之前保存的密钥冲突。如果你使用的是linux系统,根据提示,打开 ~/.ssh/known_hosts 文件,并删除其中 ecdsa 相关字样的条目就可以了。其他系统应该在ssh软件目录下有类似的文件。

与VNC模式设置分辨率类似,如果你想自己设置ssh密码,可以通过 -e 参数设置SSHPW变量。例如, -e SSHPW=abc123

2.3 同时使用以上所有模式

细心的同学应该发现了以上模式不是必须独立使用,而是可以同时使用的,至少Headless模式一直存在。你可以使用如下命令同时开启三种模式

$ docker run -it -p 5900:5900 -p 2222:22 optsolution/ubuntu-xfce-vnc

分辨率和ssh密码设置的参数也可以加入进来,这里不再赘述。

由系统分配端口

如果年希望由系统分配端口而不是自己指定端口,你可以使用如下命令

$ docker run -it -P optsolution/ubuntu-xfce-vnc

此时你需要使用如下命令查询端口

$ docker port [container_id] [port_id]

如果这里的[port_id]为22,查询的是ssh的端口。如果这里的[port_id]是5900,查询的是vnc的端口。注意使用ssh和vnc viewer的时候输入的参数要对应改变。

3. 开发工具设置(vs code为例)

拉取了泡泡Docker开发基础镜像集之后还不能直接进入开发,首先得配置自己需要的环境。大家按照上面的教程,不管是使用可视化桌面也好,或者是使用命令行也好,都可以放心大胆的配置自己需要的环境。具体内容在此不过多说明。

首先,代码是放在本地系统中的。我们不可能把代码放到镜像中,因为我们不可能频繁更新镜像,最好是环境配置好了以后镜像就不再改变了。所以我们选择使用挂载的方式将本地的代码挂在到容器中。

配置好了环境之后就需要进行开发工具的配置了,以vs code为例介绍两种方案。

第一种是看起来只有vs code支持的插件种类。请先安装图中给出的插件。

在这里插入图片描述
看名字就知道了,这个插件就是用来直接连接docker容器的工具。此时开启一个容器,使用-v参数挂载上自己的代码,类似如下的命令

$ docker run -it -p 5900:5900 -v /home/cwang/code/test:/home/test optsolution/ubuntu-openbox-vnc

当然,是否选择使用vnc或者ssh工具由你自己决定。然后打开vscode,点击左下角的这个蓝色标签

在这里插入图片描述
在弹出的选项中选择 Remote-Containers:Attach to Running Container… 然后选择刚刚启动的容器。此时会自动打开一个新的vs code窗口并自动设置开发环境。当环境自动设置好了以后选择自己的代码挂载的路径就可以了。此时可以看到左下角的蓝色标签写上了对应镜像的名字,此时开启vs code的终端可以看到已经是容器的环境了。接下来就可以尽情开发了。

第一种方案目前只看到vs code有这种功能,只要使用该插件,不需要其他的工具就可以直接使用容器中的环境进行开发。该插件还有其他很多种玩法大家可以自己尝试。
这里跑一个简单的读取再显示的小demo给大家看看效果。请注意,如果程序是带显示的请在vnc viewer中运行。
在这里插入图片描述
第二种方法是使用SSH连接。虽然不及第一种更方便,但是大多数常用的IDE都有这样的功能,因此使用范围比较广。同样的这里还是以vs code为例介绍,其他IDE的类似使用方法可以参考各自的文档。

在vs code中安装如下插件
在这里插入图片描述

首先还是启动一个容器,并将自己的代码挂载到容器中,和第一种方法不同的是,此时必须使用ssh模式。即使用类似如下命令

$ docker run -it -p 2222:22 -v /home/cwang/code/test:/home/test optsolution/ubuntu-openbox-vnc

同样的还是点击左下角的蓝色图标,这次是选择 Remote-SSH:Connect to Host… 。然后输入root@[ip]:[port],比如root@localhost:2222,如果报错可以参照上部分提到的方案解决。和第一种方法类似,按照指示确定并输入密码就可以连接到容器环境。等待环境自动配置完毕,选择自己挂载的文件夹就可以开始coding了。

总结

本次泡泡给大家释出了几个Docker基础镜像集方便大家开发,主要集成了vnc和ssh等方便开发调试的功能。同时介绍了如何配置开发工具的方法。

希望大家在coding的路上更加顺利!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【泡泡Docker乐园】使用泡泡Docker基础镜像放心大胆地开发吧! 的相关文章

随机推荐

  • JS基础 ——解释执行

    文章目录 前言一 词法分析二 预编译创建全局作用域GO对象创建局部作用域AO对象 三 代码执行总结 前言 大家都知道 xff0c JS是一种不需要编译的解释型语言 但其实在浏览器执行JS代码前 xff0c 也有一个词法分析和预编译过程 xf
  • vue 项目中引入字体文件的正确方式~

    文章目录 前言一 开发中需要什么样的字体1 字体图标2 特殊字体 二 项目中引入字体文件1 字体文件2 css文件3 项目使用该字体 总结 前言 在UI设计稿中 xff0c 可能会有一些特殊字体 xff0c 或者是一些字体图标 对于特殊字体
  • vue3 使用 swiper轮播库

    文章目录 前言一 Swiper引入方式1 HTML标签引入方式2 CommonJs引入方式3 ES引入方式 xff08 采用 xff09 二 使用Swiper总结 前言 轮播图在前端开发中 xff0c 是常见需求 而Swiper库是最受前端
  • vue-cli2 老项目webpack3升级webpack5过程总结

    文章目录 背景一 webpack5环境要求二 升级步骤1 脚手架webpack cli2 升级webpack包3 更新webpack相关插件3 1 不推荐或被移除的插件3 2 升级babel到7版本3 3 更新插件 4 修改配置4 1 新增
  • 前端下载文件

    文章目录 前言二进制流前端核心实现下载功能有 xff1a 一 a标签 43 download属性二 window open url 34 blank 34 三 form表单四 接口请求 43 blob 43 a标签 43 download属
  • 前端JS 云打印 LODOP实践

    文章目录 前言一 Lodop是什么 xff1f 二 如何使用Lodop1 下载打印插件2 配置打印机3 html中植入打印控件4 调用Lodop对应的JS相关方法接口实现打印功能 三 Lodop主要方法接口三 注意点总结 前言 一般B S系
  • axios源码——工具函数utils.js

    文章目录 前言一 工具函数所在目录二 判定数据类型的函数1 isArray 判定数组 2 isString 判定字符串 3 isNumber 判定数值 4 isObject 判定对象 5 isPlainObject 判定纯对象 6 isUn
  • 源码阅读——validate-npm-package-name

    文章目录 前言一 源码阅读工具二 阅读源码1 目录结构2 package json3 index js 三 使用该包1 vue cli中使用2 create react app 中使用 总结 前言 validate npm package
  • 学习rtklib

    数据下载 日期转换和一些常用数据下载 http www gnsscalendar com index html year 61 2019 多系统精密星历和精密钟差下载 2021年10月25日更新 xff1a 单GPS精密星历文件要在这里下载
  • echarts 绘制多条折线图(横坐标,折线图条数不确定)

    项目场景 xff1a 使用echarts做业务图表统计 xff0c 记录一下在项目中图表接口返回的数据处理问题 需求描述 1 一个统计图中实现多条折现图的显示 xff0c 如下图所示 2 后台返回的数据结构 span class token
  • 线性二次型调节器(LQR)原理详解

    文章目录 前言算法解释代价函数的意义 推导过程可控性LQR控制实例参考资料 前言 LQR Linaer Quadratic Regulator xff0c 即线性二次型调节器 xff0c 是一种现代控制理论中设计状态反馈控制器 State
  • 嵌入式软件工程师常见面试问题

    嵌入式软件工程师面试题 1 stm32启动方式 xff1f 有三种 xff1a 从Flash启动 xff0c 将Flash地址0x0800 0000映射到0x00000000 这样启动以后就相当于从0x0800 0000开始的 xff0c
  • 使用python爬虫把自己的CSDN文章爬取下来并保存到MD文件

    导言 爬虫作为一个敏感技术 xff0c 千万要把握好 xff0c 如果人家不让爬那就不要头铁去试了 如何确定某个网站是否允许爬虫 在域名后面加上 robots txt查看即可 xff0c 例如 xff1a https blog csdn n
  • 寻找矩阵中的指定路径

    给定一个矩阵和一个要找的字符串 xff0c 如果有的话找出矩阵中的字符串路径 测试用例 功能测试 xff1a 在多行多列的矩阵中存在或者不存在路径 边界值测试 xff1a 矩阵只有一行或一列 xff1b 矩阵和路径中的所有字母都是相同的 特
  • Kalibr标定Intel D435i相机

    Kalibr标定Intel D435i相机 文章目录 Kalibr标定Intel D435i相机1 相机标定2 IMU标定3 相机 43 IMU联合标定4 标定结果评价 系统环境 xff1a ubuntu16 04 43 roskineti
  • VINS初始化

    VINS初始化 VINS初始化之外参在线标定 前面主要分析了外参标定出来旋转矩阵 xff0c 接下来接着分析初始化 if solver flag 61 61 INITIAL if frame count 61 61 WINDOW SIZE
  • ROS中关于两个话题时间同步遇到的问题 message_filters

    ROS中关于两个话题时间同步遇到的问题 message filters 参考链接 CMakeFiles imu data dir src imu data cpp o xff1a 在函数 message filters Synchroniz
  • ROS之多传感器融合算法实现

    ROS之多传感器融合算法实现 文章目录 1 motivation2 method2 1 订阅ROS的多个话题并对数据进行处理2 2 订阅ROS的多个话题并发布成一个话题 1 motivation IntelRealsenseD435i传感器
  • ignav代码阅读笔记

    整个代码还是根据rtklib进行改的 xff0c 功能很完善 xff0c 但是我主要只关注ppp ins紧组合 代码链接 https github com Erensu ignav 代码功能 可以完成ppp和ins的紧组合 xff0c 把c
  • 【泡泡Docker乐园】使用泡泡Docker基础镜像放心大胆地开发吧!

    泡泡Docker乐园 使用泡泡Docker基础镜像放心大胆地开发吧 xff01 2020 4 7 泡泡推广 amp 编辑组 泡泡Docker乐园 xff0c 带你进入Docker的狂欢派对 简介 xff1a 泡泡Docker乐园 本次将推出