欢迎光临
我们一直在努力

Docker Hub 完整使用指南:拉镜像、推镜像、管理仓库

一行命令,几秒钟,一个完整的 Redis 服务就跑在本地了。这是 Docker 的日常,也是无数开发者第一次体验容器化时留下的印象。但 docker pull 背后那个默默运转的镜像仓库,很多人从没认真看过——它到底怎么工作的?镜像怎么从本地打包发布出去?团队协作时怎么统一管理镜像版本?

这些问题,本文逐一讲清楚。


Docker Hub 在整个工作流中的位置

理解 Docker Hub 之前,先看清楚它在整个容器化流程里扮演的角色:

#mermaid-svg-uwpC9EFslJi4y6PI{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-uwpC9EFslJi4y6PI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-uwpC9EFslJi4y6PI .error-icon{fill:#552222;}#mermaid-svg-uwpC9EFslJi4y6PI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uwpC9EFslJi4y6PI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uwpC9EFslJi4y6PI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uwpC9EFslJi4y6PI .marker.cross{stroke:#333333;}#mermaid-svg-uwpC9EFslJi4y6PI svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uwpC9EFslJi4y6PI p{margin:0;}#mermaid-svg-uwpC9EFslJi4y6PI .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-uwpC9EFslJi4y6PI .cluster-label text{fill:#333;}#mermaid-svg-uwpC9EFslJi4y6PI .cluster-label span{color:#333;}#mermaid-svg-uwpC9EFslJi4y6PI .cluster-label span p{background-color:transparent;}#mermaid-svg-uwpC9EFslJi4y6PI .label text,#mermaid-svg-uwpC9EFslJi4y6PI span{fill:#333;color:#333;}#mermaid-svg-uwpC9EFslJi4y6PI .node rect,#mermaid-svg-uwpC9EFslJi4y6PI .node circle,#mermaid-svg-uwpC9EFslJi4y6PI .node ellipse,#mermaid-svg-uwpC9EFslJi4y6PI .node polygon,#mermaid-svg-uwpC9EFslJi4y6PI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uwpC9EFslJi4y6PI .rough-node .label text,#mermaid-svg-uwpC9EFslJi4y6PI .node .label text,#mermaid-svg-uwpC9EFslJi4y6PI .image-shape .label,#mermaid-svg-uwpC9EFslJi4y6PI .icon-shape .label{text-anchor:middle;}#mermaid-svg-uwpC9EFslJi4y6PI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-uwpC9EFslJi4y6PI .rough-node .label,#mermaid-svg-uwpC9EFslJi4y6PI .node .label,#mermaid-svg-uwpC9EFslJi4y6PI .image-shape .label,#mermaid-svg-uwpC9EFslJi4y6PI .icon-shape .label{text-align:center;}#mermaid-svg-uwpC9EFslJi4y6PI .node.clickable{cursor:pointer;}#mermaid-svg-uwpC9EFslJi4y6PI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-uwpC9EFslJi4y6PI .arrowheadPath{fill:#333333;}#mermaid-svg-uwpC9EFslJi4y6PI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uwpC9EFslJi4y6PI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uwpC9EFslJi4y6PI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uwpC9EFslJi4y6PI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-uwpC9EFslJi4y6PI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uwpC9EFslJi4y6PI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-uwpC9EFslJi4y6PI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uwpC9EFslJi4y6PI .cluster text{fill:#333;}#mermaid-svg-uwpC9EFslJi4y6PI .cluster span{color:#333;}#mermaid-svg-uwpC9EFslJi4y6PI 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-uwpC9EFslJi4y6PI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-uwpC9EFslJi4y6PI rect.text{fill:none;stroke-width:0;}#mermaid-svg-uwpC9EFslJi4y6PI .icon-shape,#mermaid-svg-uwpC9EFslJi4y6PI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uwpC9EFslJi4y6PI .icon-shape p,#mermaid-svg-uwpC9EFslJi4y6PI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-uwpC9EFslJi4y6PI .icon-shape .label rect,#mermaid-svg-uwpC9EFslJi4y6PI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uwpC9EFslJi4y6PI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-uwpC9EFslJi4y6PI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-uwpC9EFslJi4y6PI :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

docker build

docker tag

docker push

docker pull

docker run

本地代码

本地镜像

打仓库标签

Docker Hub

服务器/协作者

运行中的容器

Docker Hub 本质上是一个镜像注册中心(Registry)。开发者在本地构建好镜像后,推送到 Hub,服务器或团队成员再从 Hub 拉取。这个模式跟 Git 托管代码的逻辑完全一致:本地开发 → push 到远端 → 其他地方 pull 使用。

