Docker push 命令:镜像发布与管理的艺术_docker 推送镜像命令
Docker push 命令:镜像发布与管理的艺术
-
- 1. 命令概述
- 2. 命令语法
- 3. 核心参数解析
- 4. 推送架构图解
- 5. 完整工作流程
- 6. 实战场景示例
-
- 6.1 基础推送操作
- 6.2 企业级推送流程
- 6.3 多架构镜像推送
- 7. 镜像命名规范详解
- 8. 安全最佳实践
-
- 8.1 内容信任机制
- 8.2 最小权限原则
- 9. 性能优化指南
-
- 9.1 分层上传策略
- 9.2 并行上传配置
- 10. 企业级应用场景
-
- 10.1 全球镜像同步
- 10.2 合规审计流程
- 11. 常见问题排查
-
- 11.1 推送失败分析
- 11.2 典型错误解决
- 12. 进阶技巧
-
- 12.1 自动标记与推送
- 12.2 使用缓存仓库
- 13. 总结与最佳实践
-
- 13.1 核心要点
- 13.2 推荐工作流
1. 命令概述
docker push
是 Docker 镜像生命周期中的关键命令,用于将本地构建的镜像上传到远程仓库(如 Docker Hub 或私有仓库),实现镜像的共享和分发。掌握其工作原理对于 CI/CD 流程和容器化部署至关重要。
2. 命令语法
docker push [OPTIONS] NAME[:TAG]
3. 核心参数解析
NAME
myrepo/app
:TAG
:v1.2.0
--disable-content-trust
4. 推送架构图解
#mermaid-svg-IkXeAwc2GuarRBC3 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 .error-icon{fill:#552222;}#mermaid-svg-IkXeAwc2GuarRBC3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IkXeAwc2GuarRBC3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-IkXeAwc2GuarRBC3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IkXeAwc2GuarRBC3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IkXeAwc2GuarRBC3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IkXeAwc2GuarRBC3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IkXeAwc2GuarRBC3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IkXeAwc2GuarRBC3 .marker.cross{stroke:#333333;}#mermaid-svg-IkXeAwc2GuarRBC3 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IkXeAwc2GuarRBC3 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 .cluster-label text{fill:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 .cluster-label span{color:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 .label text,#mermaid-svg-IkXeAwc2GuarRBC3 span{fill:#333;color:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 .node rect,#mermaid-svg-IkXeAwc2GuarRBC3 .node circle,#mermaid-svg-IkXeAwc2GuarRBC3 .node ellipse,#mermaid-svg-IkXeAwc2GuarRBC3 .node polygon,#mermaid-svg-IkXeAwc2GuarRBC3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IkXeAwc2GuarRBC3 .node .label{text-align:center;}#mermaid-svg-IkXeAwc2GuarRBC3 .node.clickable{cursor:pointer;}#mermaid-svg-IkXeAwc2GuarRBC3 .arrowheadPath{fill:#333333;}#mermaid-svg-IkXeAwc2GuarRBC3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IkXeAwc2GuarRBC3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IkXeAwc2GuarRBC3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-IkXeAwc2GuarRBC3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-IkXeAwc2GuarRBC3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IkXeAwc2GuarRBC3 .cluster text{fill:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 .cluster span{color:#333;}#mermaid-svg-IkXeAwc2GuarRBC3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IkXeAwc2GuarRBC3 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 安全层 1. 准备 2. 认证 3. 分层上传 4. 存储 生产环境 验证 内容签名 Docker客户端 本地镜像 认证服务 镜像仓库 存储后端
5. 完整工作流程
#mermaid-svg-O1LXX4zpsLnFOSKm {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm .error-icon{fill:#552222;}#mermaid-svg-O1LXX4zpsLnFOSKm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-O1LXX4zpsLnFOSKm .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-O1LXX4zpsLnFOSKm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-O1LXX4zpsLnFOSKm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-O1LXX4zpsLnFOSKm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-O1LXX4zpsLnFOSKm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-O1LXX4zpsLnFOSKm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-O1LXX4zpsLnFOSKm .marker.cross{stroke:#333333;}#mermaid-svg-O1LXX4zpsLnFOSKm svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-O1LXX4zpsLnFOSKm .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-O1LXX4zpsLnFOSKm text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-O1LXX4zpsLnFOSKm .actor-line{stroke:grey;}#mermaid-svg-O1LXX4zpsLnFOSKm .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm .sequenceNumber{fill:white;}#mermaid-svg-O1LXX4zpsLnFOSKm #sequencenumber{fill:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm .messageText{fill:#333;stroke:#333;}#mermaid-svg-O1LXX4zpsLnFOSKm .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-O1LXX4zpsLnFOSKm .labelText,#mermaid-svg-O1LXX4zpsLnFOSKm .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-O1LXX4zpsLnFOSKm .loopText,#mermaid-svg-O1LXX4zpsLnFOSKm .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-O1LXX4zpsLnFOSKm .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-O1LXX4zpsLnFOSKm .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-O1LXX4zpsLnFOSKm .noteText,#mermaid-svg-O1LXX4zpsLnFOSKm .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-O1LXX4zpsLnFOSKm .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-O1LXX4zpsLnFOSKm .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-O1LXX4zpsLnFOSKm .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-O1LXX4zpsLnFOSKm .actorPopupMenu{position:absolute;}#mermaid-svg-O1LXX4zpsLnFOSKm .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-O1LXX4zpsLnFOSKm .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-O1LXX4zpsLnFOSKm .actor-man circle,#mermaid-svg-O1LXX4zpsLnFOSKm line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-O1LXX4zpsLnFOSKm :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} User Docker_Client Auth_Service Registry docker push myrepo/app:1.0 获取推送权限 返回令牌 上传层1 上传层2 loop [分层上传] 提交manifest 返回digest 推送成功 User Docker_Client Auth_Service Registry
6. 实战场景示例
6.1 基础推送操作
# 登录Docker Hubdocker login# 标记本地镜像docker tag myapp:latest username/myapp:1.0# 推送镜像docker push username/myapp:1.0
6.2 企业级推送流程
#!/bin/bash# 安全推送脚本REGISTRY=\"registry.company.com\"PROJECT=\"payment-service\"VERSION=\"v1.2.3\"# 1. 构建镜像docker build -t $REGISTRY/$PROJECT:$VERSION .# 2. 内容签名cosign sign --key cosign.key $REGISTRY/$PROJECT:$VERSION# 3. 推送镜像docker push $REGISTRY/$PROJECT:$VERSION# 4. 清理本地docker rmi $REGISTRY/$PROJECT:$VERSION
6.3 多架构镜像推送
# 创建manifest列表docker manifest create myrepo/multiarch \\ --amend myrepo/image:x86 \\ --amend myrepo/image:arm64# 推送manifestdocker manifest push myrepo/multiarch
7. 镜像命名规范详解
#mermaid-svg-GSMD5RwsHdb8cSFi {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi .error-icon{fill:#552222;}#mermaid-svg-GSMD5RwsHdb8cSFi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GSMD5RwsHdb8cSFi .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GSMD5RwsHdb8cSFi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GSMD5RwsHdb8cSFi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GSMD5RwsHdb8cSFi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GSMD5RwsHdb8cSFi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GSMD5RwsHdb8cSFi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GSMD5RwsHdb8cSFi .marker.cross{stroke:#333333;}#mermaid-svg-GSMD5RwsHdb8cSFi svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GSMD5RwsHdb8cSFi .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi .cluster-label text{fill:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi .cluster-label span{color:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi .label text,#mermaid-svg-GSMD5RwsHdb8cSFi span{fill:#333;color:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi .node rect,#mermaid-svg-GSMD5RwsHdb8cSFi .node circle,#mermaid-svg-GSMD5RwsHdb8cSFi .node ellipse,#mermaid-svg-GSMD5RwsHdb8cSFi .node polygon,#mermaid-svg-GSMD5RwsHdb8cSFi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GSMD5RwsHdb8cSFi .node .label{text-align:center;}#mermaid-svg-GSMD5RwsHdb8cSFi .node.clickable{cursor:pointer;}#mermaid-svg-GSMD5RwsHdb8cSFi .arrowheadPath{fill:#333333;}#mermaid-svg-GSMD5RwsHdb8cSFi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GSMD5RwsHdb8cSFi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GSMD5RwsHdb8cSFi .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GSMD5RwsHdb8cSFi .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GSMD5RwsHdb8cSFi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GSMD5RwsHdb8cSFi .cluster text{fill:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi .cluster span{color:#333;}#mermaid-svg-GSMD5RwsHdb8cSFi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GSMD5RwsHdb8cSFi :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 完整镜像名 仓库地址 命名空间 仓库名 标签 docker.io/library/nginx:1.21 解析 docker.io library nginx 1.21 registry.com/finance/web:v1.2 解析2 registry.com finance web v1.2
8. 安全最佳实践
8.1 内容信任机制
#mermaid-svg-AnjF1HuKM8Y7lPDR {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .error-icon{fill:#552222;}#mermaid-svg-AnjF1HuKM8Y7lPDR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AnjF1HuKM8Y7lPDR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .marker.cross{stroke:#333333;}#mermaid-svg-AnjF1HuKM8Y7lPDR svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AnjF1HuKM8Y7lPDR .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .cluster-label text{fill:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .cluster-label span{color:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .label text,#mermaid-svg-AnjF1HuKM8Y7lPDR span{fill:#333;color:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .node rect,#mermaid-svg-AnjF1HuKM8Y7lPDR .node circle,#mermaid-svg-AnjF1HuKM8Y7lPDR .node ellipse,#mermaid-svg-AnjF1HuKM8Y7lPDR .node polygon,#mermaid-svg-AnjF1HuKM8Y7lPDR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AnjF1HuKM8Y7lPDR .node .label{text-align:center;}#mermaid-svg-AnjF1HuKM8Y7lPDR .node.clickable{cursor:pointer;}#mermaid-svg-AnjF1HuKM8Y7lPDR .arrowheadPath{fill:#333333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AnjF1HuKM8Y7lPDR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-AnjF1HuKM8Y7lPDR .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-AnjF1HuKM8Y7lPDR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AnjF1HuKM8Y7lPDR .cluster text{fill:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR .cluster span{color:#333;}#mermaid-svg-AnjF1HuKM8Y7lPDR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AnjF1HuKM8Y7lPDR :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 构建镜像 数字签名 推送镜像 拉取镜像 验证签名 运行容器
启用内容信任:
export DOCKER_CONTENT_TRUST=1docker push myrepo/secure-app:1.0
8.2 最小权限原则
9. 性能优化指南
9.1 分层上传策略
#mermaid-svg-3OkoBcpgiUpOvsX0 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .error-icon{fill:#552222;}#mermaid-svg-3OkoBcpgiUpOvsX0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3OkoBcpgiUpOvsX0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .marker.cross{stroke:#333333;}#mermaid-svg-3OkoBcpgiUpOvsX0 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3OkoBcpgiUpOvsX0 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .cluster-label text{fill:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .cluster-label span{color:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .label text,#mermaid-svg-3OkoBcpgiUpOvsX0 span{fill:#333;color:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .node rect,#mermaid-svg-3OkoBcpgiUpOvsX0 .node circle,#mermaid-svg-3OkoBcpgiUpOvsX0 .node ellipse,#mermaid-svg-3OkoBcpgiUpOvsX0 .node polygon,#mermaid-svg-3OkoBcpgiUpOvsX0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3OkoBcpgiUpOvsX0 .node .label{text-align:center;}#mermaid-svg-3OkoBcpgiUpOvsX0 .node.clickable{cursor:pointer;}#mermaid-svg-3OkoBcpgiUpOvsX0 .arrowheadPath{fill:#333333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3OkoBcpgiUpOvsX0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-3OkoBcpgiUpOvsX0 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-3OkoBcpgiUpOvsX0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3OkoBcpgiUpOvsX0 .cluster text{fill:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 .cluster span{color:#333;}#mermaid-svg-3OkoBcpgiUpOvsX0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3OkoBcpgiUpOvsX0 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 镜像 基础层 依赖层 应用层
优化技巧:
- 将稳定依赖放在底层
- 高频变更层尽量小
- 使用多阶段构建减少层数
9.2 并行上传配置
# 修改daemon.json{ \"max-concurrent-uploads\": 3, \"registry-mirrors\": [\"https://mirror.company.com\"]}
10. 企业级应用场景
10.1 全球镜像同步
#mermaid-svg-4trDMbWxpyQztwQ5 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 .error-icon{fill:#552222;}#mermaid-svg-4trDMbWxpyQztwQ5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4trDMbWxpyQztwQ5 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-4trDMbWxpyQztwQ5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4trDMbWxpyQztwQ5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4trDMbWxpyQztwQ5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4trDMbWxpyQztwQ5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4trDMbWxpyQztwQ5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4trDMbWxpyQztwQ5 .marker.cross{stroke:#333333;}#mermaid-svg-4trDMbWxpyQztwQ5 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4trDMbWxpyQztwQ5 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 .cluster-label text{fill:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 .cluster-label span{color:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 .label text,#mermaid-svg-4trDMbWxpyQztwQ5 span{fill:#333;color:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 .node rect,#mermaid-svg-4trDMbWxpyQztwQ5 .node circle,#mermaid-svg-4trDMbWxpyQztwQ5 .node ellipse,#mermaid-svg-4trDMbWxpyQztwQ5 .node polygon,#mermaid-svg-4trDMbWxpyQztwQ5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4trDMbWxpyQztwQ5 .node .label{text-align:center;}#mermaid-svg-4trDMbWxpyQztwQ5 .node.clickable{cursor:pointer;}#mermaid-svg-4trDMbWxpyQztwQ5 .arrowheadPath{fill:#333333;}#mermaid-svg-4trDMbWxpyQztwQ5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4trDMbWxpyQztwQ5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4trDMbWxpyQztwQ5 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-4trDMbWxpyQztwQ5 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-4trDMbWxpyQztwQ5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4trDMbWxpyQztwQ5 .cluster text{fill:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 .cluster span{color:#333;}#mermaid-svg-4trDMbWxpyQztwQ5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4trDMbWxpyQztwQ5 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 主仓库 区域镜像1 区域镜像2 区域镜像3
10.2 合规审计流程
# 推送前检查docker scan myapp:1.0docker trust sign myapp:1.0# 生成SBOMdocker sbom myapp:1.0 -o sbom.json
11. 常见问题排查
11.1 推送失败分析
#mermaid-svg-V2WVYhKzBTDv3m03 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 .error-icon{fill:#552222;}#mermaid-svg-V2WVYhKzBTDv3m03 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-V2WVYhKzBTDv3m03 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-V2WVYhKzBTDv3m03 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-V2WVYhKzBTDv3m03 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-V2WVYhKzBTDv3m03 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-V2WVYhKzBTDv3m03 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-V2WVYhKzBTDv3m03 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-V2WVYhKzBTDv3m03 .marker.cross{stroke:#333333;}#mermaid-svg-V2WVYhKzBTDv3m03 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-V2WVYhKzBTDv3m03 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 .cluster-label text{fill:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 .cluster-label span{color:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 .label text,#mermaid-svg-V2WVYhKzBTDv3m03 span{fill:#333;color:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 .node rect,#mermaid-svg-V2WVYhKzBTDv3m03 .node circle,#mermaid-svg-V2WVYhKzBTDv3m03 .node ellipse,#mermaid-svg-V2WVYhKzBTDv3m03 .node polygon,#mermaid-svg-V2WVYhKzBTDv3m03 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-V2WVYhKzBTDv3m03 .node .label{text-align:center;}#mermaid-svg-V2WVYhKzBTDv3m03 .node.clickable{cursor:pointer;}#mermaid-svg-V2WVYhKzBTDv3m03 .arrowheadPath{fill:#333333;}#mermaid-svg-V2WVYhKzBTDv3m03 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-V2WVYhKzBTDv3m03 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-V2WVYhKzBTDv3m03 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-V2WVYhKzBTDv3m03 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-V2WVYhKzBTDv3m03 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-V2WVYhKzBTDv3m03 .cluster text{fill:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 .cluster span{color:#333;}#mermaid-svg-V2WVYhKzBTDv3m03 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-V2WVYhKzBTDv3m03 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 检查 检查 检查 推送失败 认证问题 网络问题 仓库权限 docker-login ping-registry curl
11.2 典型错误解决
denied: requested access
retrying...
blob upload invalid
unsupported status 413
12. 进阶技巧
12.1 自动标记与推送
#!/bin/bash# 自动版本标记COMMIT_SHA=$(git rev-parse --short HEAD)docker build -t app:$COMMIT_SHA .docker tag app:$COMMIT_SHA registry.com/project/app:$COMMIT_SHAdocker push registry.com/project/app:$COMMIT_SHA
12.2 使用缓存仓库
#mermaid-svg-iNfclPWCMSM6QkZ9 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .error-icon{fill:#552222;}#mermaid-svg-iNfclPWCMSM6QkZ9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iNfclPWCMSM6QkZ9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .marker.cross{stroke:#333333;}#mermaid-svg-iNfclPWCMSM6QkZ9 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iNfclPWCMSM6QkZ9 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .cluster-label text{fill:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .cluster-label span{color:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .label text,#mermaid-svg-iNfclPWCMSM6QkZ9 span{fill:#333;color:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .node rect,#mermaid-svg-iNfclPWCMSM6QkZ9 .node circle,#mermaid-svg-iNfclPWCMSM6QkZ9 .node ellipse,#mermaid-svg-iNfclPWCMSM6QkZ9 .node polygon,#mermaid-svg-iNfclPWCMSM6QkZ9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iNfclPWCMSM6QkZ9 .node .label{text-align:center;}#mermaid-svg-iNfclPWCMSM6QkZ9 .node.clickable{cursor:pointer;}#mermaid-svg-iNfclPWCMSM6QkZ9 .arrowheadPath{fill:#333333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iNfclPWCMSM6QkZ9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-iNfclPWCMSM6QkZ9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-iNfclPWCMSM6QkZ9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iNfclPWCMSM6QkZ9 .cluster text{fill:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 .cluster span{color:#333;}#mermaid-svg-iNfclPWCMSM6QkZ9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iNfclPWCMSM6QkZ9 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} CI系统 缓存仓库 官方仓库 生产仓库
13. 总结与最佳实践
13.1 核心要点
- 命名规范:遵循
[registry]/[namespace]/[repo]:[tag]
格式 - 标签策略:使用语义化版本控制
- 安全推送:始终启用内容信任
- 性能优化:合理组织镜像分层
13.2 推荐工作流
#mermaid-svg-NOETl3zMYpoNuXQw {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NOETl3zMYpoNuXQw .error-icon{fill:#552222;}#mermaid-svg-NOETl3zMYpoNuXQw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NOETl3zMYpoNuXQw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NOETl3zMYpoNuXQw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NOETl3zMYpoNuXQw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NOETl3zMYpoNuXQw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NOETl3zMYpoNuXQw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NOETl3zMYpoNuXQw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NOETl3zMYpoNuXQw .marker.cross{stroke:#333333;}#mermaid-svg-NOETl3zMYpoNuXQw svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NOETl3zMYpoNuXQw .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NOETl3zMYpoNuXQw .cluster-label text{fill:#333;}#mermaid-svg-NOETl3zMYpoNuXQw .cluster-label span{color:#333;}#mermaid-svg-NOETl3zMYpoNuXQw .label text,#mermaid-svg-NOETl3zMYpoNuXQw span{fill:#333;color:#333;}#mermaid-svg-NOETl3zMYpoNuXQw .node rect,#mermaid-svg-NOETl3zMYpoNuXQw .node circle,#mermaid-svg-NOETl3zMYpoNuXQw .node ellipse,#mermaid-svg-NOETl3zMYpoNuXQw .node polygon,#mermaid-svg-NOETl3zMYpoNuXQw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NOETl3zMYpoNuXQw .node .label{text-align:center;}#mermaid-svg-NOETl3zMYpoNuXQw .node.clickable{cursor:pointer;}#mermaid-svg-NOETl3zMYpoNuXQw .arrowheadPath{fill:#333333;}#mermaid-svg-NOETl3zMYpoNuXQw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NOETl3zMYpoNuXQw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NOETl3zMYpoNuXQw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NOETl3zMYpoNuXQw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NOETl3zMYpoNuXQw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NOETl3zMYpoNuXQw .cluster text{fill:#333;}#mermaid-svg-NOETl3zMYpoNuXQw .cluster span{color:#333;}#mermaid-svg-NOETl3zMYpoNuXQw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NOETl3zMYpoNuXQw :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 构建 测试 安全扫描 数字签名 推送 部署
通过掌握 docker push
的高级用法,您可以:
- 实现高效可靠的镜像分发
- 构建安全的供应链体系
- 满足企业合规要求
- 优化全球部署性能