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