欢迎光临
我们一直在努力

09 · 镜像仓库与 Harbor

09 · 镜像仓库与 Harbor

一句话定位:镜像要集中存储和分发——公共用 Docker Hub,企业用私有仓库 Harbor(带权限、扫描、签名)。


1. 镜像仓库的作用

镜像仓库(Registry)= 存放和分发镜像的服务:
– 开发构建镜像 → push 到仓库
– 部署时从仓库 pull 镜像
– 团队/CI/CD 共享镜像

公共仓库:Docker Hub(hub.docker.com)
私有仓库:Harbor(企业级)、registry(轻量)、云厂商(阿里云 ACR 等)


2. Docker Hub(公共仓库)

# 登录
docker login # 默认 Docker Hub

# 镜像命名规则:[仓库地址/]用户名/镜像名:tag
docker tag myapp:1.0 username/myapp:1.0
docker push username/myapp:1.0 # 推送
docker pull username/myapp:1.0 # 拉取

# 不写仓库地址默认 Docker Hub,官方镜像省略用户名(如 nginx = library/nginx)


3. 搭建轻量私有仓库(registry)

# 最简单的私有仓库
docker run -d -p 5000:5000 –name registry \\
-v registry-data:/var/lib/registry \\
registry:2

# 推送到私有仓库
docker tag myapp:1.0 localhost:5000/myapp:1.0
docker push localhost:5000/myapp:1.0
docker pull localhost:5000/myapp:1.0

registry 缺点:无 UI、无权限、无扫描 → 生产用 Harbor。


4. Harbor(企业级私有仓库)

Harbor(CNCF 项目)相比 registry 增加:
– Web UI(可视化管理镜像)
– 用户/角色权限(RBAC)、项目隔离
– 镜像漏洞扫描(Trivy/Clair)
– 镜像签名(内容信任)
– 镜像复制(多仓库同步)
– 垃圾回收、配额管理

# 安装(下载 harbor 离线包)
# 编辑 harbor.yml(配域名、端口、admin 密码、是否 HTTPS)
./install.sh

# Web UI 访问:https://harbor.example.com(admin / 配置的密码)


5. 使用 Harbor

# 登录 Harbor
docker login harbor.example.com # 输入用户名密码

# 镜像命名:harbor地址/项目名/镜像名:tag
docker tag myapp:1.0 harbor.example.com/myproject/myapp:1.0
docker push harbor.example.com/myproject/myapp:1.0
docker pull harbor.example.com/myproject/myapp:1.0

Harbor 项目(Project):
– 公开项目:任何人可拉
– 私有项目:需授权
– 按项目分配用户权限(访客/开发/维护/管理员)


6. HTTP 仓库信任配置

// 私有仓库用 HTTP(非 HTTPS)时,Docker 默认拒绝
// 配置 /etc/docker/daemon.json 信任
{
"insecure-registries": ["harbor.example.com", "192.168.1.100:5000"]
}
// 重启 docker: systemctl restart docker

⚠️ 生产用 HTTPS(配证书),别用 insecure HTTP。


7. 镜像安全

① 漏洞扫描:Harbor 集成 Trivy 扫描镜像 CVE 漏洞
→ 发现基础镜像/依赖的已知漏洞,阻止有高危漏洞的镜像部署

② 镜像签名:内容信任(Notary/Cosign)
→ 确保镜像未被篡改、来源可信

③ 最小化镜像:用 distroless/alpine,减少攻击面

④ 不放密钥:镜像里别打包密码/密钥(用环境变量/Secret)

⑤ 定期更新基础镜像:修复基础镜像漏洞


8. K8s 拉私有镜像

# 创建 imagePullSecret
kubectl create secret docker-registry harbor-secret \\
–docker-server=harbor.example.com \\
–docker-username=admin \\
–docker-password=xxx \\
-n prod

# Pod 引用
spec:
imagePullSecrets:
– name: harbor–secret
containers:
– name: app
image: harbor.example.com/myproject/myapp:1.0


9. 镜像管理最佳实践

镜像 tag 规范:
– 别只用 latest(不确定版本、无法回滚)
– 用语义化版本:1.0.0、1.0.1
– 或用 Git commit / 构建号:myapp:20260614-a1b2c3
– 可同时打 latest + 具体版本

镜像清理:
– Harbor 配保留策略(如保留最近 10 个版本)
– 定期垃圾回收释放空间

分层优化:见 02 篇(多阶段 + 分层缓存)


10. 坑与最佳实践

  • ✅ 企业用 Harbor(权限、扫描、UI),别只用轻量 registry。
  • ✅ 镜像 tag 用语义化版本或构建号,别只用 latest。
  • ✅ 用 Harbor 漏洞扫描,阻止高危镜像部署。
  • ✅ K8s 拉私有镜像配 imagePullSecrets。
  • ⚠️ 生产仓库用 HTTPS(配证书),别用 insecure HTTP。
  • ⚠️ 镜像里别打包密钥(用环境变量/Secret)。
  • ✅ 配镜像保留策略 + 定期 GC,避免仓库占满。
  • 💡 Harbor = 私有仓库 + 权限 + 扫描 + 签名,企业镜像管理标配。

11. 本篇小结

  • 镜像仓库集中存储分发:公共 Docker Hub,企业 Harbor。
  • Harbor 比轻量 registry 多了 UI、权限、漏洞扫描、签名、复制。
  • 镜像命名:仓库地址/项目/镜像:tag;HTTP 仓库要配 insecure-registries。
  • 镜像安全:漏洞扫描、签名、最小化、不放密钥、定期更新。
  • K8s 拉私有镜像配 imagePullSecrets;tag 用版本号别用 latest。
赞(0)
未经允许不得转载:171主机测评 » 09 · 镜像仓库与 Harbor
分享到: 更多 (0)

评论 抢沙发

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