以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 \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 bash

5. 更新docker镜像的操作

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

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

(2)另开一个命令行窗口docker images查看当前镜像的大小。

然后使用docker ps 查看镜像的容器的id(此id和docker images显示的id一般是不一样的)。

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

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

一般情况下 <新镜像名>:是已经进入这个镜像的名称和tag,这相当于对这个进行覆盖

(4)然后查看是否更新

docker images

查看刚刚进入的环境的size是否变大,如果变大就是说明环境已经更新了,下次在进入该环境就有了这次安装的一些包.

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

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

以第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.pswp.cn/web/91593.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Audio实战——TimeCheck机制解析(十三)

上一篇文章我们虽然通过 tombstoned Log 推断出 audioserver 崩溃的原因就是系统调用内核接口时发生阻塞,导致 TimeCheck 检测超时异常而崩溃,但并没有实质性的证据证明是 kernel 层出现问题导致的崩溃,因此这里我们继续看一下 TimeCheck 的检测原理。 一、TimeCheck机制 T…

飞机大战小游戏

1.视觉设计&#xff1a;采用柔和的蓝紫色渐变背景&#xff0c;营造梦幻感飞机、敌机和子弹使用柔和的糖果色调添加了粒子爆炸效果&#xff0c;增强视觉反馈星星收集物增加游戏趣味性2.游戏机制&#xff1a;玩家使用左右方向键控制飞机移动空格键发射子弹P键暂停游戏击落敌机获得…

Linux 启动服务脚本

1. 创建命令文件# 创建可执行文件 touch 文件名称 例&#xff1a; touch stopServer.sh2. 命令文件授权# 授权文件可执行权限 chmod 777 文件名称 例&#xff1a; chmod 777 stopServer.sh3. 停止服务命令编写#!/bin/bash# 获取进程号 pidps -ef | grep -- /mnt/apache-tomcat-…

【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置

文章目录34. 在排序数组中查找元素的第一个和最后一个位置描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析双重二分查找详解左边界查找过程右边界查找过程算法流程图边界情况分析各种解法对比二分查找变种详解时间复…

【网络编程】WebSocket 实现简易Web多人聊天室

一、实现思路 Web端就是使用html JavaScript来实现页面&#xff0c;通过WebSocket长连接和服务器保持通讯&#xff0c;协议的payload使用JSON格式封装 服务端使用C配合第三方库WebSocket和nlonlohmann库来实现 二、Web端 2.1 界面显示 首先&#xff0c;使用html来设计一个…

AI 驱动、设施扩展、验证器强化、上线 EVM 测试网,Injective 近期动态全更新!

作为一个专注于金融应用、且具有高度可互操作性的高性能 Layer-1 区块链&#xff0c;Injective 自诞生以来便为开发者提供有即插即用的技术模块&#xff0c;以便开发者能够更好地搭建新一代 Web3 金融类应用。谈及项目发展的愿景和基本定位&#xff0c;创始团队曾提到希望 Inje…

Qt-----初识

1. 什么是Qt定义&#xff1a;Qt是一个跨平台的应用程序和用户界面框架&#xff0c;主要用于开发具有图形用户界面的应用程序&#xff0c;同时也支持非GUI程序的开发。 编程语言&#xff1a;主要使用C&#xff0c;但也提供了对Python&#xff08;PyQt&#xff09;、JavaScript&a…

理解微信体系中的 AppID、OpenID 和 UnionID

前言: 在开发微信相关的服务(如小程序,公众号,微信开放平台等)时,很多人都会接触到几个看起来相似但实际用途不同的额ID: AppiD, OpenID,UnionID. 搞清楚这三者的区别,是微信生态开发中的基本功,本文将从开发者视角触发,深入浅出地解释它们的关系,区别以及实际应用场景一.什么是…

FFmpeg,如何插入SEI自定义数据

FFmpeg&#xff0c;如何插入SEI自定义数据 一、什么是SEI&#xff1f; SEI&#xff08;Supplemental Enhancement Information&#xff0c;补充增强信息&#xff09;是H.264/H.265视频编码标准中的一种元数据载体&#xff0c;它允许在视频流中嵌入额外的信息&#xff0c;如时…

