logo

手把手教你搭建镜像仓库并上传/下载镜像

作者:问题终结者2025.10.10 18:33浏览量:15

简介:本文详细介绍如何搭建私有镜像仓库,涵盖Docker Registry部署、配置HTTPS与认证、镜像上传下载全流程,适合开发者及企业用户实践。

一、为什么需要私有镜像仓库?

在容器化开发中,镜像仓库是存储和分发Docker镜像的核心组件。公有仓库(如Docker Hub)虽然方便,但存在以下痛点:

  • 安全性风险:敏感业务镜像暴露在公网
  • 网络依赖:国内访问Docker Hub速度不稳定
  • 定制化需求:企业需要管理私有镜像版本
  • 成本问题:大规模使用时公有仓库可能产生费用

私有镜像仓库能有效解决这些问题,尤其适合金融、医疗等对数据安全要求高的行业。

二、搭建私有镜像仓库的三种方案

方案1:使用Docker官方Registry(快速入门)

1.1 基础部署

  1. # 运行官方Registry容器(默认端口5000)
  2. docker run -d -p 5000:5000 --name registry registry:2

1.2 验证服务

  1. # 测试镜像推送(需先标记镜像)
  2. docker tag ubuntu:latest localhost:5000/my-ubuntu
  3. docker push localhost:5000/my-ubuntu

局限性

  • 无认证机制
  • 数据存储在容器内
  • 不支持镜像清理

方案2:使用Harbor(企业级方案)

Harbor是VMware开源的企业级Registry,提供以下增强功能:

  • 基于角色的访问控制
  • 镜像复制与同步
  • 漏洞扫描
  • 图形化管理界面

2.1 安装准备

  1. # 安装依赖
  2. yum install -y docker-compose
  3. # 下载Harbor安装包
  4. wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-online-installer-v2.7.0.tgz
  5. tar xvf harbor-online-installer-v2.7.0.tgz

2.2 配置修改

编辑harbor.yml文件:

  1. hostname: reg.example.com # 修改为实际域名
  2. http:
  3. port: 80
  4. https:
  5. certificate: /path/to/cert.pem
  6. private_key: /path/to/key.pem
  7. harbor_admin_password: Harbor12345 # 默认管理员密码

2.3 安装执行

  1. ./prepare
  2. docker-compose up -d

方案3:阿里云/腾讯云CR(云服务方案)

对于不想自建服务器的用户,云厂商提供的容器镜像服务(CR)是更好的选择:

  • 优势:高可用、自动备份、集成CDN加速
  • 典型配置
    • 创建命名空间
    • 设置访问权限
    • 配置镜像自动构建

三、镜像仓库安全加固

3.1 HTTPS配置

以Nginx反向代理为例:

  1. server {
  2. listen 443 ssl;
  3. server_name reg.example.com;
  4. ssl_certificate /etc/nginx/certs/reg.example.com.crt;
  5. ssl_certificate_key /etc/nginx/certs/reg.example.com.key;
  6. location / {
  7. proxy_pass http://localhost:5000;
  8. proxy_set_header Host $host;
  9. }
  10. }

3.2 认证机制实现

基本认证配置

  1. # 创建认证文件
  2. mkdir -p /auth
  3. docker run --entrypoint htpasswd httpd:2 -Bbn admin password123 > /auth/htpasswd
  4. # 启动带认证的Registry
  5. docker run -d -p 5000:5000 \
  6. -e REGISTRY_AUTH=htpasswd \
  7. -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  8. -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  9. -v /auth:/auth \
  10. registry:2

Harbor RBAC配置

Harbor提供更细粒度的权限控制:

四、镜像操作全流程指南

4.1 镜像标记与推送

  1. # 标记镜像(关键步骤)
  2. docker tag nginx:latest reg.example.com/library/nginx:v1
  3. # 登录私有仓库
  4. docker login reg.example.com
  5. # 推送镜像
  6. docker push reg.example.com/library/nginx:v1

