[{"data":1,"prerenderedAt":1975},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":1905,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":1959,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":1974},{"id":4,"title":5,"body":6,"canonicalPath":1885,"chapterDepth":1886,"chapterOrder":1887,"date":1888,"description":1889,"docI18nKey":1890,"docKey":1891,"docRoot":1892,"docTitle":1893,"extension":1894,"i18nKey":1895,"isBlogPost":1896,"isWikiDoc":453,"isWikiIndex":1896,"layout":1897,"legacyPath":1897,"locale":1898,"localeSlug":1899,"meta":1900,"navigation":453,"path":1885,"seo":1901,"sourcePath":1902,"sourceStem":1895,"stem":1903,"wikiDepth":323,"__hash__":1904},"content\u002F_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0650-手动创建Docker镜像.md","手動創建Docker鏡像",{"type":7,"value":8,"toc":1881},"minimark",[9,21,30,47,50,53,58,287,290,294,308,311,341,352,359,366,371,377,382,387,390,395,401,406,409,426,680,685,688,695,716,721,728,733,736,744,759,762,1034,1037,1042,1045,1050,1054,1059,1080,1083,1088,1095,1113,1141,1146,1149,1190,1193,1198,1202,1205,1210,1213,1218,1221,1233,1236,1241,1248,1278,1285,1301,1306,1309,1332,1335,1348,1353,1356,1362,1371,1376,1381,1385,1396,1399,1404,1407,1412,1436,1439,1444,1473,1476,1481,1733,1738,1786,1789,1833,1836,1841,1846,1849,1872,1877],[10,11,12,13,17,18,20],"p",{},"Docker 鏡像是通過 ",[14,15,16],"code",{},"Dockerfile"," 文件來構建的。該文件沒有任何擴展名，文件名固定為 ",[14,19,16],{},"。",[10,22,23,24,26,27,29],{},"從本質上來說，",[14,25,16],{}," 可以看作是一份用於自動化構建鏡像的腳本文件。我們在日常使用 Linux 系統時，在終端中執行的各種安裝、配置命令（例如安裝軟件、修改環境變量等），都可以按照一定的語法規則寫入到 ",[14,28,16],{}," 中。",[10,31,32,33,36,37,36,40,43,44,46],{},"不過，這些普通的 Shell 命令需要配合 Docker 提供的特定指令（如 ",[14,34,35],{},"RUN","、",[14,38,39],{},"COPY",[14,41,42],{},"ENV"," 等）一起使用，Docker 才能夠正確解析並執行這些步驟。構建鏡像的過程，本質上就是按照 ",[14,45,16],{}," 中定義的指令，從上到下一步步執行，最終生成一個可用的鏡像。",[10,48,49],{},"通過這種方式，我們可以將環境配置過程標準化、自動化，從而實現環境的一致性與可復現性。",[10,51,52],{},"下面列出了一些常用的 Dockerfile 指令及其作用：",[54,55,57],"h3",{"id":56},"dockerfile常用命令","DockerFile常用命令",[59,60,61,78],"table",{},[62,63,64],"thead",{},[65,66,67,72,75],"tr",{},[68,69,71],"th",{"align":70},"left","指令",[68,73,74],{"align":70},"說明",[68,76,77],{"align":70},"示例",[79,80,81,93,110,120,131,141,151,162,173,188,202,213,227,238,249,263,276],"tbody",{},[65,82,83,87,90],{},[84,85,86],"td",{"align":70},"FROM",[84,88,89],{"align":70},"指定基礎鏡像，是 Dockerfile 的起點",[84,91,92],{"align":70},"FROM ubuntu:22.04",[65,94,95,98,101],{},[84,96,97],{"align":70},"LABEL",[84,99,100],{"align":70},"添加元數據（如作者、版本等）",[84,102,103,104,109],{"align":70},"LABEL maintainer=\"",[105,106,108],"a",{"href":107},"mailto:you@example.com","you@example.com","\"",[65,111,112,114,117],{},[84,113,42],{"align":70},[84,115,116],{"align":70},"設置環境變量",[84,118,119],{"align":70},"ENV PORT=8080",[65,121,122,125,128],{},[84,123,124],{"align":70},"ARG",[84,126,127],{"align":70},"構建參數，只在構建期間可用",[84,129,130],{"align":70},"ARG VERSION=1.0",[65,132,133,135,138],{},[84,134,35],{"align":70},[84,136,137],{"align":70},"構建鏡像時運行命令",[84,139,140],{"align":70},"RUN apt-get update && apt-get install -y curl",[65,142,143,145,148],{},[84,144,39],{"align":70},[84,146,147],{"align":70},"複製文件到鏡像中",[84,149,150],{"align":70},"COPY . \u002Fapp",[65,152,153,156,159],{},[84,154,155],{"align":70},"ADD",[84,157,158],{"align":70},"類似 COPY，額外支持解壓 .tar 文件或遠程 URL（不推薦用於 URL）",[84,160,161],{"align":70},"ADD archive.tar.gz \u002Fdata\u002F",[65,163,164,167,170],{},[84,165,166],{"align":70},"WORKDIR",[84,168,169],{"align":70},"設置工作目錄",[84,171,172],{"align":70},"WORKDIR \u002Fopt",[65,174,175,178,181],{},[84,176,177],{"align":70},"CMD",[84,179,180],{"align":70},"設置容器啟動時默認命令（可被 docker run 覆蓋）",[84,182,183,184],{"align":70},"CMD ",[185,186,187],"span",{},"\"node\", \"index.js\"",[65,189,190,193,196],{},[84,191,192],{"align":70},"ENTRYPOINT",[84,194,195],{"align":70},"設置容器啟動時固定命令（通常用於 CLI 工具等）",[84,197,198,199],{"align":70},"ENTRYPOINT ",[185,200,201],{},"\"python3\"",[65,203,204,207,210],{},[84,205,206],{"align":70},"EXPOSE",[84,208,209],{"align":70},"聲明鏡像內服務監聽的端口（不會自動映射）",[84,211,212],{"align":70},"EXPOSE 80",[65,214,215,218,221],{},[84,216,217],{"align":70},"VOLUME",[84,219,220],{"align":70},"聲明數據卷掛載點",[84,222,223,224],{"align":70},"VOLUME ",[185,225,226],{},"\"\u002Fdata\"",[65,228,229,232,235],{},[84,230,231],{"align":70},"USER",[84,233,234],{"align":70},"設置後續命令執行的用戶",[84,236,237],{"align":70},"USER appuser",[65,239,240,243,246],{},[84,241,242],{"align":70},"ONBUILD",[84,244,245],{"align":70},"當鏡像作為其他鏡像基礎鏡像時觸發的構建指令",[84,247,248],{"align":70},"ONBUILD COPY . \u002Fsrc",[65,250,251,254,257],{},[84,252,253],{"align":70},"SHELL",[84,255,256],{"align":70},"更改默認 shell，比如將 sh -c 改為 bash -c",[84,258,259,260],{"align":70},"SHELL ",[185,261,262],{},"\"\u002Fbin\u002Fbash\", \"-c\"",[65,264,265,268,271],{},[84,266,267],{"align":70},"HEALTHCHECK",[84,269,270],{"align":70},"定義容器運行時的健康檢查命令",[84,272,273],{"align":70},[14,274,275],{},"HEALTHCHECK CMD curl --fail http:\u002F\u002Flocalhost:8080",[65,277,278,281,284],{},[84,279,280],{"align":70},"STOPSIGNAL",[84,282,283],{"align":70},"容器停止時發送的信號",[84,285,286],{"align":70},"STOPSIGNAL SIGKILL",[54,288,289],{"id":289},"自己創建容器",[291,292,293],"h4",{"id":293},"手動創建",[10,295,296,297,299,300,303,304,307],{},"首先創建一個文件夾來存放你的",[14,298,16],{},"\n比如我在",[14,301,302],{},"~\u002FUserFolder\u002FMySource\u002F","下創建了一個",[14,305,306],{},"MyDocker","文件夾.",[10,309,310],{},"創建好後,在個文件夾下打開vscode.",[312,313,318],"pre",{"className":314,"code":315,"language":316,"meta":317,"style":317},"language-bash shiki shiki-themes github-light github-dark","cd ~\u002FUserFolder\u002FMySource\u002FMyDocker\ncode .\n","bash","",[14,319,320,332],{"__ignoreMap":317},[185,321,324,328],{"class":322,"line":323},"line",1,[185,325,327],{"class":326},"sj4cs","cd",[185,329,331],{"class":330},"sZZnC"," ~\u002FUserFolder\u002FMySource\u002FMyDocker\n",[185,333,335,338],{"class":322,"line":334},2,[185,336,14],{"class":337},"sScJk",[185,339,340],{"class":330}," .\n",[10,342,343,344,347,348,351],{},"在VScode插件中安裝",[14,345,346],{},"Dev Containers",",",[14,349,350],{},"Container Tools","這倆插件.",[10,353,354],{},[355,356],"img",{"alt":357,"src":358},"alt text","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782044511801.webp",[360,361,362],"ol",{},[363,364,365],"li",{},"插件1：微軟Docker工具",[10,367,368],{},[355,369],{"alt":317,"src":370},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage21.webp",[10,372,373],{},[374,375,376],"em",{},"docker擴展插件已經進化為container tools了，請安裝container tools。",[10,378,379],{},[355,380],{"alt":317,"src":381},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage22.webp",[360,383,384],{"start":334},[363,385,386],{},"插件2：微軟Docker遠程開發工具",[10,388,389],{},"下面這是遠程開發的插件。",[10,391,392],{},[355,393],{"alt":317,"src":394},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage23.webp",[10,396,397,398,400],{},"接下來創建",[14,399,16],{},"文件:",[10,402,403],{},[355,404],{"alt":357,"src":405},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782044668776.webp",[10,407,408],{},"我們創建一個最簡單的X86架構的鏡像,這個鏡像的內容是:",[360,410,411,414,417,420,423],{},[363,412,413],{},"基於Ubuntu24.04系統的鏡像",[363,415,416],{},"自帶CUDA和CuDNN",[363,418,419],{},"默認Shell環境為bash",[363,421,422],{},"換源為國內鏡像源",[363,424,425],{},"Shell添加上豐富的顏色",[312,427,431],{"className":428,"code":429,"language":430,"meta":317,"style":317},"language-dockerfile shiki shiki-themes github-light github-dark","# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n\n# 设置环境变量以防止交互安装\nENV DEBIAN_FRONTEND=noninteractive\n\n# 强制使用 Bash 作为默认 Shell\nSHELL [\"\u002Fbin\u002Fbash\", \"-c\"]\n\n# 先更新包列表并安装CA证书\nRUN apt-get update && apt-get install -y ca-certificates \\\n    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\n# 替换为清华大学的DEB822格式镜像源\nRUN sed -i 's|http:\u002F\u002Farchive.ubuntu.com\u002Fubuntu\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu\u002F|g' \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n\n# 配置终端颜色和提示符\nRUN sed -i 's\u002F#force_color_prompt=yes\u002Fforce_color_prompt=yes\u002Fg' \u002Froot\u002F.bashrc && \\\n    # 自定义PS1（带颜色的提示符）\n    echo 'export PS1=\"\\[\\033[1;36m\\]\\u@\\h\\[\\033[00m\\]:\\[\\033[1;34m\\]\\w\\[\\033[00m\\]\\$ \"' >> \u002Froot\u002F.bashrc && \\\n    # 给ls、grep等命令添加别名\n    echo \"alias ls='ls --color=auto'\" >> \u002Froot\u002F.bashrc && \\\n    echo \"alias grep='grep --color=auto'\" >> \u002Froot\u002F.bashrc && \\\n    echo \"alias ll='ls -alFh --color=auto'\" >> \u002Froot\u002F.bashrc && \\\n    # 清理临时文件\n    rm -rf \u002Ftmp\u002FLS_COLORS\n","dockerfile",[14,432,433,439,448,455,461,469,474,480,500,505,511,519,525,530,536,550,555,561,574,580,632,638,648,658,668,674],{"__ignoreMap":317},[185,434,435],{"class":322,"line":323},[185,436,438],{"class":437},"sJ8bj","# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[185,440,441,444],{"class":322,"line":334},[185,442,86],{"class":443},"szBVR",[185,445,447],{"class":446},"sVt8B"," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[185,449,451],{"class":322,"line":450},3,[185,452,454],{"emptyLinePlaceholder":453},true,"\n",[185,456,458],{"class":322,"line":457},4,[185,459,460],{"class":437},"# 设置环境变量以防止交互安装\n",[185,462,464,466],{"class":322,"line":463},5,[185,465,42],{"class":443},[185,467,468],{"class":446}," DEBIAN_FRONTEND=noninteractive\n",[185,470,472],{"class":322,"line":471},6,[185,473,454],{"emptyLinePlaceholder":453},[185,475,477],{"class":322,"line":476},7,[185,478,479],{"class":437},"# 强制使用 Bash 作为默认 Shell\n",[185,481,483,485,488,491,494,497],{"class":322,"line":482},8,[185,484,253],{"class":443},[185,486,487],{"class":446}," [",[185,489,490],{"class":330},"\"\u002Fbin\u002Fbash\"",[185,492,493],{"class":446},", ",[185,495,496],{"class":330},"\"-c\"",[185,498,499],{"class":446},"]\n",[185,501,503],{"class":322,"line":502},9,[185,504,454],{"emptyLinePlaceholder":453},[185,506,508],{"class":322,"line":507},10,[185,509,510],{"class":437},"# 先更新包列表并安装CA证书\n",[185,512,514,516],{"class":322,"line":513},11,[185,515,35],{"class":443},[185,517,518],{"class":446}," apt-get update && apt-get install -y ca-certificates \\\n",[185,520,522],{"class":322,"line":521},12,[185,523,524],{"class":446},"    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n",[185,526,528],{"class":322,"line":527},13,[185,529,454],{"emptyLinePlaceholder":453},[185,531,533],{"class":322,"line":532},14,[185,534,535],{"class":437},"# 替换为清华大学的DEB822格式镜像源\n",[185,537,539,541,544,547],{"class":322,"line":538},15,[185,540,35],{"class":443},[185,542,543],{"class":446}," sed -i ",[185,545,546],{"class":330},"'s|http:\u002F\u002Farchive.ubuntu.com\u002Fubuntu\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu\u002F|g'",[185,548,549],{"class":446}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[185,551,553],{"class":322,"line":552},16,[185,554,454],{"emptyLinePlaceholder":453},[185,556,558],{"class":322,"line":557},17,[185,559,560],{"class":437},"# 配置终端颜色和提示符\n",[185,562,564,566,568,571],{"class":322,"line":563},18,[185,565,35],{"class":443},[185,567,543],{"class":446},[185,569,570],{"class":330},"'s\u002F#force_color_prompt=yes\u002Fforce_color_prompt=yes\u002Fg'",[185,572,573],{"class":446}," \u002Froot\u002F.bashrc && \\\n",[185,575,577],{"class":322,"line":576},19,[185,578,579],{"class":437},"    # 自定义PS1（带颜色的提示符）\n",[185,581,583,586,589,592,595,598,601,604,607,610,613,615,618,621,623,626,629],{"class":322,"line":582},20,[185,584,585],{"class":446},"    echo ",[185,587,588],{"class":330},"'export PS1=\"",[185,590,591],{"class":326},"\\[\\0",[185,593,594],{"class":330},"33[1;36m",[185,596,597],{"class":326},"\\]\\u",[185,599,600],{"class":330},"@",[185,602,603],{"class":326},"\\h\\[\\0",[185,605,606],{"class":330},"33[00m",[185,608,609],{"class":326},"\\]",[185,611,612],{"class":330},":",[185,614,591],{"class":326},[185,616,617],{"class":330},"33[1;34m",[185,619,620],{"class":326},"\\]\\w\\[\\0",[185,622,606],{"class":330},[185,624,625],{"class":326},"\\]\\$",[185,627,628],{"class":330}," \"'",[185,630,631],{"class":446}," >> \u002Froot\u002F.bashrc && \\\n",[185,633,635],{"class":322,"line":634},21,[185,636,637],{"class":437},"    # 给ls、grep等命令添加别名\n",[185,639,641,643,646],{"class":322,"line":640},22,[185,642,585],{"class":446},[185,644,645],{"class":330},"\"alias ls='ls --color=auto'\"",[185,647,631],{"class":446},[185,649,651,653,656],{"class":322,"line":650},23,[185,652,585],{"class":446},[185,654,655],{"class":330},"\"alias grep='grep --color=auto'\"",[185,657,631],{"class":446},[185,659,661,663,666],{"class":322,"line":660},24,[185,662,585],{"class":446},[185,664,665],{"class":330},"\"alias ll='ls -alFh --color=auto'\"",[185,667,631],{"class":446},[185,669,671],{"class":322,"line":670},25,[185,672,673],{"class":437},"    # 清理临时文件\n",[185,675,677],{"class":322,"line":676},26,[185,678,679],{"class":446},"    rm -rf \u002Ftmp\u002FLS_COLORS\n",[10,681,682],{},[355,683],{"alt":357,"src":684},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782045300397.webp",[10,686,687],{},"在x86電腦上編譯x86的鏡像(一定要有科學的網絡環境,不然拉取不了英偉達的鏡像)：",[10,689,690,691,694],{},"命令格式為",[14,692,693],{},"docker build -t 镜像名称 .","\n比如:",[312,696,698],{"className":314,"code":697,"language":316,"meta":317,"style":317},"docker build -t ubuntu24_cuda126_cudnn:latest .\n",[14,699,700],{"__ignoreMap":317},[185,701,702,705,708,711,714],{"class":322,"line":323},[185,703,704],{"class":337},"docker",[185,706,707],{"class":330}," build",[185,709,710],{"class":326}," -t",[185,712,713],{"class":330}," ubuntu24_cuda126_cudnn:latest",[185,715,340],{"class":330},[10,717,718],{},[355,719],{"alt":357,"src":720},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782045360444.webp",[10,722,723,724,727],{},"然後使用",[14,725,726],{},"docker images","命令查看編譯好的鏡像.",[10,729,730],{},[355,731],{"alt":357,"src":732},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782045993616.webp",[291,734,735],{"id":735},"運行此鏡像",[10,737,738,739,743],{},"使用",[105,740,742],{"href":741},"\u002Fzh-cn\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0600-docker-ming-ling-xue-xi#run%E5%91%BD%E4%BB%A4%E7%9A%84%E5%8F%82%E6%95%B0%E9%9D%9E%E5%B8%B8%E9%87%8D%E8%A6%81","run命令的參數非常重要","裡的run命令來運行創建好的鏡像.",[10,745,746,747,750,751,754,755,758],{},"應該把",[14,748,749],{},"--name","修改為你要創建的容器的名字,比如",[14,752,753],{},"ubuntu24cuda126",",然後最底下那行應該寫你剛才創建的鏡像的名字,比如",[14,756,757],{},"ubuntu24_cuda126_cudnn:latest",".",[10,760,761],{},"對應本教程的命令應該為:",[312,763,765],{"className":314,"code":764,"language":316,"meta":317,"style":317},"sudo docker run --name=ubuntu24cuda126 \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\nubuntu24_cuda126_cudnn:latest\n",[14,766,767,784,794,804,817,824,831,838,848,857,866,881,893,905,914,924,933,948,983,1011,1022,1029],{"__ignoreMap":317},[185,768,769,772,775,778,781],{"class":322,"line":323},[185,770,771],{"class":337},"sudo",[185,773,774],{"class":330}," docker",[185,776,777],{"class":330}," run",[185,779,780],{"class":326}," --name=ubuntu24cuda126",[185,782,783],{"class":326}," \\\n",[185,785,786,789,792],{"class":322,"line":334},[185,787,788],{"class":446},"--gpus ",[185,790,791],{"class":330},"all",[185,793,783],{"class":326},[185,795,796,799,802],{"class":322,"line":450},[185,797,798],{"class":446},"-e ",[185,800,801],{"class":330},"NVIDIA_DRIVER_CAPABILITIES=all",[185,803,783],{"class":326},[185,805,806,808,811,814],{"class":322,"line":457},[185,807,798],{"class":446},[185,809,810],{"class":330},"DISPLAY=",[185,812,813],{"class":446},"$DISPLAY ",[185,815,816],{"class":326},"\\\n",[185,818,819,822],{"class":322,"line":463},[185,820,821],{"class":446},"-dit ",[185,823,816],{"class":326},[185,825,826,829],{"class":322,"line":471},[185,827,828],{"class":446},"--privileged ",[185,830,816],{"class":326},[185,832,833,836],{"class":322,"line":476},[185,834,835],{"class":446},"--net=host ",[185,837,816],{"class":326},[185,839,840,843,846],{"class":322,"line":482},[185,841,842],{"class":446},"--group-add ",[185,844,845],{"class":330},"audio",[185,847,783],{"class":326},[185,849,850,852,855],{"class":322,"line":502},[185,851,842],{"class":446},[185,853,854],{"class":330},"video",[185,856,783],{"class":326},[185,858,859,861,864],{"class":322,"line":507},[185,860,842],{"class":446},[185,862,863],{"class":330},"dialout",[185,865,783],{"class":326},[185,867,868,870,873,876,879],{"class":322,"line":513},[185,869,798],{"class":446},[185,871,872],{"class":330},"XAUTHORITY=",[185,874,875],{"class":446},"$HOME",[185,877,878],{"class":330},"\u002F.Xauthority",[185,880,783],{"class":326},[185,882,883,885,888,891],{"class":322,"line":521},[185,884,798],{"class":446},[185,886,887],{"class":330},"WAYLAND_DISPLAY=",[185,889,890],{"class":446},"$WAYLAND_DISPLAY ",[185,892,816],{"class":326},[185,894,895,897,900,903],{"class":322,"line":527},[185,896,798],{"class":446},[185,898,899],{"class":330},"XDG_RUNTIME_DIR=",[185,901,902],{"class":446},"$XDG_RUNTIME_DIR ",[185,904,816],{"class":326},[185,906,907,909,912],{"class":322,"line":532},[185,908,798],{"class":446},[185,910,911],{"class":330},"QT_QPA_PLATFORM=xcb",[185,913,783],{"class":326},[185,915,916,919,922],{"class":322,"line":538},[185,917,918],{"class":446},"-v ",[185,920,921],{"class":330},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[185,923,783],{"class":326},[185,925,926,928,931],{"class":322,"line":552},[185,927,918],{"class":446},[185,929,930],{"class":330},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[185,932,783],{"class":326},[185,934,935,938,941,943,946],{"class":322,"line":557},[185,936,937],{"class":446},"-v $HOME",[185,939,940],{"class":330},"\u002F.Xauthority:",[185,942,875],{"class":446},[185,944,945],{"class":330},"\u002F.Xauthority:ro",[185,947,783],{"class":326},[185,949,950,952,955,958,961,964,967,970,972,974,976,978,981],{"class":322,"line":563},[185,951,918],{"class":446},[185,953,954],{"class":330},"\u002Frun\u002Fuser\u002F",[185,956,957],{"class":446},"$(",[185,959,960],{"class":337},"id",[185,962,963],{"class":326}," -u",[185,965,966],{"class":446},")",[185,968,969],{"class":330},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[185,971,957],{"class":446},[185,973,960],{"class":337},[185,975,963],{"class":326},[185,977,966],{"class":446},[185,979,980],{"class":330},"\u002Fwayland-0",[185,982,783],{"class":326},[185,984,985,987,989,991,993,995,997,1000,1002,1004,1006,1009],{"class":322,"line":576},[185,986,918],{"class":446},[185,988,954],{"class":330},[185,990,957],{"class":446},[185,992,960],{"class":337},[185,994,963],{"class":326},[185,996,966],{"class":446},[185,998,999],{"class":330},":\u002Frun\u002Fuser\u002F",[185,1001,957],{"class":446},[185,1003,960],{"class":337},[185,1005,963],{"class":326},[185,1007,1008],{"class":446},") ",[185,1010,816],{"class":326},[185,1012,1013,1015,1017,1020],{"class":322,"line":582},[185,1014,937],{"class":446},[185,1016,612],{"class":330},[185,1018,1019],{"class":446},"$HOME ",[185,1021,816],{"class":326},[185,1023,1024,1027],{"class":322,"line":634},[185,1025,1026],{"class":446},"-w $HOME ",[185,1028,816],{"class":326},[185,1030,1031],{"class":322,"line":640},[185,1032,1033],{"class":446},"ubuntu24_cuda126_cudnn:latest\n",[10,1035,1036],{},"出現下列這一行,代表成功了.",[10,1038,1039],{},[355,1040],{"alt":357,"src":1041},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046035662.webp",[10,1043,1044],{},"可以在VScode的插件裡看到容器已經成功運行.",[10,1046,1047],{},[355,1048],{"alt":357,"src":1049},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046118380.webp",[291,1051,1053],{"id":1052},"打開容器裡的ubuntu24系統的終端","打開容器裡的Ubuntu24系統的終端",[10,1055,690,1056,694],{},[14,1057,1058],{},"docker exec -it 容器名称 bash",[312,1060,1062],{"className":314,"code":1061,"language":316,"meta":317,"style":317},"docker exec -it ubuntu24cuda126 bash\n",[14,1063,1064],{"__ignoreMap":317},[185,1065,1066,1068,1071,1074,1077],{"class":322,"line":323},[185,1067,704],{"class":337},[185,1069,1070],{"class":330}," exec",[185,1072,1073],{"class":326}," -it",[185,1075,1076],{"class":330}," ubuntu24cuda126",[185,1078,1079],{"class":330}," bash\n",[10,1081,1082],{},"如下圖你已經進入了容器裡的Ubuntu24系統的終端了.",[10,1084,1085],{},[355,1086],{"alt":357,"src":1087},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046265023.webp",[10,1089,1090,1091,1094],{},"接下來可以安裝一個",[14,1092,1093],{},"neofetch","測試一下.",[10,1096,1097,1098,1101,1102,1104,1105,1108,1109,1112],{},"注意,你這裡已經是在",[14,1099,1100],{},"root","的身份下運行Ubuntu24系統的終端了,所以不需要每條命令前加",[14,1103,771],{},"了,比如",[14,1106,1107],{},"sudo apt update","可以直接用",[14,1110,1111],{},"apt update","代替.",[312,1114,1116],{"className":314,"code":1115,"language":316,"meta":317,"style":317},"apt update\napt install neofetch\nneofetch\n",[14,1117,1118,1126,1136],{"__ignoreMap":317},[185,1119,1120,1123],{"class":322,"line":323},[185,1121,1122],{"class":337},"apt",[185,1124,1125],{"class":330}," update\n",[185,1127,1128,1130,1133],{"class":322,"line":334},[185,1129,1122],{"class":337},[185,1131,1132],{"class":330}," install",[185,1134,1135],{"class":330}," neofetch\n",[185,1137,1138],{"class":322,"line":450},[185,1139,1140],{"class":337},"neofetch\n",[10,1142,1143],{},[355,1144],{"alt":357,"src":1145},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046451343.webp",[10,1147,1148],{},"然後可以順便測試下英偉達驅動和CUDA以及CuDNN的安裝情況:",[312,1150,1152],{"className":314,"code":1151,"language":316,"meta":317,"style":317},"nvidia-smi\nnvcc -V\ncat \u002Fusr\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[14,1153,1154,1159,1167],{"__ignoreMap":317},[185,1155,1156],{"class":322,"line":323},[185,1157,1158],{"class":337},"nvidia-smi\n",[185,1160,1161,1164],{"class":322,"line":334},[185,1162,1163],{"class":337},"nvcc",[185,1165,1166],{"class":326}," -V\n",[185,1168,1169,1172,1175,1178,1181,1184,1187],{"class":322,"line":450},[185,1170,1171],{"class":337},"cat",[185,1173,1174],{"class":330}," \u002Fusr\u002Finclude\u002Fcudnn_version.h",[185,1176,1177],{"class":443}," |",[185,1179,1180],{"class":337}," grep",[185,1182,1183],{"class":330}," CUDNN_MAJOR",[185,1185,1186],{"class":326}," -A",[185,1188,1189],{"class":326}," 2\n",[10,1191,1192],{},"如下圖可知,容器中的Ubuntu24共享了宿主的英偉達驅動,版本為595.80.\n自帶CUDA12.6與CuDNN9.3.0",[10,1194,1195],{},[355,1196],{"alt":357,"src":1197},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782047529844.webp",[291,1199,1201],{"id":1200},"將鏡像推送至docker-hub","將鏡像推送至Docker Hub",[10,1203,1204],{},"將 Docker 鏡像推送到 Docker Hub 的步驟如下：",[360,1206,1207],{},[363,1208,1209],{},"創建 Docker Hub 賬戶",[10,1211,1212],{},"如果你還沒有 Docker Hub 賬戶，請前往 Docker Hub 註冊一個免費賬戶。",[360,1214,1215],{"start":334},[363,1216,1217],{},"登錄 Docker Hub",[10,1219,1220],{},"在終端中使用以下命令登錄到你的 Docker Hub 賬戶：",[312,1222,1224],{"className":314,"code":1223,"language":316,"meta":317,"style":317},"docker login\n",[14,1225,1226],{"__ignoreMap":317},[185,1227,1228,1230],{"class":322,"line":323},[185,1229,704],{"class":337},[185,1231,1232],{"class":330}," login\n",[10,1234,1235],{},"輸入你的 Docker Hub 用戶名和密碼進行驗證。",[360,1237,1238],{"start":450},[363,1239,1240],{},"為你的鏡像打標籤",[10,1242,1243,1244,1247],{},"Docker Hub 使用 ",[14,1245,1246],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式來標識鏡像。你需要為你的鏡像打上標籤，以便能夠推送到 Docker Hub。使用以下命令：",[312,1249,1251],{"className":314,"code":1250,"language":316,"meta":317,"style":317},"docker tag 镜像名:标签 \u003C你的用户名>\u002F新镜像名:标签\n",[14,1252,1253],{"__ignoreMap":317},[185,1254,1255,1257,1260,1263,1266,1269,1272,1275],{"class":322,"line":323},[185,1256,704],{"class":337},[185,1258,1259],{"class":330}," tag",[185,1261,1262],{"class":330}," 镜像名:标签",[185,1264,1265],{"class":443}," \u003C",[185,1267,1268],{"class":330},"你的用户",[185,1270,1271],{"class":446},"名",[185,1273,1274],{"class":443},">",[185,1276,1277],{"class":330},"\u002F新镜像名:标签\n",[10,1279,1280,1281,1284],{},"例如，如果你的 Docker Hub 用戶名是 ",[14,1282,1283],{},"tungchiahui","，你應該執行：",[312,1286,1288],{"className":314,"code":1287,"language":316,"meta":317,"style":317},"docker tag ubuntu24_cuda126_cudnn:latest tungchiahui\u002Fubuntu24_cuda126_cudnn:latest\n",[14,1289,1290],{"__ignoreMap":317},[185,1291,1292,1294,1296,1298],{"class":322,"line":323},[185,1293,704],{"class":337},[185,1295,1259],{"class":330},[185,1297,713],{"class":330},[185,1299,1300],{"class":330}," tungchiahui\u002Fubuntu24_cuda126_cudnn:latest\n",[360,1302,1303],{"start":457},[363,1304,1305],{},"推送鏡像到 Docker Hub",[10,1307,1308],{},"使用以下命令將鏡像推送到 Docker Hub：",[312,1310,1312],{"className":314,"code":1311,"language":316,"meta":317,"style":317},"docker push \u003C你的用户名>\u002F镜像名:标签\n",[14,1313,1314],{"__ignoreMap":317},[185,1315,1316,1318,1321,1323,1325,1327,1329],{"class":322,"line":323},[185,1317,704],{"class":337},[185,1319,1320],{"class":330}," push",[185,1322,1265],{"class":443},[185,1324,1268],{"class":330},[185,1326,1271],{"class":446},[185,1328,1274],{"class":443},[185,1330,1331],{"class":330},"\u002F镜像名:标签\n",[10,1333,1334],{},"例如：",[312,1336,1338],{"className":314,"code":1337,"language":316,"meta":317,"style":317},"docker push tungchiahui\u002Fubuntu24_cuda126_cudnn:latest\n",[14,1339,1340],{"__ignoreMap":317},[185,1341,1342,1344,1346],{"class":322,"line":323},[185,1343,704],{"class":337},[185,1345,1320],{"class":330},[185,1347,1300],{"class":330},[360,1349,1350],{"start":463},[363,1351,1352],{},"驗證推送成功",[10,1354,1355],{},"你可以通過訪問 Docker Hub 的個人頁面來驗證你的鏡像是否已成功推送。",[10,1357,1358],{},[1359,1360,1361],"strong",{},"注意事項",[1363,1364,1365,1368],"ul",{},[363,1366,1367],{},"確保你的鏡像大小在 Docker Hub 的限制範圍內（一般為 10GB）。",[363,1369,1370],{},"如果你打算將鏡像公開，可以設置為公共倉庫；如果希望只有你自己可以訪問，可以設置為私有倉庫。",[10,1372,1373],{},[355,1374],{"alt":317,"src":1375},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage16.webp",[10,1377,1378],{},[355,1379],{"alt":317,"src":1380},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage17.webp",[291,1382,1384],{"id":1383},"手動創建跨平臺多架構構建高階的暫時不用學","手動創建(跨平臺多架構構建)(高階的,暫時不用學)",[10,1386,1387,1388,1391,1392,1395],{},"如果您想在 ",[1359,1389,1390],{},"x86\u002Fx64 電腦上即為本機x86設備構建鏡像，又想為樹莓派、Jetson等ARM64 設備構建 Docker 鏡像"," ，需要使用 ",[1359,1393,1394],{},"Docker 的跨平臺構建功能"," 。以下是完整解決方案：",[1397,1398],"hr",{},[10,1400,1401],{},[1359,1402,1403],{},"啟用 Docker 跨平臺構建",[10,1405,1406],{},"在 x86 主機上模擬 ARM64 環境需要以下工具：",[360,1408,1409],{},[363,1410,1411],{},"啟用 buildx（只需執行一次）",[312,1413,1415],{"className":314,"code":1414,"language":316,"meta":317,"style":317},"docker buildx create --name multiarch_builder --use\n",[14,1416,1417],{"__ignoreMap":317},[185,1418,1419,1421,1424,1427,1430,1433],{"class":322,"line":323},[185,1420,704],{"class":337},[185,1422,1423],{"class":330}," buildx",[185,1425,1426],{"class":330}," create",[185,1428,1429],{"class":326}," --name",[185,1431,1432],{"class":330}," multiarch_builder",[185,1434,1435],{"class":326}," --use\n",[10,1437,1438],{},"這會創建並啟用一個支持多架構構建的 builder，電腦重啟後也依然存在，所以只用運行一次。",[360,1440,1441],{"start":334},[363,1442,1443],{},"安裝 QEMU 支持（一般新版 Docker Desktop 已自帶，但是Linux必須要安裝） 如果你用的是服務器或Linux發行版，確保有 qemu 模擬器：",[312,1445,1447],{"className":314,"code":1446,"language":316,"meta":317,"style":317},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[14,1448,1449],{"__ignoreMap":317},[185,1450,1451,1453,1455,1458,1461,1464,1467,1470],{"class":322,"line":323},[185,1452,704],{"class":337},[185,1454,777],{"class":330},[185,1456,1457],{"class":326}," --rm",[185,1459,1460],{"class":326}," --privileged",[185,1462,1463],{"class":330}," multiarch\u002Fqemu-user-static",[185,1465,1466],{"class":326}," --reset",[185,1468,1469],{"class":326}," -p",[185,1471,1472],{"class":330}," yes\n",[10,1474,1475],{},"電腦重啟後，就會消失，所以需要你每次電腦重啟後，在buildx命令前，運行一次該命令即可。",[360,1477,1478],{"start":450},[363,1479,1480],{},"修改dockerfile為多架構版本",[312,1482,1484],{"className":428,"code":1483,"language":430,"meta":317,"style":317},"# 支持多架构，使用变量指定架构\nARG TARGETARCH\n\n# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM --platform=linux\u002F${TARGETARCH} nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n\n# 设置环境变量以防止交互安装\nENV DEBIAN_FRONTEND=noninteractive\n\n# 强制使用 Bash 作为默认 Shell\nSHELL [\"\u002Fbin\u002Fbash\", \"-c\"]\n\n# 先更新包列表并安装CA证书\nRUN apt-get update && apt-get install -y ca-certificates \\\n    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\n# 替换为清华大学的DEB822格式镜像源\nRUN if [ \"$(dpkg --print-architecture)\" = \"amd64\" ]; then \\\n        sed -i 's|http:\u002F\u002Farchive.ubuntu.com\u002Fubuntu\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu\u002F|g' \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources; \\\n    elif [ \"$(dpkg --print-architecture)\" = \"arm64\" ]; then \\\n        sed -i 's|http:\u002F\u002Fports.ubuntu.com\u002Fubuntu-ports\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-ports\u002F|g' \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources; \\\n    fi\n\n# 配置终端颜色和提示符\nRUN sed -i 's\u002F#force_color_prompt=yes\u002Fforce_color_prompt=yes\u002Fg' \u002Froot\u002F.bashrc && \\\n    # 自定义PS1（带颜色的提示符）\n    echo 'export PS1=\"\\[\\033[1;36m\\]\\u@\\h\\[\\033[00m\\]:\\[\\033[1;34m\\]\\w\\[\\033[00m\\]\\$ \"' >> \u002Froot\u002F.bashrc && \\\n    # 给ls、grep等命令添加别名\n    echo \"alias ls='ls --color=auto'\" >> \u002Froot\u002F.bashrc && \\\n    echo \"alias grep='grep --color=auto'\" >> \u002Froot\u002F.bashrc && \\\n    echo \"alias ll='ls -alFh --color=auto'\" >> \u002Froot\u002F.bashrc && \\\n    # 清理临时文件\n    rm -rf \u002Ftmp\u002FLS_COLORS\n",[14,1485,1486,1491,1498,1502,1506,1513,1517,1521,1527,1531,1535,1549,1553,1557,1563,1567,1571,1575,1594,1604,1618,1627,1632,1636,1640,1650,1654,1691,1696,1705,1714,1723,1728],{"__ignoreMap":317},[185,1487,1488],{"class":322,"line":323},[185,1489,1490],{"class":437},"# 支持多架构，使用变量指定架构\n",[185,1492,1493,1495],{"class":322,"line":334},[185,1494,124],{"class":443},[185,1496,1497],{"class":446}," TARGETARCH\n",[185,1499,1500],{"class":322,"line":450},[185,1501,454],{"emptyLinePlaceholder":453},[185,1503,1504],{"class":322,"line":457},[185,1505,438],{"class":437},[185,1507,1508,1510],{"class":322,"line":463},[185,1509,86],{"class":443},[185,1511,1512],{"class":446}," --platform=linux\u002F${TARGETARCH} nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[185,1514,1515],{"class":322,"line":471},[185,1516,454],{"emptyLinePlaceholder":453},[185,1518,1519],{"class":322,"line":476},[185,1520,460],{"class":437},[185,1522,1523,1525],{"class":322,"line":482},[185,1524,42],{"class":443},[185,1526,468],{"class":446},[185,1528,1529],{"class":322,"line":502},[185,1530,454],{"emptyLinePlaceholder":453},[185,1532,1533],{"class":322,"line":507},[185,1534,479],{"class":437},[185,1536,1537,1539,1541,1543,1545,1547],{"class":322,"line":513},[185,1538,253],{"class":443},[185,1540,487],{"class":446},[185,1542,490],{"class":330},[185,1544,493],{"class":446},[185,1546,496],{"class":330},[185,1548,499],{"class":446},[185,1550,1551],{"class":322,"line":521},[185,1552,454],{"emptyLinePlaceholder":453},[185,1554,1555],{"class":322,"line":527},[185,1556,510],{"class":437},[185,1558,1559,1561],{"class":322,"line":532},[185,1560,35],{"class":443},[185,1562,518],{"class":446},[185,1564,1565],{"class":322,"line":538},[185,1566,524],{"class":446},[185,1568,1569],{"class":322,"line":552},[185,1570,454],{"emptyLinePlaceholder":453},[185,1572,1573],{"class":322,"line":557},[185,1574,535],{"class":437},[185,1576,1577,1579,1582,1585,1588,1591],{"class":322,"line":563},[185,1578,35],{"class":443},[185,1580,1581],{"class":446}," if [ ",[185,1583,1584],{"class":330},"\"$(dpkg --print-architecture)\"",[185,1586,1587],{"class":446}," = ",[185,1589,1590],{"class":330},"\"amd64\"",[185,1592,1593],{"class":446}," ]; then \\\n",[185,1595,1596,1599,1601],{"class":322,"line":576},[185,1597,1598],{"class":446},"        sed -i ",[185,1600,546],{"class":330},[185,1602,1603],{"class":446}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources; \\\n",[185,1605,1606,1609,1611,1613,1616],{"class":322,"line":582},[185,1607,1608],{"class":446},"    elif [ ",[185,1610,1584],{"class":330},[185,1612,1587],{"class":446},[185,1614,1615],{"class":330},"\"arm64\"",[185,1617,1593],{"class":446},[185,1619,1620,1622,1625],{"class":322,"line":634},[185,1621,1598],{"class":446},[185,1623,1624],{"class":330},"'s|http:\u002F\u002Fports.ubuntu.com\u002Fubuntu-ports\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-ports\u002F|g'",[185,1626,1603],{"class":446},[185,1628,1629],{"class":322,"line":640},[185,1630,1631],{"class":446},"    fi\n",[185,1633,1634],{"class":322,"line":650},[185,1635,454],{"emptyLinePlaceholder":453},[185,1637,1638],{"class":322,"line":660},[185,1639,560],{"class":437},[185,1641,1642,1644,1646,1648],{"class":322,"line":670},[185,1643,35],{"class":443},[185,1645,543],{"class":446},[185,1647,570],{"class":330},[185,1649,573],{"class":446},[185,1651,1652],{"class":322,"line":676},[185,1653,579],{"class":437},[185,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689],{"class":322,"line":1656},27,[185,1658,585],{"class":446},[185,1660,588],{"class":330},[185,1662,591],{"class":326},[185,1664,594],{"class":330},[185,1666,597],{"class":326},[185,1668,600],{"class":330},[185,1670,603],{"class":326},[185,1672,606],{"class":330},[185,1674,609],{"class":326},[185,1676,612],{"class":330},[185,1678,591],{"class":326},[185,1680,617],{"class":330},[185,1682,620],{"class":326},[185,1684,606],{"class":330},[185,1686,625],{"class":326},[185,1688,628],{"class":330},[185,1690,631],{"class":446},[185,1692,1694],{"class":322,"line":1693},28,[185,1695,637],{"class":437},[185,1697,1699,1701,1703],{"class":322,"line":1698},29,[185,1700,585],{"class":446},[185,1702,645],{"class":330},[185,1704,631],{"class":446},[185,1706,1708,1710,1712],{"class":322,"line":1707},30,[185,1709,585],{"class":446},[185,1711,655],{"class":330},[185,1713,631],{"class":446},[185,1715,1717,1719,1721],{"class":322,"line":1716},31,[185,1718,585],{"class":446},[185,1720,665],{"class":330},[185,1722,631],{"class":446},[185,1724,1726],{"class":322,"line":1725},32,[185,1727,673],{"class":437},[185,1729,1731],{"class":322,"line":1730},33,[185,1732,679],{"class":446},[360,1734,1735],{"start":457},[363,1736,1737],{},"構建多架構鏡像 用下面的命令構建 amd64 和 arm64：",[312,1739,1741],{"className":314,"code":1740,"language":316,"meta":317,"style":317},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n",[14,1742,1743],{"__ignoreMap":317},[185,1744,1745,1747,1749,1751,1754,1757,1759,1761,1764,1766,1768,1770,1773,1776,1779,1781,1784],{"class":322,"line":323},[185,1746,704],{"class":337},[185,1748,1423],{"class":330},[185,1750,707],{"class":330},[185,1752,1753],{"class":326}," --platform",[185,1755,1756],{"class":330}," linux\u002Famd64,linux\u002Farm64",[185,1758,710],{"class":326},[185,1760,1265],{"class":443},[185,1762,1763],{"class":330},"你的镜像",[185,1765,1271],{"class":446},[185,1767,1274],{"class":443},[185,1769,612],{"class":330},[185,1771,1772],{"class":443},"\u003C",[185,1774,1775],{"class":330},"标",[185,1777,1778],{"class":446},"签",[185,1780,1274],{"class":443},[185,1782,1783],{"class":326}," --push",[185,1785,340],{"class":330},[10,1787,1788],{},"例子：",[312,1790,1792],{"className":314,"code":1791,"language":316,"meta":317,"style":317},"docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fubuntu24_cuda126_cudnn:latest \\\n --push \\\n .\n",[14,1793,1794,1804,1814,1823,1829],{"__ignoreMap":317},[185,1795,1796,1798,1800,1802],{"class":322,"line":323},[185,1797,704],{"class":337},[185,1799,1423],{"class":330},[185,1801,707],{"class":330},[185,1803,783],{"class":326},[185,1805,1806,1809,1812],{"class":322,"line":334},[185,1807,1808],{"class":446},"--platform ",[185,1810,1811],{"class":330},"linux\u002Famd64,linux\u002Farm64",[185,1813,783],{"class":326},[185,1815,1816,1818,1821],{"class":322,"line":450},[185,1817,710],{"class":326},[185,1819,1820],{"class":330}," tungchiahui\u002Fubuntu24_cuda126_cudnn:latest",[185,1822,783],{"class":326},[185,1824,1825,1827],{"class":322,"line":457},[185,1826,1783],{"class":326},[185,1828,783],{"class":326},[185,1830,1831],{"class":322,"line":463},[185,1832,340],{"class":330},[10,1834,1835],{},"說明： --platform 指定多架構。 --push 是必須的，因為 buildx 的多平臺構建默認是不能本地加載的（除非加 --load，但那隻能支持單一架構）。",[10,1837,1838],{},[355,1839],{"alt":317,"src":1840},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage18.webp",[10,1842,1843],{},[355,1844],{"alt":317,"src":1845},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage19.webp",[291,1847,1848],{"id":1848},"清除構建緩存",[312,1850,1852],{"className":314,"code":1851,"language":316,"meta":317,"style":317},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[14,1853,1854,1859],{"__ignoreMap":317},[185,1855,1856],{"class":322,"line":323},[185,1857,1858],{"class":437},"# 清理BuildKit构建缓存\n",[185,1860,1861,1863,1866,1869],{"class":322,"line":334},[185,1862,704],{"class":337},[185,1864,1865],{"class":330}," builder",[185,1867,1868],{"class":330}," prune",[185,1870,1871],{"class":326}," -f\n",[10,1873,1874],{},[355,1875],{"alt":317,"src":1876},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage20.webp",[1878,1879,1880],"style",{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":317,"searchDepth":334,"depth":334,"links":1882},[1883,1884],{"id":56,"depth":450,"text":57},{"id":289,"depth":450,"text":289},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang",0,"0650","2024-10-03","Docker 鏡像是通過 Dockerfile 文件來構建的。該文件沒有任何擴展名，文件名固定為 Dockerfile。","wiki\u002F2024-10-03-docker-jiao-cheng","zh-tw:2024-10-03-docker-jiao-cheng","\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng","Docker教程","md","wiki\u002F2024-10-03-Docker教程\u002F0650-手动创建Docker镜像",false,null,"zh-TW","zh-tw",{},{"title":5,"description":1889},"\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0650-手动创建Docker镜像","G33CGPKhxt0XyEH-i2EM_TNw-OXYoBgQNFYpawHSZnI",[1906,1911,1916,1921,1926,1931,1936,1937,1942,1947,1952,1957],{"path":1907,"stem":1908,"title":1909,"date":1888,"chapterOrder":1910,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0100-jian-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0100-简介","簡介","0100",{"path":1912,"stem":1913,"title":1914,"date":1888,"chapterOrder":1915,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0200-an-zhuang-docker","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0200-安装Docker","安裝Docker","0200",{"path":1917,"stem":1918,"title":1919,"date":1888,"chapterOrder":1920,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0300-docker-zhi-tong","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0300-Docker直通","Docker直通","0300",{"path":1922,"stem":1923,"title":1924,"date":1888,"chapterOrder":1925,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0400-dockerhub-huan-yuan","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0400-DockerHub换源","DockerHub換源","0400",{"path":1927,"stem":1928,"title":1929,"date":1888,"chapterOrder":1930,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0500-docker-rong-qi-li-de-cheng-xu-de-tu-xing-jie-mian-tan-bu-chu-lai","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0500-docker容器里的程序的图形界面弹不出来","docker容器裡的程序的圖形界面彈不出來","0500",{"path":1932,"stem":1933,"title":1934,"date":1888,"chapterOrder":1935,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0600-docker-ming-ling-xue-xi","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0600-Docker命令学习","Docker命令學習","0600",{"path":1885,"stem":1903,"title":5,"date":1888,"chapterOrder":1887,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},{"path":1938,"stem":1939,"title":1940,"date":1888,"chapterOrder":1941,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0675-vscode-yuan-cheng-kai-fa","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0675-VScode远程开发","VScode遠程開發","0675",{"path":1943,"stem":1944,"title":1945,"date":1888,"chapterOrder":1946,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0700-ge-zhong-docker-rong-qi-bu-shu","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F0700-各种Docker容器部署","各種Docker容器部署","0700",{"path":1948,"stem":1949,"title":1950,"date":1888,"chapterOrder":1951,"chapterDepth":323,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F1000-0100-kuai-su-da-kai-zhong-duan","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F1000-0100-快速打开终端","Docker快速打開終端","1000-0100",{"path":1953,"stem":1954,"title":1955,"date":1888,"chapterOrder":1956,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":1896},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F1000-docker-shi-yong-you-hua","_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002F1000-Docker使用优化","Docker使用優化","1000",{"path":1892,"stem":1958,"title":1893,"date":1888,"chapterOrder":1897,"chapterDepth":1886,"docKey":1891,"docRoot":1892,"docTitle":1893,"isWikiDoc":453,"isWikiIndex":453},"_i18n\u002Fzh-tw\u002Fwiki\u002F2024-10-03-Docker教程\u002Findex",{"variants":1960},[1961,1964,1967,1970,1971],{"path":1962,"localeSlug":1963,"i18nKey":1895},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","en-us",{"path":1965,"localeSlug":1966,"i18nKey":1895},"\u002Fzh-hant\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-hant",{"path":1968,"localeSlug":1969,"i18nKey":1895},"\u002Fzh-hk\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-hk",{"path":1885,"localeSlug":1899,"i18nKey":1895},{"path":1972,"localeSlug":1973,"i18nKey":1895},"\u002Fzh-cn\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-cn",[1962,1902,1965,1902,1968,1902,1885,1902,1972,1902],1784646875004]