[{"data":1,"prerenderedAt":1824},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":1753,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":1808,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang":1823},{"id":4,"title":5,"body":6,"canonicalPath":1733,"chapterDepth":1734,"chapterOrder":1735,"date":1736,"description":1737,"docI18nKey":1738,"docKey":1739,"docRoot":1740,"docTitle":1741,"extension":1742,"i18nKey":1743,"isBlogPost":1744,"isWikiDoc":283,"isWikiIndex":1744,"layout":1745,"legacyPath":1745,"locale":1746,"localeSlug":1747,"meta":1748,"navigation":283,"path":1733,"seo":1749,"sourcePath":1750,"sourceStem":1743,"stem":1751,"wikiDepth":142,"__hash__":1752},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0650-手动创建Docker镜像.md","Manually create a Docker image",{"type":7,"value":8,"toc":1729},"minimark",[9,21,30,47,50,53,58,61,64,102,106,111,116,127,130,160,171,178,185,190,196,201,206,209,214,220,225,228,233,238,244,250,256,509,514,517,523,526,547,552,559,564,567,575,590,593,865,868,873,876,881,885,890,892,913,916,921,928,946,974,979,982,1023,1026,1029,1034,1038,1041,1046,1049,1054,1057,1069,1072,1077,1084,1114,1121,1137,1142,1145,1168,1171,1184,1189,1192,1197,1206,1211,1216,1220,1231,1233,1238,1241,1246,1270,1273,1278,1307,1310,1315,1568,1573,1621,1624,1668,1683,1688,1693,1697,1720,1725],[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常用命令",[10,59,60],{},"|command|Explanation|Here is the translation of the provided Simplified Chinese Markdown fragment into natural American English, following all specified rules.",[62,63],"hr",{},[10,65,66,70,71,76,77,80,81,85,86,89,90,93,94,97,98,101],{},[67,68,69],"strong",{},"Example","|\n|:---|:---|:---|\n|FROM|Specify the base image, which is the starting point of the Dockerfile.|FROM ubuntu:22.04|\n|LABEL|Add metadata (such as author, version, etc.)|LABEL maintainer=\"",[72,73,75],"a",{"href":74},"mailto:you@example.com","you@example.com","\"|\n|ENV|Set environment variables|ENV PORT=8080|\n|ARG|Build parameters, only available during the build process.|ARG VERSION=1.0|\n|RUN|When building the image, run the command|RUN apt-get update && apt-get install -y curl|\n|COPY|Copy files into the image|COPY . \u002Fapp|\n|ADD|Similar to COPY, with additional support for extracting .tar files or remote URLs (not recommended for URLs).|ADD archive.tar.gz \u002Fdata\u002F|\n|WORKDIR|Set the working directory|WORKDIR \u002Fopt|\n|CMD|Set the default command when the container starts (can be overridden by ",[14,78,79],{},"docker run",").|CMD ",[82,83,84],"span",{},"\"node\", \"index.js\"","|\n|ENTRYPOINT|Set a fixed command when the container starts (commonly used for CLI tools, etc.)|ENTRYPOINT ",[82,87,88],{},"\"python3\"","|\n|EXPOSE|Declare the ports that services inside the image listen on (will not be automatically mapped).|EXPOSE 80|\n|VOLUME|Declare the data volume mount point|VOLUME ",[82,91,92],{},"\"\u002Fdata\"","|\n|USER|Set the user for subsequent command execution.|USER appuser|\n|ONBUILD|Build instructions triggered when an image is used as the base image for other images.|ONBUILD COPY . \u002Fsrc|\n|SHELL|Change the default shell, for example, change sh -c to bash -c.|SHELL ",[82,95,96],{},"\"\u002Fbin\u002Fbash\", \"-c\"","|\n|HEALTHCHECK|Define the health check command for the container runtime.|",[14,99,100],{},"HEALTHCHECK CMD curl --fail http:\u002F\u002Flocalhost:8080","|\n|STOPSIGNAL|Signal sent when the container stops|STOPSIGNAL SIGKILL|",[54,103,105],{"id":104},"create-your-own-container","Create your own container",[107,108,110],"h4",{"id":109},"manually-created","Manually created",[10,112,113,114],{},"首先创建一个文件夹来存放你的",[14,115,16],{},[10,117,118,119,122,123,126],{},"比如我在",[14,120,121],{},"~\u002FUserFolder\u002FMySource\u002F","下创建了一个",[14,124,125],{},"MyDocker","文件夹.",[10,128,129],{},"创建好后,在个文件夹下打开vscode.",[131,132,137],"pre",{"className":133,"code":134,"language":135,"meta":136,"style":136},"language-bash shiki shiki-themes github-light github-dark","cd ~\u002FUserFolder\u002FMySource\u002FMyDocker\ncode .\n","bash","",[14,138,139,151],{"__ignoreMap":136},[82,140,143,147],{"class":141,"line":142},"line",1,[82,144,146],{"class":145},"sj4cs","cd",[82,148,150],{"class":149},"sZZnC"," ~\u002FUserFolder\u002FMySource\u002FMyDocker\n",[82,152,154,157],{"class":141,"line":153},2,[82,155,14],{"class":156},"sScJk",[82,158,159],{"class":149}," .\n",[10,161,162,163,166,167,170],{},"在VScode插件中安装",[14,164,165],{},"Dev Containers",",",[14,168,169],{},"Container Tools","这俩插件.",[10,172,173],{},[174,175],"img",{"alt":176,"src":177},"alt text","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782044511801.webp",[179,180,181],"ol",{},[182,183,184],"li",{},"Plugin 1: Microsoft Docker Tool",[10,186,187],{},[174,188],{"alt":136,"src":189},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage21.webp",[10,191,192],{},[193,194,195],"em",{},"The Docker extension plugin has evolved into Container Tools. Please install Container Tools.",[10,197,198],{},[174,199],{"alt":136,"src":200},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage22.webp",[179,202,203],{"start":153},[182,204,205],{},"Plugin 2: Microsoft Docker Remote Development Tool",[10,207,208],{},"Below is the plugin for remote development.",[10,210,211],{},[174,212],{"alt":136,"src":213},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage23.webp",[10,215,216,217,219],{},"接下来创建",[14,218,16],{},"文件:",[10,221,222],{},[174,223],{"alt":176,"src":224},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782044668776.webp",[10,226,227],{},"我们创建一个最简单的X86架构的镜像,这个镜像的内容是:",[179,229,230],{},[182,231,232],{},"基于Ubuntu24.04系统的镜像",[179,234,235],{"start":153},[182,236,237],{},"自带CUDA和CuDNN",[179,239,241],{"start":240},3,[182,242,243],{},"默认Shell环境为bash",[179,245,247],{"start":246},4,[182,248,249],{},"换源为国内镜像源",[179,251,253],{"start":252},5,[182,254,255],{},"Shell添加上丰富的颜色",[131,257,261],{"className":258,"code":259,"language":260,"meta":136,"style":136},"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,262,263,269,279,285,290,297,302,308,329,334,340,348,354,359,365,379,384,390,403,409,461,467,477,487,497,503],{"__ignoreMap":136},[82,264,265],{"class":141,"line":142},[82,266,268],{"class":267},"sJ8bj","# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[82,270,271,275],{"class":141,"line":153},[82,272,274],{"class":273},"szBVR","FROM",[82,276,278],{"class":277},"sVt8B"," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[82,280,281],{"class":141,"line":240},[82,282,284],{"emptyLinePlaceholder":283},true,"\n",[82,286,287],{"class":141,"line":246},[82,288,289],{"class":267},"# 设置环境变量以防止交互安装\n",[82,291,292,294],{"class":141,"line":252},[82,293,42],{"class":273},[82,295,296],{"class":277}," DEBIAN_FRONTEND=noninteractive\n",[82,298,300],{"class":141,"line":299},6,[82,301,284],{"emptyLinePlaceholder":283},[82,303,305],{"class":141,"line":304},7,[82,306,307],{"class":267},"# 强制使用 Bash 作为默认 Shell\n",[82,309,311,314,317,320,323,326],{"class":141,"line":310},8,[82,312,313],{"class":273},"SHELL",[82,315,316],{"class":277}," [",[82,318,319],{"class":149},"\"\u002Fbin\u002Fbash\"",[82,321,322],{"class":277},", ",[82,324,325],{"class":149},"\"-c\"",[82,327,328],{"class":277},"]\n",[82,330,332],{"class":141,"line":331},9,[82,333,284],{"emptyLinePlaceholder":283},[82,335,337],{"class":141,"line":336},10,[82,338,339],{"class":267},"# 先更新包列表并安装CA证书\n",[82,341,343,345],{"class":141,"line":342},11,[82,344,35],{"class":273},[82,346,347],{"class":277}," apt-get update && apt-get install -y ca-certificates \\\n",[82,349,351],{"class":141,"line":350},12,[82,352,353],{"class":277},"    && rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n",[82,355,357],{"class":141,"line":356},13,[82,358,284],{"emptyLinePlaceholder":283},[82,360,362],{"class":141,"line":361},14,[82,363,364],{"class":267},"# 替换为清华大学的DEB822格式镜像源\n",[82,366,368,370,373,376],{"class":141,"line":367},15,[82,369,35],{"class":273},[82,371,372],{"class":277}," sed -i ",[82,374,375],{"class":149},"'s|http:\u002F\u002Farchive.ubuntu.com\u002Fubuntu\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu\u002F|g'",[82,377,378],{"class":277}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[82,380,382],{"class":141,"line":381},16,[82,383,284],{"emptyLinePlaceholder":283},[82,385,387],{"class":141,"line":386},17,[82,388,389],{"class":267},"# 配置终端颜色和提示符\n",[82,391,393,395,397,400],{"class":141,"line":392},18,[82,394,35],{"class":273},[82,396,372],{"class":277},[82,398,399],{"class":149},"'s\u002F#force_color_prompt=yes\u002Fforce_color_prompt=yes\u002Fg'",[82,401,402],{"class":277}," \u002Froot\u002F.bashrc && \\\n",[82,404,406],{"class":141,"line":405},19,[82,407,408],{"class":267},"    # 自定义PS1（带颜色的提示符）\n",[82,410,412,415,418,421,424,427,430,433,436,439,442,444,447,450,452,455,458],{"class":141,"line":411},20,[82,413,414],{"class":277},"    echo ",[82,416,417],{"class":149},"'export PS1=\"",[82,419,420],{"class":145},"\\[\\0",[82,422,423],{"class":149},"33[1;36m",[82,425,426],{"class":145},"\\]\\u",[82,428,429],{"class":149},"@",[82,431,432],{"class":145},"\\h\\[\\0",[82,434,435],{"class":149},"33[00m",[82,437,438],{"class":145},"\\]",[82,440,441],{"class":149},":",[82,443,420],{"class":145},[82,445,446],{"class":149},"33[1;34m",[82,448,449],{"class":145},"\\]\\w\\[\\0",[82,451,435],{"class":149},[82,453,454],{"class":145},"\\]\\$",[82,456,457],{"class":149}," \"'",[82,459,460],{"class":277}," >> \u002Froot\u002F.bashrc && \\\n",[82,462,464],{"class":141,"line":463},21,[82,465,466],{"class":267},"    # 给ls、grep等命令添加别名\n",[82,468,470,472,475],{"class":141,"line":469},22,[82,471,414],{"class":277},[82,473,474],{"class":149},"\"alias ls='ls --color=auto'\"",[82,476,460],{"class":277},[82,478,480,482,485],{"class":141,"line":479},23,[82,481,414],{"class":277},[82,483,484],{"class":149},"\"alias grep='grep --color=auto'\"",[82,486,460],{"class":277},[82,488,490,492,495],{"class":141,"line":489},24,[82,491,414],{"class":277},[82,493,494],{"class":149},"\"alias ll='ls -alFh --color=auto'\"",[82,496,460],{"class":277},[82,498,500],{"class":141,"line":499},25,[82,501,502],{"class":267},"    # 清理临时文件\n",[82,504,506],{"class":141,"line":505},26,[82,507,508],{"class":277},"    rm -rf \u002Ftmp\u002FLS_COLORS\n",[10,510,511],{},[174,512],{"alt":176,"src":513},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782045300397.webp",[10,515,516],{},"在x86电脑上编译x86的镜像(一定要有科学的网络环境,不然拉取不了英伟达的镜像)：",[10,518,519,520],{},"命令格式为",[14,521,522],{},"docker build -t 镜像名称 .",[10,524,525],{},"比如:",[131,527,529],{"className":133,"code":528,"language":135,"meta":136,"style":136},"docker build -t ubuntu24_cuda126_cudnn:latest .\n",[14,530,531],{"__ignoreMap":136},[82,532,533,536,539,542,545],{"class":141,"line":142},[82,534,535],{"class":156},"docker",[82,537,538],{"class":149}," build",[82,540,541],{"class":145}," -t",[82,543,544],{"class":149}," ubuntu24_cuda126_cudnn:latest",[82,546,159],{"class":149},[10,548,549],{},[174,550],{"alt":176,"src":551},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782045360444.webp",[10,553,554,555,558],{},"然后使用",[14,556,557],{},"docker images","命令查看编译好的镜像.",[10,560,561],{},[174,562],{"alt":176,"src":563},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782045993616.webp",[107,565,566],{"id":566},"运行此镜像",[10,568,569,570,574],{},"使用",[72,571,573],{"href":572},"\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,576,577,578,581,582,585,586,589],{},"应该把",[14,579,580],{},"--name","修改为你要创建的容器的名字,比如",[14,583,584],{},"ubuntu24cuda126",",然后最底下那行应该写你刚才创建的镜像的名字,比如",[14,587,588],{},"ubuntu24_cuda126_cudnn:latest",".",[10,591,592],{},"对应本教程的命令应该为:",[131,594,596],{"className":133,"code":595,"language":135,"meta":136,"style":136},"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,597,598,615,625,635,648,655,662,669,679,688,697,712,724,736,745,755,764,779,814,842,853,860],{"__ignoreMap":136},[82,599,600,603,606,609,612],{"class":141,"line":142},[82,601,602],{"class":156},"sudo",[82,604,605],{"class":149}," docker",[82,607,608],{"class":149}," run",[82,610,611],{"class":145}," --name=ubuntu24cuda126",[82,613,614],{"class":145}," \\\n",[82,616,617,620,623],{"class":141,"line":153},[82,618,619],{"class":277},"--gpus ",[82,621,622],{"class":149},"all",[82,624,614],{"class":145},[82,626,627,630,633],{"class":141,"line":240},[82,628,629],{"class":277},"-e ",[82,631,632],{"class":149},"NVIDIA_DRIVER_CAPABILITIES=all",[82,634,614],{"class":145},[82,636,637,639,642,645],{"class":141,"line":246},[82,638,629],{"class":277},[82,640,641],{"class":149},"DISPLAY=",[82,643,644],{"class":277},"$DISPLAY ",[82,646,647],{"class":145},"\\\n",[82,649,650,653],{"class":141,"line":252},[82,651,652],{"class":277},"-dit ",[82,654,647],{"class":145},[82,656,657,660],{"class":141,"line":299},[82,658,659],{"class":277},"--privileged ",[82,661,647],{"class":145},[82,663,664,667],{"class":141,"line":304},[82,665,666],{"class":277},"--net=host ",[82,668,647],{"class":145},[82,670,671,674,677],{"class":141,"line":310},[82,672,673],{"class":277},"--group-add ",[82,675,676],{"class":149},"audio",[82,678,614],{"class":145},[82,680,681,683,686],{"class":141,"line":331},[82,682,673],{"class":277},[82,684,685],{"class":149},"video",[82,687,614],{"class":145},[82,689,690,692,695],{"class":141,"line":336},[82,691,673],{"class":277},[82,693,694],{"class":149},"dialout",[82,696,614],{"class":145},[82,698,699,701,704,707,710],{"class":141,"line":342},[82,700,629],{"class":277},[82,702,703],{"class":149},"XAUTHORITY=",[82,705,706],{"class":277},"$HOME",[82,708,709],{"class":149},"\u002F.Xauthority",[82,711,614],{"class":145},[82,713,714,716,719,722],{"class":141,"line":350},[82,715,629],{"class":277},[82,717,718],{"class":149},"WAYLAND_DISPLAY=",[82,720,721],{"class":277},"$WAYLAND_DISPLAY ",[82,723,647],{"class":145},[82,725,726,728,731,734],{"class":141,"line":356},[82,727,629],{"class":277},[82,729,730],{"class":149},"XDG_RUNTIME_DIR=",[82,732,733],{"class":277},"$XDG_RUNTIME_DIR ",[82,735,647],{"class":145},[82,737,738,740,743],{"class":141,"line":361},[82,739,629],{"class":277},[82,741,742],{"class":149},"QT_QPA_PLATFORM=xcb",[82,744,614],{"class":145},[82,746,747,750,753],{"class":141,"line":367},[82,748,749],{"class":277},"-v ",[82,751,752],{"class":149},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[82,754,614],{"class":145},[82,756,757,759,762],{"class":141,"line":381},[82,758,749],{"class":277},[82,760,761],{"class":149},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[82,763,614],{"class":145},[82,765,766,769,772,774,777],{"class":141,"line":386},[82,767,768],{"class":277},"-v $HOME",[82,770,771],{"class":149},"\u002F.Xauthority:",[82,773,706],{"class":277},[82,775,776],{"class":149},"\u002F.Xauthority:ro",[82,778,614],{"class":145},[82,780,781,783,786,789,792,795,798,801,803,805,807,809,812],{"class":141,"line":392},[82,782,749],{"class":277},[82,784,785],{"class":149},"\u002Frun\u002Fuser\u002F",[82,787,788],{"class":277},"$(",[82,790,791],{"class":156},"id",[82,793,794],{"class":145}," -u",[82,796,797],{"class":277},")",[82,799,800],{"class":149},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[82,802,788],{"class":277},[82,804,791],{"class":156},[82,806,794],{"class":145},[82,808,797],{"class":277},[82,810,811],{"class":149},"\u002Fwayland-0",[82,813,614],{"class":145},[82,815,816,818,820,822,824,826,828,831,833,835,837,840],{"class":141,"line":405},[82,817,749],{"class":277},[82,819,785],{"class":149},[82,821,788],{"class":277},[82,823,791],{"class":156},[82,825,794],{"class":145},[82,827,797],{"class":277},[82,829,830],{"class":149},":\u002Frun\u002Fuser\u002F",[82,832,788],{"class":277},[82,834,791],{"class":156},[82,836,794],{"class":145},[82,838,839],{"class":277},") ",[82,841,647],{"class":145},[82,843,844,846,848,851],{"class":141,"line":411},[82,845,768],{"class":277},[82,847,441],{"class":149},[82,849,850],{"class":277},"$HOME ",[82,852,647],{"class":145},[82,854,855,858],{"class":141,"line":463},[82,856,857],{"class":277},"-w $HOME ",[82,859,647],{"class":145},[82,861,862],{"class":141,"line":469},[82,863,864],{"class":277},"ubuntu24_cuda126_cudnn:latest\n",[10,866,867],{},"出现下列这一行,代表成功了.",[10,869,870],{},[174,871],{"alt":176,"src":872},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046035662.webp",[10,874,875],{},"可以在VScode的插件里看到容器已经成功运行.",[10,877,878],{},[174,879],{"alt":176,"src":880},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046118380.webp",[107,882,884],{"id":883},"打开容器里的ubuntu24系统的终端","打开容器里的Ubuntu24系统的终端",[10,886,519,887],{},[14,888,889],{},"docker exec -it 容器名称 bash",[10,891,525],{},[131,893,895],{"className":133,"code":894,"language":135,"meta":136,"style":136},"docker exec -it ubuntu24cuda126 bash\n",[14,896,897],{"__ignoreMap":136},[82,898,899,901,904,907,910],{"class":141,"line":142},[82,900,535],{"class":156},[82,902,903],{"class":149}," exec",[82,905,906],{"class":145}," -it",[82,908,909],{"class":149}," ubuntu24cuda126",[82,911,912],{"class":149}," bash\n",[10,914,915],{},"如下图你已经进入了容器里的Ubuntu24系统的终端了.",[10,917,918],{},[174,919],{"alt":176,"src":920},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046265023.webp",[10,922,923,924,927],{},"接下来可以安装一个",[14,925,926],{},"neofetch","测试一下.",[10,929,930,931,934,935,937,938,941,942,945],{},"注意,你这里已经是在",[14,932,933],{},"root","的身份下运行Ubuntu24系统的终端了,所以不需要每条命令前加",[14,936,602],{},"了,比如",[14,939,940],{},"sudo apt update","可以直接用",[14,943,944],{},"apt update","代替.",[131,947,949],{"className":133,"code":948,"language":135,"meta":136,"style":136},"apt update\napt install neofetch\nneofetch\n",[14,950,951,959,969],{"__ignoreMap":136},[82,952,953,956],{"class":141,"line":142},[82,954,955],{"class":156},"apt",[82,957,958],{"class":149}," update\n",[82,960,961,963,966],{"class":141,"line":153},[82,962,955],{"class":156},[82,964,965],{"class":149}," install",[82,967,968],{"class":149}," neofetch\n",[82,970,971],{"class":141,"line":240},[82,972,973],{"class":156},"neofetch\n",[10,975,976],{},[174,977],{"alt":176,"src":978},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782046451343.webp",[10,980,981],{},"然后可以顺便测试下英伟达驱动和CUDA以及CuDNN的安装情况:",[131,983,985],{"className":133,"code":984,"language":135,"meta":136,"style":136},"nvidia-smi\nnvcc -V\ncat \u002Fusr\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[14,986,987,992,1000],{"__ignoreMap":136},[82,988,989],{"class":141,"line":142},[82,990,991],{"class":156},"nvidia-smi\n",[82,993,994,997],{"class":141,"line":153},[82,995,996],{"class":156},"nvcc",[82,998,999],{"class":145}," -V\n",[82,1001,1002,1005,1008,1011,1014,1017,1020],{"class":141,"line":240},[82,1003,1004],{"class":156},"cat",[82,1006,1007],{"class":149}," \u002Fusr\u002Finclude\u002Fcudnn_version.h",[82,1009,1010],{"class":273}," |",[82,1012,1013],{"class":156}," grep",[82,1015,1016],{"class":149}," CUDNN_MAJOR",[82,1018,1019],{"class":145}," -A",[82,1021,1022],{"class":145}," 2\n",[10,1024,1025],{},"如下图可知,容器中的Ubuntu24共享了宿主的英伟达驱动,版本为595.80.",[10,1027,1028],{},"自带CUDA12.6与CuDNN9.3.0",[10,1030,1031],{},[174,1032],{"alt":176,"src":1033},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002F1782047529844.webp",[107,1035,1037],{"id":1036},"将镜像推送至docker-hub","将镜像推送至Docker Hub",[10,1039,1040],{},"The steps to push a Docker image to Docker Hub are as follows:",[179,1042,1043],{},[182,1044,1045],{},"Create a Docker Hub account",[10,1047,1048],{},"If you don't already have a Docker Hub account, please go to Docker Hub to register a free account.",[179,1050,1051],{"start":153},[182,1052,1053],{},"Log in to Docker Hub",[10,1055,1056],{},"In the terminal, use the following command to log in to your Docker Hub account:",[131,1058,1060],{"className":133,"code":1059,"language":135,"meta":136,"style":136},"docker login\n",[14,1061,1062],{"__ignoreMap":136},[82,1063,1064,1066],{"class":141,"line":142},[82,1065,535],{"class":156},[82,1067,1068],{"class":149}," login\n",[10,1070,1071],{},"Enter your Docker Hub username and password for verification.",[179,1073,1074],{"start":240},[182,1075,1076],{},"Tag your image",[10,1078,1079,1080,1083],{},"Docker Hub uses the format ",[14,1081,1082],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," to identify images. You need to tag your image so it can be pushed to Docker Hub. Use the following command:",[131,1085,1087],{"className":133,"code":1086,"language":135,"meta":136,"style":136},"docker tag 镜像名:标签 \u003C你的用户名>\u002F新镜像名:标签\n",[14,1088,1089],{"__ignoreMap":136},[82,1090,1091,1093,1096,1099,1102,1105,1108,1111],{"class":141,"line":142},[82,1092,535],{"class":156},[82,1094,1095],{"class":149}," tag",[82,1097,1098],{"class":149}," 镜像名:标签",[82,1100,1101],{"class":273}," \u003C",[82,1103,1104],{"class":149},"你的用户",[82,1106,1107],{"class":277},"名",[82,1109,1110],{"class":273},">",[82,1112,1113],{"class":149},"\u002F新镜像名:标签\n",[10,1115,1116,1117,1120],{},"For example, if your Docker Hub username is ",[14,1118,1119],{},"tungchiahui",", you should run:",[131,1122,1124],{"className":133,"code":1123,"language":135,"meta":136,"style":136},"docker tag ubuntu24_cuda126_cudnn:latest tungchiahui\u002Fubuntu24_cuda126_cudnn:latest\n",[14,1125,1126],{"__ignoreMap":136},[82,1127,1128,1130,1132,1134],{"class":141,"line":142},[82,1129,535],{"class":156},[82,1131,1095],{"class":149},[82,1133,544],{"class":149},[82,1135,1136],{"class":149}," tungchiahui\u002Fubuntu24_cuda126_cudnn:latest\n",[179,1138,1139],{"start":246},[182,1140,1141],{},"Push the image to Docker Hub",[10,1143,1144],{},"Use the following command to push the image to Docker Hub:",[131,1146,1148],{"className":133,"code":1147,"language":135,"meta":136,"style":136},"docker push \u003C你的用户名>\u002F镜像名:标签\n",[14,1149,1150],{"__ignoreMap":136},[82,1151,1152,1154,1157,1159,1161,1163,1165],{"class":141,"line":142},[82,1153,535],{"class":156},[82,1155,1156],{"class":149}," push",[82,1158,1101],{"class":273},[82,1160,1104],{"class":149},[82,1162,1107],{"class":277},[82,1164,1110],{"class":273},[82,1166,1167],{"class":149},"\u002F镜像名:标签\n",[10,1169,1170],{},"For example:",[131,1172,1174],{"className":133,"code":1173,"language":135,"meta":136,"style":136},"docker push tungchiahui\u002Fubuntu24_cuda126_cudnn:latest\n",[14,1175,1176],{"__ignoreMap":136},[82,1177,1178,1180,1182],{"class":141,"line":142},[82,1179,535],{"class":156},[82,1181,1156],{"class":149},[82,1183,1136],{"class":149},[179,1185,1186],{"start":252},[182,1187,1188],{},"Verify the push was successful.",[10,1190,1191],{},"You can verify whether your image has been successfully pushed by visiting your personal page on Docker Hub.",[10,1193,1194],{},[67,1195,1196],{},"Notes",[1198,1199,1200,1203],"ul",{},[182,1201,1202],{},"Make sure your image size stays within Docker Hub's limits (typically 10GB).",[182,1204,1205],{},"If you plan to make the image public, you can set it as a public repository; if you want only yourself to have access, you can set it as a private repository.",[10,1207,1208],{},[174,1209],{"alt":136,"src":1210},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage16.webp",[10,1212,1213],{},[174,1214],{"alt":136,"src":1215},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage17.webp",[107,1217,1219],{"id":1218},"手动创建跨平台多架构构建高阶的暂时不用学","手动创建(跨平台多架构构建)(高阶的,暂时不用学)",[10,1221,1222,1223,1226,1227,1230],{},"If you want to ",[67,1224,1225],{},"build images on an x86\u002Fx64 computer (i.e., native x86 devices) and also build Docker images for ARM64 devices like Raspberry Pi, Jetson, etc."," , you need to use ",[67,1228,1229],{},"Docker's cross-platform build functionality",". Here is the complete solution:",[62,1232],{},[10,1234,1235],{},[67,1236,1237],{},"启用 Docker 跨平台构建",[10,1239,1240],{},"To simulate an ARM64 environment on an x86 host, the following tools are required:",[179,1242,1243],{},[182,1244,1245],{},"启用 buildx（只需执行一次）",[131,1247,1249],{"className":133,"code":1248,"language":135,"meta":136,"style":136},"docker buildx create --name multiarch_builder --use\n",[14,1250,1251],{"__ignoreMap":136},[82,1252,1253,1255,1258,1261,1264,1267],{"class":141,"line":142},[82,1254,535],{"class":156},[82,1256,1257],{"class":149}," buildx",[82,1259,1260],{"class":149}," create",[82,1262,1263],{"class":145}," --name",[82,1265,1266],{"class":149}," multiarch_builder",[82,1268,1269],{"class":145}," --use\n",[10,1271,1272],{},"This will create and enable a builder that supports multi-architecture builds, and it will persist even after a computer restart, so it only needs to be run once.",[179,1274,1275],{"start":153},[182,1276,1277],{},"安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[131,1279,1281],{"className":133,"code":1280,"language":135,"meta":136,"style":136},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[14,1282,1283],{"__ignoreMap":136},[82,1284,1285,1287,1289,1292,1295,1298,1301,1304],{"class":141,"line":142},[82,1286,535],{"class":156},[82,1288,608],{"class":149},[82,1290,1291],{"class":145}," --rm",[82,1293,1294],{"class":145}," --privileged",[82,1296,1297],{"class":149}," multiarch\u002Fqemu-user-static",[82,1299,1300],{"class":145}," --reset",[82,1302,1303],{"class":145}," -p",[82,1305,1306],{"class":149}," yes\n",[10,1308,1309],{},"After restarting your computer, it will disappear, so you need to run this command once after each restart, before the buildx command.",[179,1311,1312],{"start":240},[182,1313,1314],{},"修改dockerfile为多架构版本",[131,1316,1318],{"className":258,"code":1317,"language":260,"meta":136,"style":136},"# 支持多架构，使用变量指定架构\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,1319,1320,1325,1333,1337,1341,1348,1352,1356,1362,1366,1370,1384,1388,1392,1398,1402,1406,1410,1429,1439,1453,1462,1467,1471,1475,1485,1489,1526,1531,1540,1549,1558,1563],{"__ignoreMap":136},[82,1321,1322],{"class":141,"line":142},[82,1323,1324],{"class":267},"# 支持多架构，使用变量指定架构\n",[82,1326,1327,1330],{"class":141,"line":153},[82,1328,1329],{"class":273},"ARG",[82,1331,1332],{"class":277}," TARGETARCH\n",[82,1334,1335],{"class":141,"line":240},[82,1336,284],{"emptyLinePlaceholder":283},[82,1338,1339],{"class":141,"line":246},[82,1340,268],{"class":267},[82,1342,1343,1345],{"class":141,"line":252},[82,1344,274],{"class":273},[82,1346,1347],{"class":277}," --platform=linux\u002F${TARGETARCH} nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[82,1349,1350],{"class":141,"line":299},[82,1351,284],{"emptyLinePlaceholder":283},[82,1353,1354],{"class":141,"line":304},[82,1355,289],{"class":267},[82,1357,1358,1360],{"class":141,"line":310},[82,1359,42],{"class":273},[82,1361,296],{"class":277},[82,1363,1364],{"class":141,"line":331},[82,1365,284],{"emptyLinePlaceholder":283},[82,1367,1368],{"class":141,"line":336},[82,1369,307],{"class":267},[82,1371,1372,1374,1376,1378,1380,1382],{"class":141,"line":342},[82,1373,313],{"class":273},[82,1375,316],{"class":277},[82,1377,319],{"class":149},[82,1379,322],{"class":277},[82,1381,325],{"class":149},[82,1383,328],{"class":277},[82,1385,1386],{"class":141,"line":350},[82,1387,284],{"emptyLinePlaceholder":283},[82,1389,1390],{"class":141,"line":356},[82,1391,339],{"class":267},[82,1393,1394,1396],{"class":141,"line":361},[82,1395,35],{"class":273},[82,1397,347],{"class":277},[82,1399,1400],{"class":141,"line":367},[82,1401,353],{"class":277},[82,1403,1404],{"class":141,"line":381},[82,1405,284],{"emptyLinePlaceholder":283},[82,1407,1408],{"class":141,"line":386},[82,1409,364],{"class":267},[82,1411,1412,1414,1417,1420,1423,1426],{"class":141,"line":392},[82,1413,35],{"class":273},[82,1415,1416],{"class":277}," if [ ",[82,1418,1419],{"class":149},"\"$(dpkg --print-architecture)\"",[82,1421,1422],{"class":277}," = ",[82,1424,1425],{"class":149},"\"amd64\"",[82,1427,1428],{"class":277}," ]; then \\\n",[82,1430,1431,1434,1436],{"class":141,"line":405},[82,1432,1433],{"class":277},"        sed -i ",[82,1435,375],{"class":149},[82,1437,1438],{"class":277}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources; \\\n",[82,1440,1441,1444,1446,1448,1451],{"class":141,"line":411},[82,1442,1443],{"class":277},"    elif [ ",[82,1445,1419],{"class":149},[82,1447,1422],{"class":277},[82,1449,1450],{"class":149},"\"arm64\"",[82,1452,1428],{"class":277},[82,1454,1455,1457,1460],{"class":141,"line":463},[82,1456,1433],{"class":277},[82,1458,1459],{"class":149},"'s|http:\u002F\u002Fports.ubuntu.com\u002Fubuntu-ports\u002F|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-ports\u002F|g'",[82,1461,1438],{"class":277},[82,1463,1464],{"class":141,"line":469},[82,1465,1466],{"class":277},"    fi\n",[82,1468,1469],{"class":141,"line":479},[82,1470,284],{"emptyLinePlaceholder":283},[82,1472,1473],{"class":141,"line":489},[82,1474,389],{"class":267},[82,1476,1477,1479,1481,1483],{"class":141,"line":499},[82,1478,35],{"class":273},[82,1480,372],{"class":277},[82,1482,399],{"class":149},[82,1484,402],{"class":277},[82,1486,1487],{"class":141,"line":505},[82,1488,408],{"class":267},[82,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524],{"class":141,"line":1491},27,[82,1493,414],{"class":277},[82,1495,417],{"class":149},[82,1497,420],{"class":145},[82,1499,423],{"class":149},[82,1501,426],{"class":145},[82,1503,429],{"class":149},[82,1505,432],{"class":145},[82,1507,435],{"class":149},[82,1509,438],{"class":145},[82,1511,441],{"class":149},[82,1513,420],{"class":145},[82,1515,446],{"class":149},[82,1517,449],{"class":145},[82,1519,435],{"class":149},[82,1521,454],{"class":145},[82,1523,457],{"class":149},[82,1525,460],{"class":277},[82,1527,1529],{"class":141,"line":1528},28,[82,1530,466],{"class":267},[82,1532,1534,1536,1538],{"class":141,"line":1533},29,[82,1535,414],{"class":277},[82,1537,474],{"class":149},[82,1539,460],{"class":277},[82,1541,1543,1545,1547],{"class":141,"line":1542},30,[82,1544,414],{"class":277},[82,1546,484],{"class":149},[82,1548,460],{"class":277},[82,1550,1552,1554,1556],{"class":141,"line":1551},31,[82,1553,414],{"class":277},[82,1555,494],{"class":149},[82,1557,460],{"class":277},[82,1559,1561],{"class":141,"line":1560},32,[82,1562,502],{"class":267},[82,1564,1566],{"class":141,"line":1565},33,[82,1567,508],{"class":277},[179,1569,1570],{"start":246},[182,1571,1572],{},"构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[131,1574,1576],{"className":133,"code":1575,"language":135,"meta":136,"style":136},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n",[14,1577,1578],{"__ignoreMap":136},[82,1579,1580,1582,1584,1586,1589,1592,1594,1596,1599,1601,1603,1605,1608,1611,1614,1616,1619],{"class":141,"line":142},[82,1581,535],{"class":156},[82,1583,1257],{"class":149},[82,1585,538],{"class":149},[82,1587,1588],{"class":145}," --platform",[82,1590,1591],{"class":149}," linux\u002Famd64,linux\u002Farm64",[82,1593,541],{"class":145},[82,1595,1101],{"class":273},[82,1597,1598],{"class":149},"你的镜像",[82,1600,1107],{"class":277},[82,1602,1110],{"class":273},[82,1604,441],{"class":149},[82,1606,1607],{"class":273},"\u003C",[82,1609,1610],{"class":149},"标",[82,1612,1613],{"class":277},"签",[82,1615,1110],{"class":273},[82,1617,1618],{"class":145}," --push",[82,1620,159],{"class":149},[10,1622,1623],{},"例子：",[131,1625,1627],{"className":133,"code":1626,"language":135,"meta":136,"style":136},"docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fubuntu24_cuda126_cudnn:latest \\\n --push \\\n .\n",[14,1628,1629,1639,1649,1658,1664],{"__ignoreMap":136},[82,1630,1631,1633,1635,1637],{"class":141,"line":142},[82,1632,535],{"class":156},[82,1634,1257],{"class":149},[82,1636,538],{"class":149},[82,1638,614],{"class":145},[82,1640,1641,1644,1647],{"class":141,"line":153},[82,1642,1643],{"class":277},"--platform ",[82,1645,1646],{"class":149},"linux\u002Famd64,linux\u002Farm64",[82,1648,614],{"class":145},[82,1650,1651,1653,1656],{"class":141,"line":240},[82,1652,541],{"class":145},[82,1654,1655],{"class":149}," tungchiahui\u002Fubuntu24_cuda126_cudnn:latest",[82,1657,614],{"class":145},[82,1659,1660,1662],{"class":141,"line":246},[82,1661,1618],{"class":145},[82,1663,614],{"class":145},[82,1665,1666],{"class":141,"line":252},[82,1667,159],{"class":149},[10,1669,1670,1671,1674,1675,1678,1679,1682],{},"Note: ",[14,1672,1673],{},"--platform"," specifies multi-architecture. ",[14,1676,1677],{},"--push"," is required because buildx's multi-platform builds cannot be loaded locally by default (unless ",[14,1680,1681],{},"--load"," is added, but that only supports a single architecture).",[10,1684,1685],{},[174,1686],{"alt":136,"src":1687},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage18.webp",[10,1689,1690],{},[174,1691],{"alt":136,"src":1692},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage19.webp",[107,1694,1696],{"id":1695},"clear-build-cache","Clear build cache",[131,1698,1700],{"className":133,"code":1699,"language":135,"meta":136,"style":136},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[14,1701,1702,1707],{"__ignoreMap":136},[82,1703,1704],{"class":141,"line":142},[82,1705,1706],{"class":267},"# 清理BuildKit构建缓存\n",[82,1708,1709,1711,1714,1717],{"class":141,"line":153},[82,1710,535],{"class":156},[82,1712,1713],{"class":149}," builder",[82,1715,1716],{"class":149}," prune",[82,1718,1719],{"class":145}," -f\n",[10,1721,1722],{},[174,1723],{"alt":136,"src":1724},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2024\u002F10\u002F03\u002Fimage20.webp",[1726,1727,1728],"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":136,"searchDepth":153,"depth":153,"links":1730},[1731,1732],{"id":56,"depth":240,"text":57},{"id":104,"depth":240,"text":105},"\u002Fen-us\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","en-us:2024-10-03-docker-jiao-cheng","\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng","Docker教程","md","wiki\u002F2024-10-03-Docker教程\u002F0650-手动创建Docker镜像",false,null,"en-US","en-us",{},{"title":5,"description":1737},"\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0650-手动创建Docker镜像","QjN8V-TLQPPluLeY5RlMqSn83BxaB0gzy-2AIgejgDA",[1754,1759,1764,1769,1774,1779,1784,1785,1790,1795,1800,1805],{"path":1755,"stem":1756,"title":1757,"date":1736,"chapterOrder":1758,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0100-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0100-简介","Introduction","0100",{"path":1760,"stem":1761,"title":1762,"date":1736,"chapterOrder":1763,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0200-an-zhuang-docker","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0200-安装Docker","Install Docker","0200",{"path":1765,"stem":1766,"title":1767,"date":1736,"chapterOrder":1768,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0300-docker-zhi-tong","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0300-Docker直通","Docker Passthrough","0300",{"path":1770,"stem":1771,"title":1772,"date":1736,"chapterOrder":1773,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0400-dockerhub-huan-yuan","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0400-DockerHub换源","DockerHub change source","0400",{"path":1775,"stem":1776,"title":1777,"date":1736,"chapterOrder":1778,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\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\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0500-docker容器里的程序的图形界面弹不出来","The graphical interface of the program inside the Docker container cannot be displayed.","0500",{"path":1780,"stem":1781,"title":1782,"date":1736,"chapterOrder":1783,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0600-docker-ming-ling-xue-xi","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0600-Docker命令学习","Learning Docker Commands","0600",{"path":1733,"stem":1751,"title":5,"date":1736,"chapterOrder":1735,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},{"path":1786,"stem":1787,"title":1788,"date":1736,"chapterOrder":1789,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0675-vscode-yuan-cheng-kai-fa","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0675-VScode远程开发","VScode remote development","0675",{"path":1791,"stem":1792,"title":1793,"date":1736,"chapterOrder":1794,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0700-ge-zhong-docker-rong-qi-bu-shu","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F0700-各种Docker容器部署","Deploying various Docker containers","0700",{"path":1796,"stem":1797,"title":1798,"date":1736,"chapterOrder":1799,"chapterDepth":142,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F1000-0100-kuai-su-da-kai-zhong-duan","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F1000-0100-快速打开终端","Quickly Open a Terminal in Docker","1000-0100",{"path":1801,"stem":1802,"title":1803,"date":1736,"chapterOrder":1804,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":1744},"\u002Fen-us\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F1000-docker-shi-yong-you-hua","_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002F1000-Docker使用优化","Docker Usage Optimization","1000",{"path":1740,"stem":1806,"title":1807,"date":1736,"chapterOrder":1745,"chapterDepth":1734,"docKey":1739,"docRoot":1740,"docTitle":1741,"isWikiDoc":283,"isWikiIndex":283},"_i18n\u002Fen-us\u002Fwiki\u002F2024-10-03-Docker教程\u002Findex","Docker tutorial",{"variants":1809},[1810,1811,1814,1817,1820],{"path":1733,"localeSlug":1747,"i18nKey":1743},{"path":1812,"localeSlug":1813,"i18nKey":1743},"\u002Fzh-hant\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-hant",{"path":1815,"localeSlug":1816,"i18nKey":1743},"\u002Fzh-hk\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-hk",{"path":1818,"localeSlug":1819,"i18nKey":1743},"\u002Fzh-tw\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-tw",{"path":1821,"localeSlug":1822,"i18nKey":1743},"\u002Fzh-cn\u002Fwiki\u002F2024-10-03-docker-jiao-cheng\u002F0650-shou-dong-chuang-jian-docker-jing-xiang","zh-cn",[1733,1750,1812,1750,1815,1750,1818,1750,1821,1750],1784646847790]