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