以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
英文地址,請注明出處:http://en.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"; …