官方地址:hub.docker.com

免费账号权限:

功能免费版付费版(Pro+)
公共仓库 无限 无限
私有仓库 1 个 无限
拉取次数(匿名) 100次/6h 不限
拉取次数(已登录) 200次/6h 不限

个人学习和小型项目,免费版完全够用。


账号注册与本地登录

注册账号去 hub.docker.com 完成邮件验证即可。注意:必须验证邮箱,否则推送镜像时会报权限拒绝错误。

本地登录命令:

docker login

执行后输入用户名和密码,Docker 会把凭证写入 ~/.docker/config.json,后续的 pull/push 操作无需重复验证。

退出登录:

docker logout

也支持直接在命令行传参,适合 CI/CD 脚本中使用(密码建议走环境变量,不要硬编码):

echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" –password-stdin


搜索与拉取镜像

命令行搜索

docker search nginx

输出结果示例:

NAME DESCRIPTION STARS OFFICIAL
nginx Official build of Nginx. 15000 [OK]
linuxserver/nginx Nginx container images … 500
bitnami/nginx Bitnami nginx container 200

[OK] 标记代表 Docker 官方维护的镜像,安全性和稳定性有保障,优先选这类。

指定版本拉取

# 拉取最新版
docker pull nginx

# 拉取指定版本(推荐生产环境使用,避免 latest 带来的不确定性)
docker pull nginx:1.25-alpine

标签 alpine 代表基于 Alpine Linux 构建的轻量版本,体积通常比普通版小 60% 以上。

拉取完成后查看本地镜像列表:

docker images

输出:

REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest a6bd7102f7ej 2 weeks ago 187MB
nginx 1.25-alpine 8d3c4f92a1b3 3 weeks ago 41MB
redis 7.0-alpine 3d4d4e5f6fa8 3 weeks ago 30MB

镜像大小差距明显——能用 Alpine 版的场景,尽量用,部署速度和存储成本都有改善。


构建镜像并推送到 Docker Hub

这是 Docker Hub 使用中最核心的操作链,完整流程如下:

服务器/协作者

Docker Hub

开发者本地

服务器/协作者

Docker Hub

开发者本地

#mermaid-svg-nD8UFbDDLMP3NNbg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nD8UFbDDLMP3NNbg .error-icon{fill:#552222;}#mermaid-svg-nD8UFbDDLMP3NNbg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nD8UFbDDLMP3NNbg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nD8UFbDDLMP3NNbg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nD8UFbDDLMP3NNbg .marker.cross{stroke:#333333;}#mermaid-svg-nD8UFbDDLMP3NNbg svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nD8UFbDDLMP3NNbg p{margin:0;}#mermaid-svg-nD8UFbDDLMP3NNbg .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-nD8UFbDDLMP3NNbg text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-nD8UFbDDLMP3NNbg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-nD8UFbDDLMP3NNbg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-nD8UFbDDLMP3NNbg #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-nD8UFbDDLMP3NNbg .sequenceNumber{fill:white;}#mermaid-svg-nD8UFbDDLMP3NNbg #sequencenumber{fill:#333;}#mermaid-svg-nD8UFbDDLMP3NNbg #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-nD8UFbDDLMP3NNbg .messageText{fill:#333;stroke:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-nD8UFbDDLMP3NNbg .labelText,#mermaid-svg-nD8UFbDDLMP3NNbg .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .loopText,#mermaid-svg-nD8UFbDDLMP3NNbg .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .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-nD8UFbDDLMP3NNbg .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-nD8UFbDDLMP3NNbg .noteText,#mermaid-svg-nD8UFbDDLMP3NNbg .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-nD8UFbDDLMP3NNbg .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-nD8UFbDDLMP3NNbg .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-nD8UFbDDLMP3NNbg .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-nD8UFbDDLMP3NNbg .actorPopupMenu{position:absolute;}#mermaid-svg-nD8UFbDDLMP3NNbg .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-nD8UFbDDLMP3NNbg .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-nD8UFbDDLMP3NNbg .actor-man circle,#mermaid-svg-nD8UFbDDLMP3NNbg line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-nD8UFbDDLMP3NNbg :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

镜像存储至仓库

docker build -t my-app .

docker tag my-app username/my-app:v1.0

docker push username/my-app:v1.0

Push 成功确认

docker pull username/my-app:v1.0

返回镜像层数据

docker run username/my-app:v1.0

第一步:在 Docker Hub 创建仓库

登录后依次点击:Repositories → Create Repository,填写仓库名称和可见性(Public/Private)。

仓库命名规则:全小写字母、数字和连字符,不支持空格。

