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

发布于:2025-07-31 ⋅ 阅读:(18) ⋅ 点赞:(0)

标题以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/dri GPU 渲染支持(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参考的教程


网站公告

今日签到

点亮在社区的每一天
去签到