为什么分类任务偏爱交叉熵?MSE 为何折戟?

在机器学习的世界里&#xff0c;损失函数是模型的“指南针”——它定义了模型“好坏”的标准&#xff0c;直接决定了参数优化的方向。对于分类任务&#xff08;比如判断一张图片是猫还是狗&#xff09;&#xff0c;我们通常会选择交叉熵作为损失函数&#xff1b;而在回归任务&a…

[echarts]横向柱状图

前言 接到一个需求&#xff0c;需要展示一个横向的柱状图&#xff0c;按数量从大到小排序&#xff0c;并定时刷新 使用react配合echarts进行实现。 react引入echarts import React, { useEffect, useRef } from react; import * as echarts from echarts; import DeviceApi fro…

【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务

​​引言​​ 如果你经常被 Docker 镜像拉取、GitHub 文件下载的龟速折磨&#xff0c;又不想依赖第三方加速服务&#xff08;担心稳定性或隐私&#xff09;&#xff0c;今天分享的 ​​HubProxy​​ 可能正是你需要的。这个开源工具用一行命令就能部署&#xff0c;以极低资源消…

java web jsp jstl练习

JSP 的学习。 核心功能模块 1. 源代码层 &#xff08; src &#xff09; HelloWorld &#xff1a;主程序入口领域模型 &#xff1a; domain 包含User.java和ceshi.java控制器 &#xff1a; servlet 包含登录验证和验证码相关ServletWeb表现层 &#xff08; web &#xff09; JS…

VSCode 完全指南:释放你的编码潜能

零、简介 在当今的软件开发领域&#xff0c;代码编辑器的选择至关重要&#xff0c;它就像是工匠手中的工具&#xff0c;直接影响着工作效率和成果质量。Visual Studio Code&#xff08;简称 VSCode&#xff09;自问世以来&#xff0c;迅速在全球开发者社区中崭露头角&#xff…

《n8n基础教学》第一节:如何使用编辑器UI界面

在本课中&#xff0c;你将学习如何操作编辑器界面。我们将浏览画布&#xff0c;向您展示每个图标的含义&#xff0c;以及在 n8n 中构建工作流程时在哪里可以找到您需要的东西。本课程基于 n8n 最新版本 。在其他版本中&#xff0c;某些用户界面可能有所不同&#xff0c;但这不会…

gcc g++ makefile CMakeLists.txt cmake make 的关系

gcc&#xff1a;C语言编译器g&#xff1a;C编译器makefile&#xff1a;定义编译规则、依赖关系和构建目标。可以手动编写&#xff0c;也可以由CMakeLists.txt生成cmake&#xff1a;读取CMakeLists.txt文件&#xff0c;生成Makefilemake&#xff1a;构建工具&#xff0c;执行Mak…

SFT 训练器

SFT 训练器 “训练时间到!” 我们现在终于可以创建一个监督微调训练器的实例了: trainer = SFTTrainer( model=model, processing_class=tokenizer, args=sft_config, train_dataset=dataset, )SFTTrainer 已经对数据集进行了预处理,因此我们可以深入查看,了解每个小批次…

Android Material Components 全面解析:打造现代化 Material Design 应用

引言 在当今移动应用开发领域&#xff0c;用户体验(UX)已成为决定应用成功与否的关键因素之一。Google推出的Material Design设计语言为开发者提供了一套完整的视觉、交互和动效规范&#xff0c;而Material Components for Android(MDC-Android)则是将这些设计理念转化为可重用…

Windows使用Powershell自动安装SqlServer2025服务器与SSMS管理工具

安装结果: 安装前准备: 1.下载mssql server 2025安装器 2.下载iso镜像 3.下载好SSMS安装程序,并放到iso同目录下 4.执行脚本开始自动安装

09 RK3568 Debian11 ES8388 模拟音频输出

1、设备树配置 确认自己的i2c,使用sdk带的驱动es8323 /SDK/kernel/sound/soc/codecs/es8323.c es8388_sound: es8388-sound {status = "okay";compatible = "rockchip,multicodecs-card"; rockchip,card-name = "rockchip,es8388-codec"; …