第二步:给本地镜像打标签

Docker 镜像推送时必须携带完整的 Registry 地址前缀,Docker Hub 的格式是:

用户名/仓库名:标签

打标签命令:

docker tag my-app:latest username/my-app:v1.0

可以同时打多个标签,比如同时打 v1.0 和 latest:

docker tag my-app:latest username/my-app:v1.0
docker tag my-app:latest username/my-app:latest

第三步:推送

docker push username/my-app:v1.0

第一次推送耗时较长,Docker 会按层上传。相同内容的层只上传一次,后续更新只传变更层,速度很快。

第四步:拉取使用

docker pull username/my-app:v1.0


仓库管理:标签策略与版本规范

镜像标签不只是版本号,还是一种约定。常见的几种标签策略:

#mermaid-svg-Uizy26MnYa4S2Oxi{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Uizy26MnYa4S2Oxi .error-icon{fill:#552222;}#mermaid-svg-Uizy26MnYa4S2Oxi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Uizy26MnYa4S2Oxi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Uizy26MnYa4S2Oxi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Uizy26MnYa4S2Oxi .marker.cross{stroke:#333333;}#mermaid-svg-Uizy26MnYa4S2Oxi svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Uizy26MnYa4S2Oxi p{margin:0;}#mermaid-svg-Uizy26MnYa4S2Oxi .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi .cluster-label text{fill:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi .cluster-label span{color:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi .cluster-label span p{background-color:transparent;}#mermaid-svg-Uizy26MnYa4S2Oxi .label text,#mermaid-svg-Uizy26MnYa4S2Oxi span{fill:#333;color:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi .node rect,#mermaid-svg-Uizy26MnYa4S2Oxi .node circle,#mermaid-svg-Uizy26MnYa4S2Oxi .node ellipse,#mermaid-svg-Uizy26MnYa4S2Oxi .node polygon,#mermaid-svg-Uizy26MnYa4S2Oxi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Uizy26MnYa4S2Oxi .rough-node .label text,#mermaid-svg-Uizy26MnYa4S2Oxi .node .label text,#mermaid-svg-Uizy26MnYa4S2Oxi .image-shape .label,#mermaid-svg-Uizy26MnYa4S2Oxi .icon-shape .label{text-anchor:middle;}#mermaid-svg-Uizy26MnYa4S2Oxi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Uizy26MnYa4S2Oxi .rough-node .label,#mermaid-svg-Uizy26MnYa4S2Oxi .node .label,#mermaid-svg-Uizy26MnYa4S2Oxi .image-shape .label,#mermaid-svg-Uizy26MnYa4S2Oxi .icon-shape .label{text-align:center;}#mermaid-svg-Uizy26MnYa4S2Oxi .node.clickable{cursor:pointer;}#mermaid-svg-Uizy26MnYa4S2Oxi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Uizy26MnYa4S2Oxi .arrowheadPath{fill:#333333;}#mermaid-svg-Uizy26MnYa4S2Oxi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Uizy26MnYa4S2Oxi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Uizy26MnYa4S2Oxi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Uizy26MnYa4S2Oxi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Uizy26MnYa4S2Oxi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Uizy26MnYa4S2Oxi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Uizy26MnYa4S2Oxi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Uizy26MnYa4S2Oxi .cluster text{fill:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi .cluster span{color:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi 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-Uizy26MnYa4S2Oxi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Uizy26MnYa4S2Oxi rect.text{fill:none;stroke-width:0;}#mermaid-svg-Uizy26MnYa4S2Oxi .icon-shape,#mermaid-svg-Uizy26MnYa4S2Oxi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Uizy26MnYa4S2Oxi .icon-shape p,#mermaid-svg-Uizy26MnYa4S2Oxi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Uizy26MnYa4S2Oxi .icon-shape .label rect,#mermaid-svg-Uizy26MnYa4S2Oxi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Uizy26MnYa4S2Oxi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Uizy26MnYa4S2Oxi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Uizy26MnYa4S2Oxi :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

镜像标签策略

语义版本号

Git commit hash

构建日期

环境标识

v1.0.0 / v1.2.3

abc1234(短 hash)

20260503

prod / staging / dev

生产环境建议同时维护两类标签:

  • 精确版本号(如 v1.2.3):用于追溯和回滚
  • latest:始终指向最新稳定版,方便快速部署

避免在生产中只用 latest,一旦镜像更新出问题,回滚需要知道上一个版本号,latest 无法提供这个信息。


团队协作:Organization 与权限管理

个人账号下的仓库命名空间是 username/repo,团队场景下建议创建 Organization:

