Docker Hub #

什么是Docker Hub? #

Docker Hub是Docker官方提供的公共镜像仓库服务,是全球最大的容器镜像库。

Docker Hub功能 #

text
┌─────────────────────────────────────────────────────┐
│                 Docker Hub功能                       │
├─────────────────────────────────────────────────────┤
│                                                     │
│  1. 镜像存储 - 存储和分发Docker镜像                 │
│  2. 自动构建 - GitHub/Bitbucket集成自动构建         │
│  3. Webhooks - 镜像更新通知                         │
│  4. 组织管理 - 团队协作管理                         │
│  5. 官方镜像 - 经过验证的官方镜像                   │
│  6. 安全扫描 - 镜像漏洞扫描                         │
│                                                     │
└─────────────────────────────────────────────────────┘

注册与登录 #

创建账户 #

  1. 访问 https://hub.docker.com
  2. 点击 Sign Up 注册账户
  3. 验证邮箱地址

命令行登录 #

bash
# 登录Docker Hub
docker login

# 输入用户名和密码
Username: your-username
Password: your-password

# 登录成功
Login Succeeded

# 使用访问令牌登录(推荐)
docker login -u your-username
Password: your-access-token

创建访问令牌 #

  1. 登录Docker Hub
  2. 进入 Account Settings → Security
  3. 点击 New Access Token
  4. 设置权限: Read/Write/Delete
bash
# 使用令牌登录
echo your-access-token | docker login -u your-username --password-stdin

登出 #

bash
# 登出Docker Hub
docker logout

镜像管理 #

推送镜像 #

bash
# 标记镜像
docker tag myapp:v1.0 username/myapp:v1.0

# 推送镜像
docker push username/myapp:v1.0

# 推送所有标签
docker push username/myapp

拉取镜像 #

bash
# 拉取镜像
docker pull username/myapp:v1.0

# 拉取最新版本
docker pull username/myapp:latest

# 拉取所有标签
docker pull -a username/myapp

删除镜像 #

bash
# 在Docker Hub网页上删除
# 或使用API删除
curl -X DELETE \
  -H "Authorization: JWT <token>" \
  https://hub.docker.com/v2/repositories/username/myapp/tags/v1.0/

镜像标签管理 #

标签命名规范 #

bash
# 推荐的标签格式
username/myapp:v1.0.0          # 语义化版本
username/myapp:v1.0            # 次版本
username/myapp:v1              # 主版本
username/myapp:latest          # 最新版本
username/myapp:v1.0.0-alpine   # 带变体标识

多标签管理 #

bash
# 添加多个标签
docker tag myapp:v1.0 username/myapp:v1.0.0
docker tag myapp:v1.0 username/myapp:v1.0
docker tag myapp:v1.0 username/myapp:v1
docker tag myapp:v1.0 username/myapp:latest

# 推送所有标签
docker push username/myapp

自动化构建 #

连接代码仓库 #

  1. 登录Docker Hub
  2. 进入 Repositories → Create → Create Automated Build
  3. 选择 GitHub 或 Bitbucket
  4. 授权访问代码仓库
  5. 选择要构建的仓库

配置构建规则 #

text
┌─────────────────────────────────────────────────────┐
│                 构建规则配置                         │
├─────────────────────────────────────────────────────┤
│                                                     │
│  Source Type: Branch                                │
│  Source: main                                       │
│  Docker Tag: latest                                 │
│  Dockerfile Location: /                             │
│  Build Caching: Enabled                             │
│                                                     │
│  Source Type: Tag                                   │
│  Source: /^v([0-9.]+)$/                             │
│  Docker Tag: {\1}                                   │
│                                                     │
└─────────────────────────────────────────────────────┘

构建触发器 #

bash
# 获取触发器URL
# 在Repository Settings → Build Triggers中创建

# 触发构建
curl -H "Content-Type: application/json" \
  --data '{"build": true}' \
  -X POST https://hub.docker.com/api/build/v1/source/xxx/trigger/xxx/call/

Webhooks #

配置Webhooks #

  1. 进入 Repository Settings → Webhooks
  2. 添加Webhook URL
  3. 选择触发事件

Webhook事件 #

json
{
  "push_data": {
    "images": [
      "sha256:xxx"
    ],
    "pushed_at": 1234567890,
    "pusher": "username",
    "tag": "latest"
  },
  "repository": {
    "comment_count": 0,
    "date_created": 1234567890,
    "description": "My App",
    "full_description": "Full description",
    "is_official": false,
    "is_private": false,
    "name": "myapp",
    "namespace": "username",
    "owner": "username",
    "repo_name": "username/myapp",
    "star_count": 0,
    "status": "Active"
  }
}

组织管理 #

创建组织 #

  1. 登录Docker Hub
  2. 点击 Organizations → Create Organization
  3. 设置组织名称和计划

团队管理 #

bash
# 创建团队
# 在组织设置中创建团队

# 添加成员
# 邀请用户加入团队

# 设置权限
# Read/Write/Admin

仓库权限 #

角色 权限
Read 拉取镜像
Write 推送镜像
Admin 完全控制

官方镜像 #

查找官方镜像 #

bash
# 搜索官方镜像
docker search --filter is-official=true nginx

# 拉取官方镜像
docker pull nginx
docker pull mysql
docker pull redis

官方镜像特点 #

text
┌─────────────────────────────────────────────────────┐
│                 官方镜像特点                         │
├─────────────────────────────────────────────────────┤
│                                                     │
│  1. Docker官方维护                                  │
│  2. 安全扫描                                        │
│  3. 最佳实践                                        │
│  4. 定期更新                                        │
│  5. 详细文档                                        │
│  6. 多架构支持                                      │
│                                                     │
└─────────────────────────────────────────────────────┘

镜像安全 #

安全扫描 #

bash
# Docker Hub自动扫描推送的镜像
# 在Repository页面查看扫描结果

# 使用docker scout
docker scout quickview username/myapp:v1.0
docker scout cves username/myapp:v1.0

安全最佳实践 #

bash
# 1. 使用官方基础镜像
FROM nginx:alpine

# 2. 指定版本标签
FROM nginx:1.25.0-alpine

# 3. 定期更新基础镜像
docker pull nginx:alpine

# 4. 扫描镜像漏洞
docker scout quickview myapp:v1.0

# 5. 使用最小化镜像
FROM alpine:3.18

使用限制 #

免费账户限制 #

限制项 免费账户 Pro账户
私有仓库 1个 无限
拉取次数 100次/6小时 5000次/天
自动构建 有限 无限
团队成员 1人 无限

避免限制 #

bash
# 使用镜像缓存
docker pull myregistry.com/nginx

# 使用代理镜像
docker pull mirror.ccs.tencentyun.com/library/nginx

# 自建私有仓库
docker run -d -p 5000:5000 registry:2

小结 #

本节学习了Docker Hub的使用方法:

  • 注册与登录
  • 镜像推送和拉取
  • 镜像标签管理
  • 自动化构建配置
  • Webhooks配置
  • 组织和团队管理

下一步 #

接下来,让我们学习 私有仓库搭建,了解如何搭建自己的Docker镜像仓库。