[{"data":1,"prerenderedAt":1483},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang":3,"wiki-doc-items-/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang":1402,"language-switcher-data-/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang":1467,"wiki-i18n-paths-/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang":1482},{"id":4,"title":5,"body":6,"canonicalPath":1384,"chapter":1385,"chapterSort":1386,"date":1387,"description":15,"docI18nKey":1388,"docKey":1389,"docRoot":1390,"docTitle":1391,"extension":1392,"i18nKey":1393,"isBlogPost":1394,"isWikiDoc":283,"isWikiIndex":1394,"layout":1395,"legacyPath":1396,"locale":1397,"localeSlug":1398,"meta":1399,"navigation":283,"path":1384,"seo":1400,"sourcePath":1396,"sourceStem":1393,"stem":1393,"wikiDepth":280,"__hash__":1401},"content/wiki/2024-10-03-Docker教程/ch8-手动创建Docker镜像.md","手动创建Docker镜像",{"type":7,"value":8,"toc":1380},"minimark",[9,16,21,254,257,261,268,292,295,414,420,423,428,431,438,441,446,449,461,464,469,476,507,514,590,595,598,621,624,698,703,706,711,720,725,730,734,745,748,754,757,760,771,774,777,807,810,813,1334,1337,1342,1347,1350,1371,1376],[10,11,12],"p",{},[13,14,15],"strong",{},"（嫌麻烦的话，直接去看各种docker容器部署的章节）（有别人给你创建好的，就别自己折腾啦）",[17,18,20],"h3",{"id":19},"dockerfile","DockerFile",[22,23,24,41],"table",{},[25,26,27],"thead",{},[28,29,30,35,38],"tr",{},[31,32,34],"th",{"align":33},"left","指令",[31,36,37],{"align":33},"说明",[31,39,40],{"align":33},"示例",[42,43,44,56,73,84,95,106,117,128,139,154,168,179,193,204,215,229,243],"tbody",{},[28,45,46,50,53],{},[47,48,49],"td",{"align":33},"FROM",[47,51,52],{"align":33},"指定基础镜像，是 Dockerfile 的起点",[47,54,55],{"align":33},"FROM ubuntu:22.04",[28,57,58,61,64],{},[47,59,60],{"align":33},"LABEL",[47,62,63],{"align":33},"添加元数据（如作者、版本等）",[47,65,66,67,72],{"align":33},"LABEL maintainer=\"",[68,69,71],"a",{"href":70},"mailto:you@example.com","you@example.com","\"",[28,74,75,78,81],{},[47,76,77],{"align":33},"ENV",[47,79,80],{"align":33},"设置环境变量",[47,82,83],{"align":33},"ENV PORT=8080",[28,85,86,89,92],{},[47,87,88],{"align":33},"ARG",[47,90,91],{"align":33},"构建参数，只在构建期间可用",[47,93,94],{"align":33},"ARG VERSION=1.0",[28,96,97,100,103],{},[47,98,99],{"align":33},"RUN",[47,101,102],{"align":33},"构建镜像时运行命令",[47,104,105],{"align":33},"RUN apt-get update && apt-get install -y curl",[28,107,108,111,114],{},[47,109,110],{"align":33},"COPY",[47,112,113],{"align":33},"复制文件到镜像中",[47,115,116],{"align":33},"COPY . /app",[28,118,119,122,125],{},[47,120,121],{"align":33},"ADD",[47,123,124],{"align":33},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[47,126,127],{"align":33},"ADD archive.tar.gz /data/",[28,129,130,133,136],{},[47,131,132],{"align":33},"WORKDIR",[47,134,135],{"align":33},"设置工作目录",[47,137,138],{"align":33},"WORKDIR /opt",[28,140,141,144,147],{},[47,142,143],{"align":33},"CMD",[47,145,146],{"align":33},"设置容器启动时默认命令（可被 docker run 覆盖）",[47,148,149,150],{"align":33},"CMD ",[151,152,153],"span",{},"\"node\", \"index.js\"",[28,155,156,159,162],{},[47,157,158],{"align":33},"ENTRYPOINT",[47,160,161],{"align":33},"设置容器启动时固定命令（通常用于 CLI 工具等）",[47,163,164,165],{"align":33},"ENTRYPOINT ",[151,166,167],{},"\"python3\"",[28,169,170,173,176],{},[47,171,172],{"align":33},"EXPOSE",[47,174,175],{"align":33},"声明镜像内服务监听的端口（不会自动映射）",[47,177,178],{"align":33},"EXPOSE 80",[28,180,181,184,187],{},[47,182,183],{"align":33},"VOLUME",[47,185,186],{"align":33},"声明数据卷挂载点",[47,188,189,190],{"align":33},"VOLUME ",[151,191,192],{},"\"/data\"",[28,194,195,198,201],{},[47,196,197],{"align":33},"USER",[47,199,200],{"align":33},"设置后续命令执行的用户",[47,202,203],{"align":33},"USER appuser",[28,205,206,209,212],{},[47,207,208],{"align":33},"ONBUILD",[47,210,211],{"align":33},"当镜像作为其他镜像基础镜像时触发的构建指令",[47,213,214],{"align":33},"ONBUILD COPY . /src",[28,216,217,220,223],{},[47,218,219],{"align":33},"SHELL",[47,221,222],{"align":33},"更改默认 shell，比如将 sh -c 改为 bash -c",[47,224,225,226],{"align":33},"SHELL ",[151,227,228],{},"\"/bin/bash\", \"-c\"",[28,230,231,234,237],{},[47,232,233],{"align":33},"HEALTHCHECK",[47,235,236],{"align":33},"定义容器运行时的健康检查命令",[47,238,239],{"align":33},[240,241,242],"code",{},"HEALTHCHECK CMD curl --fail http://localhost:8080",[28,244,245,248,251],{},[47,246,247],{"align":33},"STOPSIGNAL",[47,249,250],{"align":33},"容器停止时发送的信号",[47,252,253],{"align":33},"STOPSIGNAL SIGKILL",[17,255,256],{"id":256},"自己创建容器",[258,259,260],"h4",{"id":260},"手动创建",[10,262,263],{},[68,264,265],{"href":265,"rel":266},"https://github.com/tungchiahui/ros-docker",[267],"nofollow",[269,270,275],"pre",{"className":271,"code":272,"language":273,"meta":274,"style":274},"language-bash shiki shiki-themes github-light github-dark","\n# DockerFile内容请看Github仓库中的DockerFile\n","bash","",[240,276,277,285],{"__ignoreMap":274},[151,278,281],{"class":279,"line":280},"line",1,[151,282,284],{"emptyLinePlaceholder":283},true,"\n",[151,286,288],{"class":279,"line":287},2,[151,289,291],{"class":290},"sJ8bj","# DockerFile内容请看Github仓库中的DockerFile\n",[10,293,294],{},"在x86电脑上编译x86的：",[269,296,298],{"className":271,"code":297,"language":273,"meta":274,"style":274},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[240,299,300,320,324,338,343,357,362,376,381,395,400],{"__ignoreMap":274},[151,301,302,306,310,314,317],{"class":279,"line":280},[151,303,305],{"class":304},"sScJk","docker",[151,307,309],{"class":308},"sZZnC"," build",[151,311,313],{"class":312},"sj4cs"," -t",[151,315,316],{"class":308}," ros-melodic-cuda118-cudnn8-bionic:latest",[151,318,319],{"class":308}," .\n",[151,321,322],{"class":279,"line":287},[151,323,284],{"emptyLinePlaceholder":283},[151,325,327,329,331,333,336],{"class":279,"line":326},3,[151,328,305],{"class":304},[151,330,309],{"class":308},[151,332,313],{"class":312},[151,334,335],{"class":308}," ros-noetic-focal:latest",[151,337,319],{"class":308},[151,339,341],{"class":279,"line":340},4,[151,342,284],{"emptyLinePlaceholder":283},[151,344,346,348,350,352,355],{"class":279,"line":345},5,[151,347,305],{"class":304},[151,349,309],{"class":308},[151,351,313],{"class":312},[151,353,354],{"class":308}," ros-humble-jammy:latest",[151,356,319],{"class":308},[151,358,360],{"class":279,"line":359},6,[151,361,284],{"emptyLinePlaceholder":283},[151,363,365,367,369,371,374],{"class":279,"line":364},7,[151,366,305],{"class":304},[151,368,309],{"class":308},[151,370,313],{"class":312},[151,372,373],{"class":308}," ros-jazzy-noble:latest",[151,375,319],{"class":308},[151,377,379],{"class":279,"line":378},8,[151,380,284],{"emptyLinePlaceholder":283},[151,382,384,386,388,390,393],{"class":279,"line":383},9,[151,385,305],{"class":304},[151,387,309],{"class":308},[151,389,313],{"class":312},[151,391,392],{"class":308}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[151,394,319],{"class":308},[151,396,398],{"class":279,"line":397},10,[151,399,284],{"emptyLinePlaceholder":283},[151,401,403,405,407,409,412],{"class":279,"line":402},11,[151,404,305],{"class":304},[151,406,309],{"class":308},[151,408,313],{"class":312},[151,410,411],{"class":308}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[151,413,319],{"class":308},[10,415,416],{},[417,418],"img",{"alt":274,"src":419},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image14.webp",[10,421,422],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[10,424,425],{},[417,426],{"alt":274,"src":427},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image15.webp",[10,429,430],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[432,433,434],"ol",{},[435,436,437],"li",{},"创建 Docker Hub 账户",[10,439,440],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[432,442,443],{"start":287},[435,444,445],{},"登录 Docker Hub",[10,447,448],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[269,450,452],{"className":271,"code":451,"language":273,"meta":274,"style":274},"docker login\n",[240,453,454],{"__ignoreMap":274},[151,455,456,458],{"class":279,"line":280},[151,457,305],{"class":304},[151,459,460],{"class":308}," login\n",[10,462,463],{},"输入你的 Docker Hub 用户名和密码进行验证。",[432,465,466],{"start":326},[435,467,468],{},"为你的镜像打标签",[10,470,471,472,475],{},"Docker Hub 使用 ",[240,473,474],{},"\u003C用户名>/\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[269,477,479],{"className":271,"code":478,"language":273,"meta":274,"style":274},"docker tag ros-jazzy-noble:latest \u003C你的用户名>/ros-jazzy-noble:latest\n",[240,480,481],{"__ignoreMap":274},[151,482,483,485,488,490,494,497,501,504],{"class":279,"line":280},[151,484,305],{"class":304},[151,486,487],{"class":308}," tag",[151,489,373],{"class":308},[151,491,493],{"class":492},"szBVR"," \u003C",[151,495,496],{"class":308},"你的用户",[151,498,500],{"class":499},"sVt8B","名",[151,502,503],{"class":492},">",[151,505,506],{"class":308},"/ros-jazzy-noble:latest\n",[10,508,509,510,513],{},"例如，如果你的 Docker Hub 用户名是 ",[240,511,512],{},"tungchiahui","，你应该执行：",[269,515,517],{"className":271,"code":516,"language":273,"meta":274,"style":274},"docker tag ros-noetic-focal:latest tungchiahui/ros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui/ros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui/ros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest tungchiahui/ros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui/ros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[240,518,519,530,534,545,549,560,564,575,579],{"__ignoreMap":274},[151,520,521,523,525,527],{"class":279,"line":280},[151,522,305],{"class":304},[151,524,487],{"class":308},[151,526,335],{"class":308},[151,528,529],{"class":308}," tungchiahui/ros-noetic-focal:latest\n",[151,531,532],{"class":279,"line":287},[151,533,284],{"emptyLinePlaceholder":283},[151,535,536,538,540,542],{"class":279,"line":326},[151,537,305],{"class":304},[151,539,487],{"class":308},[151,541,354],{"class":308},[151,543,544],{"class":308}," tungchiahui/ros-humble-jammy:latest\n",[151,546,547],{"class":279,"line":340},[151,548,284],{"emptyLinePlaceholder":283},[151,550,551,553,555,557],{"class":279,"line":345},[151,552,305],{"class":304},[151,554,487],{"class":308},[151,556,373],{"class":308},[151,558,559],{"class":308}," tungchiahui/ros-jazzy-noble:latest\n",[151,561,562],{"class":279,"line":359},[151,563,284],{"emptyLinePlaceholder":283},[151,565,566,568,570,572],{"class":279,"line":364},[151,567,305],{"class":304},[151,569,487],{"class":308},[151,571,392],{"class":308},[151,573,574],{"class":308}," tungchiahui/ros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[151,576,577],{"class":279,"line":378},[151,578,284],{"emptyLinePlaceholder":283},[151,580,581,583,585,587],{"class":279,"line":383},[151,582,305],{"class":304},[151,584,487],{"class":308},[151,586,411],{"class":308},[151,588,589],{"class":308}," tungchiahui/ros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[432,591,592],{"start":340},[435,593,594],{},"推送镜像到 Docker Hub",[10,596,597],{},"使用以下命令将镜像推送到 Docker Hub：",[269,599,601],{"className":271,"code":600,"language":273,"meta":274,"style":274},"docker push \u003C你的用户名>/ros-noetic-jazzy-noble:latest\n",[240,602,603],{"__ignoreMap":274},[151,604,605,607,610,612,614,616,618],{"class":279,"line":280},[151,606,305],{"class":304},[151,608,609],{"class":308}," push",[151,611,493],{"class":492},[151,613,496],{"class":308},[151,615,500],{"class":499},[151,617,503],{"class":492},[151,619,620],{"class":308},"/ros-noetic-jazzy-noble:latest\n",[10,622,623],{},"例如：",[269,625,627],{"className":271,"code":626,"language":273,"meta":274,"style":274},"docker push tungchiahui/ros-noetic-focal:latest\n\ndocker push tungchiahui/ros-humble-jammy:latest\n\ndocker push tungchiahui/ros-jazzy-noble:latest\n\ndocker push tungchiahui/ros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui/ros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui/ros-noetic-focal-arm64:latest\n",[240,628,629,637,641,649,653,661,665,673,677,685,689],{"__ignoreMap":274},[151,630,631,633,635],{"class":279,"line":280},[151,632,305],{"class":304},[151,634,609],{"class":308},[151,636,529],{"class":308},[151,638,639],{"class":279,"line":287},[151,640,284],{"emptyLinePlaceholder":283},[151,642,643,645,647],{"class":279,"line":326},[151,644,305],{"class":304},[151,646,609],{"class":308},[151,648,544],{"class":308},[151,650,651],{"class":279,"line":340},[151,652,284],{"emptyLinePlaceholder":283},[151,654,655,657,659],{"class":279,"line":345},[151,656,305],{"class":304},[151,658,609],{"class":308},[151,660,559],{"class":308},[151,662,663],{"class":279,"line":359},[151,664,284],{"emptyLinePlaceholder":283},[151,666,667,669,671],{"class":279,"line":364},[151,668,305],{"class":304},[151,670,609],{"class":308},[151,672,574],{"class":308},[151,674,675],{"class":279,"line":378},[151,676,284],{"emptyLinePlaceholder":283},[151,678,679,681,683],{"class":279,"line":383},[151,680,305],{"class":304},[151,682,609],{"class":308},[151,684,589],{"class":308},[151,686,687],{"class":279,"line":397},[151,688,284],{"emptyLinePlaceholder":283},[151,690,691,693,695],{"class":279,"line":402},[151,692,305],{"class":304},[151,694,609],{"class":308},[151,696,697],{"class":308}," tungchiahui/ros-noetic-focal-arm64:latest\n",[432,699,700],{"start":345},[435,701,702],{},"验证推送成功",[10,704,705],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送。",[10,707,708],{},[13,709,710],{},"注意事项",[712,713,714,717],"ul",{},[435,715,716],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）。",[435,718,719],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库。",[10,721,722],{},[417,723],{"alt":274,"src":724},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image16.webp",[10,726,727],{},[417,728],{"alt":274,"src":729},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image17.webp",[258,731,733],{"id":732},"手动创建跨平台多架构构建","手动创建(跨平台多架构构建)",[10,735,736,737,740,741,744],{},"如果您想在 ",[13,738,739],{},"x86/x64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[13,742,743],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[746,747],"hr",{},[10,749,750,751],{},"1. ",[13,752,753],{},"启用 Docker 跨平台构建",[10,755,756],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[10,758,759],{},"第一步：启用 buildx（只需执行一次）",[269,761,765],{"className":762,"code":763,"language":764,"meta":274,"style":274},"language-Shell shiki shiki-themes github-light github-dark","docker buildx create --name multiarch_builder --use\n","Shell",[240,766,767],{"__ignoreMap":274},[151,768,769],{"class":279,"line":280},[151,770,763],{},[10,772,773],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[10,775,776],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[269,778,780],{"className":271,"code":779,"language":273,"meta":274,"style":274},"docker run --rm --privileged multiarch/qemu-user-static --reset -p yes\n",[240,781,782],{"__ignoreMap":274},[151,783,784,786,789,792,795,798,801,804],{"class":279,"line":280},[151,785,305],{"class":304},[151,787,788],{"class":308}," run",[151,790,791],{"class":312}," --rm",[151,793,794],{"class":312}," --privileged",[151,796,797],{"class":308}," multiarch/qemu-user-static",[151,799,800],{"class":312}," --reset",[151,802,803],{"class":312}," -p",[151,805,806],{"class":308}," yes\n",[10,808,809],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[10,811,812],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[269,814,816],{"className":271,"code":815,"language":273,"meta":274,"style":274},"docker buildx build --platform linux/amd64,linux/arm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/ros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/ros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/ros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/opencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/opencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/opencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/ros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/ros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t tungchiahui/ros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n -t sdutvincirobot/ros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[240,817,818,863,867,872,883,893,902,908,912,916,926,934,944,951,956,961,972,981,991,998,1003,1008,1020,1029,1039,1046,1051,1056,1067,1076,1086,1093,1098,1103,1114,1123,1133,1140,1145,1150,1161,1170,1180,1187,1192,1197,1208,1217,1227,1234,1239,1244,1255,1264,1274,1281,1286,1291,1303,1312,1322,1329],{"__ignoreMap":274},[151,819,820,822,825,827,830,833,835,837,840,842,844,847,850,853,856,858,861],{"class":279,"line":280},[151,821,305],{"class":304},[151,823,824],{"class":308}," buildx",[151,826,309],{"class":308},[151,828,829],{"class":312}," --platform",[151,831,832],{"class":308}," linux/amd64,linux/arm64",[151,834,313],{"class":312},[151,836,493],{"class":492},[151,838,839],{"class":308},"你的镜像",[151,841,500],{"class":499},[151,843,503],{"class":492},[151,845,846],{"class":308},":",[151,848,849],{"class":492},"\u003C",[151,851,852],{"class":308},"标",[151,854,855],{"class":499},"签",[151,857,503],{"class":492},[151,859,860],{"class":312}," --push",[151,862,319],{"class":308},[151,864,865],{"class":279,"line":287},[151,866,284],{"emptyLinePlaceholder":283},[151,868,869],{"class":279,"line":326},[151,870,871],{"class":290},"# 例子：\n",[151,873,874,876,878,880],{"class":279,"line":340},[151,875,305],{"class":304},[151,877,824],{"class":308},[151,879,309],{"class":308},[151,881,882],{"class":312}," \\\n",[151,884,885,888,891],{"class":279,"line":345},[151,886,887],{"class":499},"--platform ",[151,889,890],{"class":308},"linux/amd64,linux/arm64",[151,892,882],{"class":312},[151,894,895,897,900],{"class":279,"line":359},[151,896,313],{"class":312},[151,898,899],{"class":308}," tungchiahui/ros:noetic-focal",[151,901,882],{"class":312},[151,903,904,906],{"class":279,"line":364},[151,905,860],{"class":312},[151,907,882],{"class":312},[151,909,910],{"class":279,"line":378},[151,911,319],{"class":308},[151,913,914],{"class":279,"line":383},[151,915,284],{"emptyLinePlaceholder":283},[151,917,918,920,922,924],{"class":279,"line":397},[151,919,305],{"class":304},[151,921,824],{"class":308},[151,923,309],{"class":308},[151,925,882],{"class":312},[151,927,928,930,932],{"class":279,"line":402},[151,929,887],{"class":499},[151,931,890],{"class":308},[151,933,882],{"class":312},[151,935,937,939,942],{"class":279,"line":936},12,[151,938,313],{"class":312},[151,940,941],{"class":308}," tungchiahui/ros:humble-jammy",[151,943,882],{"class":312},[151,945,947,949],{"class":279,"line":946},13,[151,948,860],{"class":312},[151,950,882],{"class":312},[151,952,954],{"class":279,"line":953},14,[151,955,319],{"class":308},[151,957,959],{"class":279,"line":958},15,[151,960,284],{"emptyLinePlaceholder":283},[151,962,964,966,968,970],{"class":279,"line":963},16,[151,965,305],{"class":304},[151,967,824],{"class":308},[151,969,309],{"class":308},[151,971,882],{"class":312},[151,973,975,977,979],{"class":279,"line":974},17,[151,976,887],{"class":499},[151,978,890],{"class":308},[151,980,882],{"class":312},[151,982,984,986,989],{"class":279,"line":983},18,[151,985,313],{"class":312},[151,987,988],{"class":308}," tungchiahui/ros:jazzy-noble",[151,990,882],{"class":312},[151,992,994,996],{"class":279,"line":993},19,[151,995,860],{"class":312},[151,997,882],{"class":312},[151,999,1001],{"class":279,"line":1000},20,[151,1002,319],{"class":308},[151,1004,1006],{"class":279,"line":1005},21,[151,1007,284],{"emptyLinePlaceholder":283},[151,1009,1011,1014,1016,1018],{"class":279,"line":1010},22,[151,1012,1013],{"class":304}," docker",[151,1015,824],{"class":308},[151,1017,309],{"class":308},[151,1019,882],{"class":312},[151,1021,1023,1025,1027],{"class":279,"line":1022},23,[151,1024,887],{"class":499},[151,1026,890],{"class":308},[151,1028,882],{"class":312},[151,1030,1032,1034,1037],{"class":279,"line":1031},24,[151,1033,313],{"class":312},[151,1035,1036],{"class":308}," tungchiahui/opencv:411-cuda128-cudnn970-focal",[151,1038,882],{"class":312},[151,1040,1042,1044],{"class":279,"line":1041},25,[151,1043,860],{"class":312},[151,1045,882],{"class":312},[151,1047,1049],{"class":279,"line":1048},26,[151,1050,319],{"class":308},[151,1052,1054],{"class":279,"line":1053},27,[151,1055,284],{"emptyLinePlaceholder":283},[151,1057,1059,1061,1063,1065],{"class":279,"line":1058},28,[151,1060,305],{"class":304},[151,1062,824],{"class":308},[151,1064,309],{"class":308},[151,1066,882],{"class":312},[151,1068,1070,1072,1074],{"class":279,"line":1069},29,[151,1071,887],{"class":499},[151,1073,890],{"class":308},[151,1075,882],{"class":312},[151,1077,1079,1081,1084],{"class":279,"line":1078},30,[151,1080,313],{"class":312},[151,1082,1083],{"class":308}," tungchiahui/opencv:411-cuda128-cudnn971-jammy",[151,1085,882],{"class":312},[151,1087,1089,1091],{"class":279,"line":1088},31,[151,1090,860],{"class":312},[151,1092,882],{"class":312},[151,1094,1096],{"class":279,"line":1095},32,[151,1097,319],{"class":308},[151,1099,1101],{"class":279,"line":1100},33,[151,1102,284],{"emptyLinePlaceholder":283},[151,1104,1106,1108,1110,1112],{"class":279,"line":1105},34,[151,1107,1013],{"class":304},[151,1109,824],{"class":308},[151,1111,309],{"class":308},[151,1113,882],{"class":312},[151,1115,1117,1119,1121],{"class":279,"line":1116},35,[151,1118,887],{"class":499},[151,1120,890],{"class":308},[151,1122,882],{"class":312},[151,1124,1126,1128,1131],{"class":279,"line":1125},36,[151,1127,313],{"class":312},[151,1129,1130],{"class":308}," tungchiahui/opencv:411-cuda128-cudnn971-noble",[151,1132,882],{"class":312},[151,1134,1136,1138],{"class":279,"line":1135},37,[151,1137,860],{"class":312},[151,1139,882],{"class":312},[151,1141,1143],{"class":279,"line":1142},38,[151,1144,319],{"class":308},[151,1146,1148],{"class":279,"line":1147},39,[151,1149,284],{"emptyLinePlaceholder":283},[151,1151,1153,1155,1157,1159],{"class":279,"line":1152},40,[151,1154,305],{"class":304},[151,1156,824],{"class":308},[151,1158,309],{"class":308},[151,1160,882],{"class":312},[151,1162,1164,1166,1168],{"class":279,"line":1163},41,[151,1165,887],{"class":499},[151,1167,890],{"class":308},[151,1169,882],{"class":312},[151,1171,1173,1175,1178],{"class":279,"line":1172},42,[151,1174,313],{"class":312},[151,1176,1177],{"class":308}," tungchiahui/ros-opencv:noetic-411-cuda128-cudnn970-focal",[151,1179,882],{"class":312},[151,1181,1183,1185],{"class":279,"line":1182},43,[151,1184,860],{"class":312},[151,1186,882],{"class":312},[151,1188,1190],{"class":279,"line":1189},44,[151,1191,319],{"class":308},[151,1193,1195],{"class":279,"line":1194},45,[151,1196,284],{"emptyLinePlaceholder":283},[151,1198,1200,1202,1204,1206],{"class":279,"line":1199},46,[151,1201,305],{"class":304},[151,1203,824],{"class":308},[151,1205,309],{"class":308},[151,1207,882],{"class":312},[151,1209,1211,1213,1215],{"class":279,"line":1210},47,[151,1212,887],{"class":499},[151,1214,890],{"class":308},[151,1216,882],{"class":312},[151,1218,1220,1222,1225],{"class":279,"line":1219},48,[151,1221,313],{"class":312},[151,1223,1224],{"class":308}," tungchiahui/ros-opencv:humble-411-cuda128-cudnn970-jammy",[151,1226,882],{"class":312},[151,1228,1230,1232],{"class":279,"line":1229},49,[151,1231,860],{"class":312},[151,1233,882],{"class":312},[151,1235,1237],{"class":279,"line":1236},50,[151,1238,319],{"class":308},[151,1240,1242],{"class":279,"line":1241},51,[151,1243,284],{"emptyLinePlaceholder":283},[151,1245,1247,1249,1251,1253],{"class":279,"line":1246},52,[151,1248,1013],{"class":304},[151,1250,824],{"class":308},[151,1252,309],{"class":308},[151,1254,882],{"class":312},[151,1256,1258,1260,1262],{"class":279,"line":1257},53,[151,1259,887],{"class":499},[151,1261,890],{"class":308},[151,1263,882],{"class":312},[151,1265,1267,1269,1272],{"class":279,"line":1266},54,[151,1268,313],{"class":312},[151,1270,1271],{"class":308}," tungchiahui/ros-opencv:jazzy-411-cuda128-cudnn970-noble",[151,1273,882],{"class":312},[151,1275,1277,1279],{"class":279,"line":1276},55,[151,1278,860],{"class":312},[151,1280,882],{"class":312},[151,1282,1284],{"class":279,"line":1283},56,[151,1285,319],{"class":308},[151,1287,1289],{"class":279,"line":1288},57,[151,1290,284],{"emptyLinePlaceholder":283},[151,1292,1294,1297,1299,1301],{"class":279,"line":1293},58,[151,1295,1296],{"class":304},"  docker",[151,1298,824],{"class":308},[151,1300,309],{"class":308},[151,1302,882],{"class":312},[151,1304,1306,1308,1310],{"class":279,"line":1305},59,[151,1307,887],{"class":499},[151,1309,890],{"class":308},[151,1311,882],{"class":312},[151,1313,1315,1317,1320],{"class":279,"line":1314},60,[151,1316,313],{"class":312},[151,1318,1319],{"class":308}," sdutvincirobot/ros-opencv:humble-411-cuda128-cudnn970-jammy",[151,1321,882],{"class":312},[151,1323,1325,1327],{"class":279,"line":1324},61,[151,1326,860],{"class":312},[151,1328,882],{"class":312},[151,1330,1332],{"class":279,"line":1331},62,[151,1333,319],{"class":308},[10,1335,1336],{},"说明： --platform 指定多架构。 --push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 --load，但那只能支持单一架构）。",[10,1338,1339],{},[417,1340],{"alt":274,"src":1341},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image18.webp",[10,1343,1344],{},[417,1345],{"alt":274,"src":1346},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image19.webp",[258,1348,1349],{"id":1349},"清除构建缓存",[269,1351,1355],{"className":1352,"code":1353,"language":1354,"meta":274,"style":274},"language-C++ shiki shiki-themes github-light github-dark","\n# 清理BuildKit构建缓存\ndocker builder prune -f  \n","C++",[240,1356,1357,1361,1366],{"__ignoreMap":274},[151,1358,1359],{"class":279,"line":280},[151,1360,284],{"emptyLinePlaceholder":283},[151,1362,1363],{"class":279,"line":287},[151,1364,1365],{},"# 清理BuildKit构建缓存\n",[151,1367,1368],{"class":279,"line":326},[151,1369,1370],{},"docker builder prune -f\n",[10,1372,1373],{},[417,1374],{"alt":274,"src":1375},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/10/03/image20.webp",[1377,1378,1379],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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":274,"searchDepth":287,"depth":287,"links":1381},[1382,1383],{"id":19,"depth":326,"text":20},{"id":256,"depth":326,"text":256},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","8",8000000,"2024-10-03","wiki/2024-10-03-docker-jiao-cheng","zh-cn:2024-10-03-docker-jiao-cheng","/zh-cn/wiki/2024-10-03-docker-jiao-cheng","Docker教程","md","wiki/2024-10-03-Docker教程/ch8-手动创建Docker镜像",false,null,"/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","zh-CN","zh-cn",{},{"title":5,"description":15},"cMQdIZlLf8N6VVUYayXMGVZdbz3mF5GrYTRp8vkqZUE",[1403,1409,1415,1421,1427,1433,1439,1445,1451,1457,1458,1464],{"path":1404,"stem":1405,"title":1406,"date":1387,"chapter":1407,"chapterSort":1408,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch1-jian-jie","wiki/2024-10-03-Docker教程/ch1-简介","简介","1",1000000,{"path":1410,"stem":1411,"title":1412,"date":1387,"chapter":1413,"chapterSort":1414,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch10-1-kuai-su-da-kai-zhong-duan","wiki/2024-10-03-Docker教程/ch10-1-快速打开终端","Docker快速打开终端","10.1",10010000,{"path":1416,"stem":1417,"title":1418,"date":1387,"chapter":1419,"chapterSort":1420,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch10-docker-shi-yong-you-hua","wiki/2024-10-03-Docker教程/ch10-Docker使用优化","Docker使用优化","10",10000000,{"path":1422,"stem":1423,"title":1424,"date":1387,"chapter":1425,"chapterSort":1426,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch2-an-zhuang-docker","wiki/2024-10-03-Docker教程/ch2-安装Docker","安装Docker","2",2000000,{"path":1428,"stem":1429,"title":1430,"date":1387,"chapter":1431,"chapterSort":1432,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch3-docker-zhi-tong","wiki/2024-10-03-Docker教程/ch3-Docker直通","Docker直通","3",3000000,{"path":1434,"stem":1435,"title":1436,"date":1387,"chapter":1437,"chapterSort":1438,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch4-dockerhub-huan-yuan","wiki/2024-10-03-Docker教程/ch4-DockerHub换源","DockerHub换源","4",4000000,{"path":1440,"stem":1441,"title":1442,"date":1387,"chapter":1443,"chapterSort":1444,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch5-docker-rong-qi-li-de-cheng-xu-de-tu-xing-jie-mian-tan-bu-chu-lai","wiki/2024-10-03-Docker教程/ch5-docker容器里的程序的图形界面弹不出来","docker容器里的程序的图形界面弹不出来","5",5000000,{"path":1446,"stem":1447,"title":1448,"date":1387,"chapter":1449,"chapterSort":1450,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch6-docker-ming-ling-xue-xi","wiki/2024-10-03-Docker教程/ch6-Docker命令学习","Docker命令学习","6",6000000,{"path":1452,"stem":1453,"title":1454,"date":1387,"chapter":1455,"chapterSort":1456,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch7-ge-zhong-docker-rong-qi-bu-shu","wiki/2024-10-03-Docker教程/ch7-各种Docker容器部署","各种Docker容器部署","7",7000000,{"path":1384,"stem":1393,"title":5,"date":1387,"chapter":1385,"chapterSort":1386,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},{"path":1459,"stem":1460,"title":1461,"date":1387,"chapter":1462,"chapterSort":1463,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":1394},"/zh-cn/wiki/2024-10-03-docker-jiao-cheng/ch9-vscode-yuan-cheng-kai-fa","wiki/2024-10-03-Docker教程/ch9-VScode远程开发","VScode远程开发","9",9000000,{"path":1390,"stem":1465,"title":1391,"date":1387,"chapter":1395,"chapterSort":1466,"docKey":1389,"docRoot":1390,"docTitle":1391,"isWikiDoc":283,"isWikiIndex":283},"wiki/2024-10-03-Docker教程/index",0,{"variants":1468},[1469,1472,1475,1478,1481],{"path":1470,"localeSlug":1471,"i18nKey":1393},"/en-us/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","en-us",{"path":1473,"localeSlug":1474,"i18nKey":1393},"/zh-hant/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","zh-hant",{"path":1476,"localeSlug":1477,"i18nKey":1393},"/zh-hk/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","zh-hk",{"path":1479,"localeSlug":1480,"i18nKey":1393},"/zh-tw/wiki/2024-10-03-docker-jiao-cheng/ch8-shou-dong-chuang-jian-docker-jing-xiang","zh-tw",{"path":1384,"localeSlug":1398,"i18nKey":1393},[1470,1396,1473,1396,1476,1396,1479,1396,1384,1396],1780663023215]