#mermaid-svg-LT9uM5M4vgtKMnVd{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LT9uM5M4vgtKMnVd .error-icon{fill:#552222;}#mermaid-svg-LT9uM5M4vgtKMnVd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LT9uM5M4vgtKMnVd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LT9uM5M4vgtKMnVd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LT9uM5M4vgtKMnVd .marker.cross{stroke:#333333;}#mermaid-svg-LT9uM5M4vgtKMnVd svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LT9uM5M4vgtKMnVd p{margin:0;}#mermaid-svg-LT9uM5M4vgtKMnVd .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd .cluster-label text{fill:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd .cluster-label span{color:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd .cluster-label span p{background-color:transparent;}#mermaid-svg-LT9uM5M4vgtKMnVd .label text,#mermaid-svg-LT9uM5M4vgtKMnVd span{fill:#333;color:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd .node rect,#mermaid-svg-LT9uM5M4vgtKMnVd .node circle,#mermaid-svg-LT9uM5M4vgtKMnVd .node ellipse,#mermaid-svg-LT9uM5M4vgtKMnVd .node polygon,#mermaid-svg-LT9uM5M4vgtKMnVd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LT9uM5M4vgtKMnVd .rough-node .label text,#mermaid-svg-LT9uM5M4vgtKMnVd .node .label text,#mermaid-svg-LT9uM5M4vgtKMnVd .image-shape .label,#mermaid-svg-LT9uM5M4vgtKMnVd .icon-shape .label{text-anchor:middle;}#mermaid-svg-LT9uM5M4vgtKMnVd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LT9uM5M4vgtKMnVd .rough-node .label,#mermaid-svg-LT9uM5M4vgtKMnVd .node .label,#mermaid-svg-LT9uM5M4vgtKMnVd .image-shape .label,#mermaid-svg-LT9uM5M4vgtKMnVd .icon-shape .label{text-align:center;}#mermaid-svg-LT9uM5M4vgtKMnVd .node.clickable{cursor:pointer;}#mermaid-svg-LT9uM5M4vgtKMnVd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LT9uM5M4vgtKMnVd .arrowheadPath{fill:#333333;}#mermaid-svg-LT9uM5M4vgtKMnVd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LT9uM5M4vgtKMnVd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LT9uM5M4vgtKMnVd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LT9uM5M4vgtKMnVd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LT9uM5M4vgtKMnVd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LT9uM5M4vgtKMnVd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LT9uM5M4vgtKMnVd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LT9uM5M4vgtKMnVd .cluster text{fill:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd .cluster span{color:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd 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-LT9uM5M4vgtKMnVd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LT9uM5M4vgtKMnVd rect.text{fill:none;stroke-width:0;}#mermaid-svg-LT9uM5M4vgtKMnVd .icon-shape,#mermaid-svg-LT9uM5M4vgtKMnVd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LT9uM5M4vgtKMnVd .icon-shape p,#mermaid-svg-LT9uM5M4vgtKMnVd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LT9uM5M4vgtKMnVd .icon-shape .label rect,#mermaid-svg-LT9uM5M4vgtKMnVd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LT9uM5M4vgtKMnVd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LT9uM5M4vgtKMnVd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LT9uM5M4vgtKMnVd :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Organization 团队

yourteam

yourteam/frontend

yourteam/backend

yourteam/infra

yourteam/data-pipeline

个人账号

username

username/project-a

username/project-b

Organization 支持:

  • 邀请多个成员
  • 设置成员角色(Owner / Member)
  • 按仓库分配读写权限

创建路径:Docker Hub → Settings → Organizations → Create Organization

免费版 Organization 私有仓库数量有限。团队规模较大时,可以考虑使用 GitHub Packages(已有 GitHub 订阅的情况下)或阿里云容器镜像服务(ACR,国内访问速度更快)作为补充。


国内访问加速

国内直连 Docker Hub 经常出现拉取超时的情况,配置镜像加速器可以改善。

Linux 系统(修改 /etc/docker/daemon.json):

{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}

修改完重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

Docker Desktop(Windows / macOS):

进入 Settings → Docker Engine,在 JSON 配置里添加 registry-mirrors 字段,点击 Apply & Restart 生效。

验证加速是否生效:

docker info | grep -A5 "Registry Mirrors"


常见报错与处理

denied: requested access to the resource is denied

最常见的推送错误。原因通常是:

  • 未登录,或登录的账号与仓库 namespace 不匹配
  • 镜像标签里的用户名写错了

排查步骤:

# 检查当前登录状态
cat ~/.docker/config.json | grep auths

