当前位置: 首页 > news >正文

以ros的docker镜像为例,探讨docker镜像的使用

标题以ros的docker镜像为例,探讨docker镜像的使用(待完善)

1. docker介绍(以ros工程距离)

(1)个人理解:docker就是一个容器,主要的作用就是将环境打包好,方便在迁移板子的时候一行指令导入原来的开发环境。让用户专心代码开发,而不是重复的安装环境。
(2)注意:docker环境的迁移,是需要平台架构一致的情况下,才可以进行对应的迁移,如果架构不同则需要重新搭建环境。举个例子:在x86上面安装的ros的docker镜像,如果切换一台x86电脑进行开发则可以将原有的环境一键加载到新的电脑里面; 如果是在arm架构(jetson、rk等的ubutnu下)开发,只能迁移到新的arm架构的板子上。

2. docker安装

docker安装其实很简单,按照官网教程一步一步安装即可,也可以参考csdn上面的相关连接(放在文末)。

3. docker配置

为什么需要进行配置,是因国内网络访问不到docker hub镜像网站。这个网站上存放着很多官方的docker镜像,方便用户在基础上进行开发。然后用户直接docker pull 镜像名 的时候会出错,所以需要对此进行配置。
配置的原理大致就是需要写入一些国内的镜像源,然后进行docker等服务的重新启动即可。
(1)首先确定自己的可以正常联网

ping www.baidu.com

(2)检查Docker服务状态

systemctl status docker

没问题就ctrl+c退出即可。

(3)创建daemon.json文件

sudo mkdir -p /etc/docker
sudo touch /etc/docker/daemon.json
sudo gedit /etc/docker/daemon.json

上面的命令,依次是创建文件夹,创建json文件,编辑json文件(个人习惯喜欢gedit,如果用的话需要 sudo apt-get install gedit 进行安装,也可以用其他的编辑器)

然后将下面的内容粘贴进去,保存并退出。(下面的链接可能会存在更新,后期可能是需要进行修改的)

{"registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/" 
],"insecure-registries" : ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],
"debug": true,
"experimental": false
}

填写好之后,需要对daemon的服务进行重启

sudo systemctl daemon-reload

然后对docker 进行重启

sudo systemctl restart docker

然后看看配置好了吗

docker info

4. ros的docker镜像拉取、查看、进入及配置等操作

(1)镜像拉取
以ros镜像为例,打开docker hub网站搜索ros,并查看对应的指令,以下面的照片为例,输入指令

docker pull ros:melodic

在这里插入图片描述
因为经过了上面步骤的配置,这个步骤只要你网络正常正常的情况下都是可以pull成功的。
(2)镜像信息查看
然后运行下面的指令查看所有镜像的相关信息。

docker images

出现如下信息,镜像 tag,id,创建时间和大小等。
在这里插入图片描述
其实还有一个指令docker ps也可以查看镜像的容器的信息,这个是需要镜像运行时查看的,这个后面会用到。

(3)进入镜像
为了方便进入镜像,本文提供一个sh文件,方便进入,再次进入镜像以及相关的配置等

如果是初次进入镜像,使用下面的命令行即可。

docker run -it --rm \--net=host \--privileged \--env="DISPLAY=$DISPLAY" \--env="QT_X11_NO_MITSHM=1" \--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \--device /dev/dri \--device /dev/video0 \--volume="$HOME/ros_ws:/root/ros_ws" \--name ros_melodic_gpu \arm64v8/ros:melodic
参数说明
--net=host使用主机网络,方便 ROS 多节点通信
--privileged授权容器访问所有硬件设备(例如 USB、CAN)
--env="DISPLAY=$DISPLAY"将主机的 GUI 显示传递给容器
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw"X11 的 socket 共享
--device /dev/driGPU 渲染支持(RK3588 支持 OpenGL)
--device /dev/video0摄像头(可根据你实际设备更改)
--volume="$HOME/ros_ws:/root/ros_ws"文件挂载,把你的工作区同步进容器中

二次进行镜像

docker exec -it ros_melodic_gpu bash

5. 更新docker镜像的操作

为什么需要更新docker镜像的操作呢?是因为随着开发的深入,环境是不断的变化的,这个时候是需要对docker的镜像进行更新的(即将新的环境也打包到镜像内)。
对镜像进行更新,需要保持进入镜像的操作,如果退出了镜像则刚刚安装的环境需要重新进行安装哦!

(1)在保持一个命令行是在镜像内,然后把需要的环境安装好之后。

(2)另开一个命令行窗口docker images查看当前镜像的大小。
然后使用docker ps 查看镜像的容器的id(此id和docker images显示的id一般是不一样的)。

(3)然后对镜像进行更新

docker commit <容器ID或名字> <新镜像名>:<tag>

6.导出和导入docker等的操作

为什么需要导入和导出,是为了跨设备部署一样的环境
一般重新部署环境有两种方法,方法1:一个是在docker hub(可以自己上传镜像的)上进行拉取镜像,方法2:另一个是docker load -i tar文件(适合不想把镜像开源的个人和企业)。

(2)以第2种方法为例,首先有一个完整的docker镜像,我现在将docker 镜像打包成tar压缩包

docker save -o <保存路径/文件名.tar> <镜像名>:<tag>

然后跨设备环境部署时,在装好docker后的同平台下,我将tar拷贝到主机上,然后运行下面的指令,即可导入此前建好的环境

docker load -i <镜像tar路径>

这样就可以完整对docker进行使用了。

一下是写此博客参考的链接,侵权删。

ubuntu安装docker的csdn教程

ubuntu安装docker 的官网教程

配置docker的daemon.json参考的教程

http://www.lryc.cn/news/605143.html

相关文章:

  • Docker常用命令速查手册:容器运维七维指南
  • 深入剖析 Spark Shuffle 机制:从原理到实战优化
  • STL:序列式容器
  • 轻松打造Unity小游戏AR体验
  • PHP语法高级篇(七):MySQL数据库
  • OSS-服务端签名Web端直传+STS获取临时凭证+POST签名v4版本开发过程中的细节
  • Spring AOP详细解析
  • [硬件电路-106]:模拟电路 - 电路为什么会出现不同的频率特性?元件频率依赖性、信号传输路径、电路拓扑结构、外部因素
  • 【maven】仓库配置
  • Matrix Theory study notes[6]
  • USRP捕获手机/路由器数据传输信号波形(上)
  • ZKMall商城开源本地部署指南
  • Apache Ignite 集群标识(Cluster ID)和集群标签(Cluster Tag)
  • 【物联网】基于树莓派的物联网开发【18】——树莓派安装Mosquitto服务
  • anaconda和Miniconda安装包32位64位皆可,anaconda和Miniconda有什么区别?
  • 2419. 按位与最大的最长子数组
  • 【 建模分析回顾】[MultiOutputClassifier]MAP - Charting Student Math Misunderstandings
  • mac升级安装python3
  • LeetCode 53 - 最大子数组和
  • 【Unity3D实例-功能-移动】复杂移动(Blend Tree方式)
  • JeecgBoot(1):前后台环境搭建
  • 【Excel】制作双重饼图
  • Linux设备驱动架构相关文章
  • 学习日志22 python
  • CUDA编程9 - 卷积实践
  • Python - 元类
  • 离散扩散模型在数独问题上的复现与应用
  • RAG工作流程总览
  • 解析非法获取计算机信息系统数据罪中的其他技术手段
  • 《超级秘密文件夹》密码遗忘?试用版/正式版找回教程(附界面操作步骤)