常见问题

  • denied: requested access to the resource is denied:权限不足
  • x509: certificate signed by unknown authority:HTTPS证书问题

4.2 镜像拉取与运行

  1. # 拉取镜像
  2. docker pull reg.example.com/library/nginx:v1
  3. # 运行容器
  4. docker run -d -p 80:80 reg.example.com/library/nginx:v1

4.3 镜像清理策略

手动清理

  1. # 删除本地镜像
  2. docker rmi reg.example.com/library/nginx:v1
  3. # 删除Registry中的镜像(需访问容器内)
  4. docker exec -it registry sh
  5. # 在容器内执行
  6. rm -rf /var/lib/registry/docker/registry/v2/repositories/library/nginx/_manifests/tags/v1

Harbor自动清理

在Harbor管理界面:

  1. 进入项目 → 标签
  2. 选择要删除的标签
  3. 点击”删除”按钮

五、企业级实践建议

5.1 高可用架构

推荐使用以下架构:

  1. 负载均衡 Harbor集群(主备模式)
  2. 共享存储(NFS/对象存储

5.2 备份策略

  • 数据备份:定期备份/var/lib/registry目录
  • 配置备份:备份Harbor的harbor.yml数据库
  • 自动化脚本示例
    ```bash

    !/bin/bash

    BACKUP_DIR=”/backup/registry”
    DATE=$(date +%Y%m%d)

创建备份目录

mkdir -p $BACKUP_DIR/$DATE

备份Registry数据

docker exec registry tar czf /backup/registry-data-$DATE.tar.gz /var/lib/registry
docker cp registry:/backup/registry-data-$DATE.tar.gz $BACKUP_DIR/$DATE/

备份Harbor配置

cp /data/harbor/harbor.yml $BACKUP_DIR/$DATE/

  1. ## 5.3 监控方案
  2. 推荐监控指标:
  3. - 存储空间使用率
  4. - 镜像推送/拉取频率
  5. - 认证失败次数
  6. - Prometheus配置示例:
  7. ```yaml
  8. scrape_configs:
  9. - job_name: 'harbor'
  10. static_configs:
  11. - targets: ['harbor-core:8000']

六、常见问题解决方案

6.1 推送镜像报错处理

问题现象

  1. The push refers to repository [reg.example.com/library/nginx]
  2. Get https://reg.example.com/v2/: x509: certificate signed by unknown authority

解决方案

  1. 将自签名证书添加到Docker信任列表:
    ```bash

    获取证书

    openssl s_client -connect reg.example.com:443 -showcerts /dev/null | openssl x509 -outform PEM > reg.example.com.crt

创建或修改Docker证书目录

mkdir -p /etc/docker/certs.d/reg.example.com
cp reg.example.com.crt /etc/docker/certs.d/reg.example.com/

重启Docker服务

systemctl restart docker

  1. ## 6.2 性能优化建议
  2. - **存储优化**:使用对象存储(如MinIO)作为后端
  3. - **网络优化**:配置CDN加速镜像下载
  4. - **缓存优化**:在Registry容器中配置缓存
  5. ```yaml
  6. # docker-compose.yml示例
  7. registry:
  8. image: registry:2
  9. volumes:
  10. - ./registry-data:/var/lib/registry
  11. - ./config.yml:/etc/docker/registry/config.yml
  12. environment:
  13. REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: redis
  14. REGISTRY_REDIS_ADDR: redis:6379

七、总结与扩展

搭建私有镜像仓库是容器化部署的关键环节,本文介绍的三种方案(官方Registry、Harbor、云CR)覆盖了从个人开发到企业级应用的不同场景。在实际操作中,建议:

  1. 开发测试环境:使用官方Registry快速验证
  2. 生产环境:选择Harbor或云服务方案
  3. 安全要求高:必须配置HTTPS和认证
  4. 大规模部署:考虑高可用架构和监控体系

未来容器技术发展将更注重镜像安全(如SBOM集成)和跨云管理能力,建议持续关注CNCF生态项目的发展动态。

相关文章推荐

发表评论

活动