# 检查本地镜像标签是否正确
docker images | grep my-app

# 重新登录后推送
docker login
docker push username/my-app:v1.0

toomanyrequests: You have reached your pull rate limit

触碰了免费版拉取频率限制(匿名 100次/6小时,登录用户 200次/6小时)。

解决方案:登录账号后再拉取,或配置国内加速镜像。

私有仓库拉取失败

拉取私有镜像前必须先登录,且账号需要有对应仓库的读取权限。


小结

Docker Hub 的核心操作链:

#mermaid-svg-DjbE45U1C8npi4D2{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DjbE45U1C8npi4D2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DjbE45U1C8npi4D2 .error-icon{fill:#552222;}#mermaid-svg-DjbE45U1C8npi4D2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DjbE45U1C8npi4D2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DjbE45U1C8npi4D2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DjbE45U1C8npi4D2 .marker.cross{stroke:#333333;}#mermaid-svg-DjbE45U1C8npi4D2 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DjbE45U1C8npi4D2 p{margin:0;}#mermaid-svg-DjbE45U1C8npi4D2 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-DjbE45U1C8npi4D2 .cluster-label text{fill:#333;}#mermaid-svg-DjbE45U1C8npi4D2 .cluster-label span{color:#333;}#mermaid-svg-DjbE45U1C8npi4D2 .cluster-label span p{background-color:transparent;}#mermaid-svg-DjbE45U1C8npi4D2 .label text,#mermaid-svg-DjbE45U1C8npi4D2 span{fill:#333;color:#333;}#mermaid-svg-DjbE45U1C8npi4D2 .node rect,#mermaid-svg-DjbE45U1C8npi4D2 .node circle,#mermaid-svg-DjbE45U1C8npi4D2 .node ellipse,#mermaid-svg-DjbE45U1C8npi4D2 .node polygon,#mermaid-svg-DjbE45U1C8npi4D2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DjbE45U1C8npi4D2 .rough-node .label text,#mermaid-svg-DjbE45U1C8npi4D2 .node .label text,#mermaid-svg-DjbE45U1C8npi4D2 .image-shape .label,#mermaid-svg-DjbE45U1C8npi4D2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-DjbE45U1C8npi4D2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DjbE45U1C8npi4D2 .rough-node .label,#mermaid-svg-DjbE45U1C8npi4D2 .node .label,#mermaid-svg-DjbE45U1C8npi4D2 .image-shape .label,#mermaid-svg-DjbE45U1C8npi4D2 .icon-shape .label{text-align:center;}#mermaid-svg-DjbE45U1C8npi4D2 .node.clickable{cursor:pointer;}#mermaid-svg-DjbE45U1C8npi4D2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DjbE45U1C8npi4D2 .arrowheadPath{fill:#333333;}#mermaid-svg-DjbE45U1C8npi4D2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DjbE45U1C8npi4D2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DjbE45U1C8npi4D2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DjbE45U1C8npi4D2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DjbE45U1C8npi4D2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DjbE45U1C8npi4D2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DjbE45U1C8npi4D2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DjbE45U1C8npi4D2 .cluster text{fill:#333;}#mermaid-svg-DjbE45U1C8npi4D2 .cluster span{color:#333;}#mermaid-svg-DjbE45U1C8npi4D2 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-DjbE45U1C8npi4D2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DjbE45U1C8npi4D2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-DjbE45U1C8npi4D2 .icon-shape,#mermaid-svg-DjbE45U1C8npi4D2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DjbE45U1C8npi4D2 .icon-shape p,#mermaid-svg-DjbE45U1C8npi4D2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DjbE45U1C8npi4D2 .icon-shape .label rect,#mermaid-svg-DjbE45U1C8npi4D2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DjbE45U1C8npi4D2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DjbE45U1C8npi4D2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DjbE45U1C8npi4D2 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

拉取官方镜像

推送自己的镜像

团队协作

注册账号 & 验证邮箱

本地 docker login

操作类型

docker pull 镜像名:标签

docker tag + docker push

在 Hub 创建仓库

创建 Organization

邀请成员 & 设权限

Docker Hub 只是镜像仓库的起点。随着项目规模扩大,私有 Registry(Harbor)、CI/CD 自动化推送、多架构镜像构建这些话题会接踵而来。把基础操作练熟,后面的进阶内容才有根基。


下一篇:Docker 多阶段构建:把镜像体积砍掉一半,讲清楚怎么让生产镜像尽可能轻量,感兴趣可以关注专栏持续更新。

赞(0)
未经允许不得转载:171主机测评 » Docker Hub 完整使用指南:拉镜像、推镜像、管理仓库
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址