[{"data":1,"prerenderedAt":425},["ShallowReactive",2],{"wiki-page-/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie":3,"wiki-doc-items-/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie":344,"language-switcher-data-/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie":409,"wiki-i18n-paths-/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie":424},{"id":4,"title":5,"body":6,"canonicalPath":323,"chapter":324,"chapterSort":325,"date":326,"description":315,"docI18nKey":327,"docKey":328,"docRoot":329,"docTitle":330,"extension":331,"i18nKey":332,"isBlogPost":333,"isWikiDoc":334,"isWikiIndex":333,"layout":335,"legacyPath":335,"locale":336,"localeSlug":337,"meta":338,"navigation":334,"path":323,"seo":339,"sourcePath":340,"sourceStem":332,"stem":341,"wikiDepth":342,"__hash__":343},"content/_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch1-简介.md","簡介",{"type":7,"value":8,"toc":314},"minimark",[9,14,26,33,42,45,53,56,59,63,76,80,133,136,139,142,145,148,152,190,196,200,254,259,262,265,270,273,279,282,285,290,293,296,300],[10,11,13],"h3",{"id":12},"什麼是-docker","🐳 什麼是 Docker？",[15,16,17,18,22,23],"p",{},"Docker 是一個開源的 ",[19,20,21],"strong",{},"應用容器引擎"," ，可以讓開發者將應用和其所有依賴打包成一個“容器”，",[19,24,25],{},"一次構建，到處運行。",[15,27,28,29,32],{},"“",[19,30,31],{},"一次構建，到處運行","”也就是說：",[34,35,36],"ol",{},[37,38,39],"li",{},[19,40,41],{},"之前：",[15,43,44],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一臺電腦上一個一個環境的安裝配置，如果我還要在另一臺電腦上跑這個，也需要把第二臺電腦也這樣配置一遍。如果我的系統環境崩了，需要重裝系統了，重裝完後又雙叒叕要再來一遍配置過程，很麻煩。",[34,46,48],{"start":47},2,[37,49,50],{},[19,51,52],{},"使用docker後：",[15,54,55],{},"（docker鏡像和docker容器的概念在下下下面，下面這段話裡看到鏡像和容器的概念先接受就行。）",[15,57,58],{},"我只需要在電腦上用docker配置一遍這個ROS2+OpenCV+CUDA+CuDNN環境，然後用docker生成一個鏡像，把這個鏡像打包好。以後在任何一臺電腦上，我都可以直接用這個鏡像生成一個容器，而這個容器內就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN環境，如果我的容器環境崩了，我只需要把壞掉的容器刪掉，重新由鏡像再生成一個新的容器即可。只需要配置一次，以後都可以一鍵安裝這個環境。",[10,60,62],{"id":61},"它是怎麼工作的","📦 它是怎麼工作的？",[64,65,66,69],"ul",{},[37,67,68],{},"傳統方式：軟件運行需要在不同系統上安裝各種庫、配置環境，很麻煩。",[37,70,71,72,75],{},"Docker方式：打包成“容器”，環境和應用一起封裝， ",[19,73,74],{},"無論在哪運行都一樣穩定"," 。",[10,77,79],{"id":78},"docker-的幾個基本概念","🔧 Docker 的幾個基本概念",[81,82,83,97],"table",{},[84,85,86],"thead",{},[87,88,89,94],"tr",{},[90,91,93],"th",{"align":92},"left","概念",[90,95,96],{"align":92},"解釋",[98,99,100,109,117,125],"tbody",{},[87,101,102,106],{},[103,104,105],"td",{"align":92},"鏡像",[103,107,108],{"align":92},"Image，運行容器的模板，像是一個應用快照",[87,110,111,114],{},[103,112,113],{"align":92},"容器",[103,115,116],{"align":92},"Container，運行中的鏡像實例，有自己的文件系統、網絡等",[87,118,119,122],{},[103,120,121],{"align":92},"Dockerfile",[103,123,124],{"align":92},"構建鏡像的腳本，寫明安裝哪些包、設置哪些環境變量等",[87,126,127,130],{},[103,128,129],{"align":92},"倉庫",[103,131,132],{"align":92},"Registry，存放鏡像的地方，比如 Docker Hub",[15,134,135],{},"抽象化理解:",[15,137,138],{},"Docker鏡像≈C++類",[15,140,141],{},"Docker容器≈C++類實例(即對象)",[15,143,144],{},"形象化理解: 鏡像可以類似於給電腦裝系統的iso鏡像文件。 容器可以類似於已經被裝到電腦上的可以運行的系統。",[15,146,147],{},"把鏡像變為容器時，需要用docker run命令添加很多參數，這個可以理解你這個電腦到底有啥硬件配置。",[10,149,151],{"id":150},"類比理解","🔍 類比理解",[81,153,154,164],{},[84,155,156],{},[87,157,158,161],{},[90,159,160],{"align":92},"傳統部署",[90,162,163],{"align":92},"Docker部署",[98,165,166,174,182],{},[87,167,168,171],{},[103,169,170],{"align":92},"手動安裝依賴、調試版本不一致問題",[103,172,173],{"align":92},"一次打包環境和代碼",[87,175,176,179],{},[103,177,178],{"align":92},"程序“裸奔”跑在系統上",[103,180,181],{"align":92},"程序“穿著容器”隔離運行",[87,183,184,187],{},[103,185,186],{"align":92},"容易“在我電腦上能跑”",[103,188,189],{"align":92},"保證“無論在哪都能跑”",[15,191,192,193],{},"就像快遞包裹： ",[19,194,195],{},"你不再關心內容怎麼運送，因為包裝已經幫你做好了一切隔離。",[10,197,199],{"id":198},"docker-的核心優勢","✅ Docker 的核心優勢",[81,201,202,212],{},[84,203,204],{},[87,205,206,209],{},[90,207,208],{"align":92},"優勢",[90,210,211],{"align":92},"說明",[98,213,214,222,230,238,246],{},[87,215,216,219],{},[103,217,218],{"align":92},"輕量級",[103,220,221],{"align":92},"基於系統內核共享，啟動速度快，佔資源少",[87,223,224,227],{},[103,225,226],{"align":92},"跨平臺",[103,228,229],{"align":92},"一次構建，到處運行（Windows、Linux、macOS 上都一致）",[87,231,232,235],{},[103,233,234],{"align":92},"易於遷移部署",[103,236,237],{"align":92},"應用和環境一起封裝，不怕依賴不一致",[87,239,240,243],{},[103,241,242],{"align":92},"易於版本控制",[103,244,245],{"align":92},"鏡像版本可控，支持回滾",[87,247,248,251],{},[103,249,250],{"align":92},"生態豐富",[103,252,253],{"align":92},"Docker Hub 上有成千上萬的現成鏡像可用",[34,255,256],{},[37,257,258],{},"在Linux上可以幾乎實現無性能損失。",[15,260,261],{},"docker裡的發行版和本機共用Linux內核。",[15,263,264],{},"CPU損耗不到1%。 內存接近原生沒損耗。 硬盤損耗不到2%。 網絡性能接近原生沒有損耗。 顯卡損耗小於1%。",[34,266,267],{"start":47},[37,268,269],{},"可以快速部署在絕大多數Linux發行版",[15,271,272],{},"你想跑ROS2，之前是僅在Ubuntu上是比較好部署的，但是現在你可以使用任意發行版，比如Fedora，ArchLinux等發行版上也能通過docker跑ROS2。",[34,274,276],{"start":275},3,[37,277,278],{},"配置環境簡單",[15,280,281],{},"之前你需要在Ubuntu上按照教程安裝ROS2，CUDA，CuDNN，OpenCV4等等，但是隻要你用了Docker，可以直接用docker pull命令拉取別人配置好的開發環境，只需要一條命令直通羅馬。",[15,283,284],{},"你僅僅只需要把一個發行版最基礎的東西配置好，比如那些倉庫換源，輸入法，顯卡驅動（只用讓顯卡工作起來，不用在本機配置CUDA和CuDNN）等。",[34,286,288],{"start":287},4,[37,289,250],{},[15,291,292],{},"生態及其豐富，有很多東西即便自己不構建，也能在dockerhub上找到別人構建好的鏡像，自己連編譯都省去了。",[15,294,295],{},"比如之前配置cuda和cudnn的話，需要在本機先安裝英偉達驅動，再安裝CUDA和CuDNN。而現在，我們只需要本機安裝英偉達驅動，英偉達官方在DockerHub上提供了CUDA和CUDNN的鏡像，他們已經編譯好了，我們可以直接拿來用。",[10,297,299],{"id":298},"常見-docker-應用場景","📁 常見 Docker 應用場景",[64,301,302,305,308,311],{},[37,303,304],{},"本地開發：快速搭建各種開發環境（如 Python + Jupyter、ROS + Gazebo）",[37,306,307],{},"測試部署：CI/CD 中自動測試、構建、部署",[37,309,310],{},"微服務架構：每個服務一個容器，靈活組合",[37,312,313],{},"科研工具封裝：復現別人論文環境，或封裝自己的項目發給他人使用",{"title":315,"searchDepth":47,"depth":47,"links":316},"",[317,318,319,320,321,322],{"id":12,"depth":275,"text":13},{"id":61,"depth":275,"text":62},{"id":78,"depth":275,"text":79},{"id":150,"depth":275,"text":151},{"id":198,"depth":275,"text":199},{"id":298,"depth":275,"text":299},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","1",1000000,"2024-10-03","wiki/2024-10-03-docker-jiao-cheng","zh-tw:2024-10-03-docker-jiao-cheng","/zh-tw/wiki/2024-10-03-docker-jiao-cheng","Docker教程","md","wiki/2024-10-03-Docker教程/ch1-简介",false,true,null,"zh-TW","zh-tw",{},{"title":5,"description":315},"/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch1-简介",1,"_JgBE5--IQBW-ERNFUZ-F13XBXK6V5QWNiRFJxDiAR4",[345,346,352,358,364,370,376,382,388,394,400,406],{"path":323,"stem":341,"title":5,"date":326,"chapter":324,"chapterSort":325,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},{"path":347,"stem":348,"title":349,"date":326,"chapter":350,"chapterSort":351,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch10-1-kuai-su-da-kai-zhong-duan","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch10-1-快速打开终端","Docker快速打開終端","10.1",10010000,{"path":353,"stem":354,"title":355,"date":326,"chapter":356,"chapterSort":357,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch10-docker-shi-yong-you-hua","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch10-Docker使用优化","Docker使用優化","10",10000000,{"path":359,"stem":360,"title":361,"date":326,"chapter":362,"chapterSort":363,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch2-an-zhuang-docker","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch2-安装Docker","安裝Docker","2",2000000,{"path":365,"stem":366,"title":367,"date":326,"chapter":368,"chapterSort":369,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch3-docker-zhi-tong","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch3-Docker直通","Docker直通","3",3000000,{"path":371,"stem":372,"title":373,"date":326,"chapter":374,"chapterSort":375,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch4-dockerhub-huan-yuan","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch4-DockerHub换源","DockerHub換源","4",4000000,{"path":377,"stem":378,"title":379,"date":326,"chapter":380,"chapterSort":381,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch5-docker-rong-qi-li-de-cheng-xu-de-tu-xing-jie-mian-tan-bu-chu-lai","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch5-docker容器里的程序的图形界面弹不出来","docker容器裡的程序的圖形界面彈不出來","5",5000000,{"path":383,"stem":384,"title":385,"date":326,"chapter":386,"chapterSort":387,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch6-docker-ming-ling-xue-xi","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch6-Docker命令学习","Docker命令學習","6",6000000,{"path":389,"stem":390,"title":391,"date":326,"chapter":392,"chapterSort":393,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch7-ge-zhong-docker-rong-qi-bu-shu","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch7-各种Docker容器部署","各種Docker容器部署","7",7000000,{"path":395,"stem":396,"title":397,"date":326,"chapter":398,"chapterSort":399,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch8-手动创建Docker镜像","手動創建Docker鏡像","8",8000000,{"path":401,"stem":402,"title":403,"date":326,"chapter":404,"chapterSort":405,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":333},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch9-vscode-yuan-cheng-kai-fa","_i18n/zh-tw/wiki/2024-10-03-Docker教程/ch9-VScode远程开发","VScode遠程開發","9",9000000,{"path":329,"stem":407,"title":330,"date":326,"chapter":335,"chapterSort":408,"docKey":328,"docRoot":329,"docTitle":330,"isWikiDoc":334,"isWikiIndex":334},"_i18n/zh-tw/wiki/2024-10-03-Docker教程/index",0,{"variants":410},[411,414,417,420,421],{"path":412,"localeSlug":413,"i18nKey":332},"/en-us/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","en-us",{"path":415,"localeSlug":416,"i18nKey":332},"/zh-hant/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","zh-hant",{"path":418,"localeSlug":419,"i18nKey":332},"/zh-hk/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","zh-hk",{"path":323,"localeSlug":337,"i18nKey":332},{"path":422,"localeSlug":423,"i18nKey":332},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","zh-cn",[412,340,415,340,418,340,323,340,422,340],1780671885707]