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

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

在容器化技术日益普及的今天,镜像仓库已成为开发、测试和部署流程中不可或缺的基础设施。无论是私有化部署还是团队协作,搭建一个安全、高效的镜像仓库都能显著提升工作效率。本文将通过手把手教学的方式,详细讲解如何从零开始搭建镜像仓库,并演示镜像的上传与下载操作,帮助读者快速掌握这一核心技能。

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

在公有云服务(如Docker Hub、阿里云容器镜像服务等)提供便捷镜像存储的同时,私有镜像仓库仍具有不可替代的优势:

  1. 安全性:避免敏感镜像泄露至公共平台,降低数据泄露风险。
  2. 控制权:完全掌控镜像的存储、版本管理和访问权限。
  3. 性能优化:内网环境下的镜像拉取速度更快,减少网络依赖。
  4. 合规性:满足企业或组织对数据存储的合规要求。

常见的私有镜像仓库解决方案包括Harbor、Nexus Repository、Docker Registry等。本文将以Docker Registry(官方轻量级方案)和Harbor(企业级增强方案)为例,分别介绍其搭建与使用方法。

二、使用Docker Registry快速搭建镜像仓库

1. 基础环境准备

  • 一台Linux服务器(推荐CentOS/Ubuntu)
  • 已安装Docker(版本≥18.03)
  • 开放5000端口(或自定义端口)

2. 启动基础Registry容器

  1. # 拉取官方Registry镜像
  2. docker pull registry:2
  3. # 启动Registry容器(基础版,无认证)
  4. docker run -d \
  5. -p 5000:5000 \
  6. --restart=always \
  7. --name registry \
  8. registry:2

验证服务:访问http://<服务器IP>:5000/v2/_catalog,应返回{}(空仓库列表)。

3. 配置基础认证(可选但推荐)

为防止未授权访问,需添加HTTP Basic认证:

  1. # 生成密码文件
  2. mkdir -p /auth
  3. docker run --entrypoint htpasswd \
  4. httpd:2 -Bbn <用户名> <密码> > /auth/htpasswd
  5. # 重启Registry并挂载认证文件
  6. docker stop registry
  7. docker run -d \
  8. -p 5000:5000 \
  9. --restart=always \
  10. --name registry \
  11. -v /auth/htpasswd:/auth/htpasswd \
  12. -e "REGISTRY_AUTH=htpasswd" \
  13. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  14. -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
  15. registry:2

4. 客户端配置与镜像操作

配置Docker信任私有仓库(解决HTTPS警告):

  1. # 编辑或创建/etc/docker/daemon.json
  2. {
  3. "insecure-registries": ["<服务器IP>:5000"]
  4. }
  5. # 重启Docker服务
  6. systemctl restart docker

上传镜像

  1. # 标记镜像(替换<tag>为实际标签)
  2. docker tag <本地镜像名>:<标签> <服务器IP>:5000/<镜像名>:<标签>
  3. # 推送镜像
  4. docker push <服务器IP>:5000/<镜像名>:<标签>

下载镜像

  1. docker pull <服务器IP>:5000/<镜像名>:<标签>

三、使用Harbor搭建企业级镜像仓库

Harbor是VMware开源的企业级Registry解决方案,提供Web界面、RBAC权限控制、镜像复制等功能。

1. 安装Harbor

方式一:离线安装包(推荐)

  1. 从Harbor官网下载安装包。
  2. 解压并修改harbor.yml配置文件:
  1. hostname: <服务器IP或域名>
  2. http:
  3. port: 80
  4. # 如需HTTPS,配置certificate和private_key路径
  5. harbor_admin_password: <管理员密码>
  6. database:
  7. password: <数据库密码>
  1. 执行安装脚本:
  1. ./install.sh

方式二:Docker Compose(快速测试)

  1. curl -L https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz | tar xz
  2. cd harbor
  3. cp harbor.yml.tmpl harbor.yml
  4. # 修改harbor.yml后...
  5. docker-compose up -d

2. Harbor核心功能使用

用户与项目管理

  1. 登录Web界面(默认http://<IP>,管理员admin/Harbor12345)。
  2. 创建项目(如dev-team),可选择公开或私有。
  3. 添加用户并分配项目角色(开发者、访客等)。

镜像操作示例

登录Harbor

  1. docker login <Harbor地址>

推送镜像

  1. docker tag nginx:latest <Harbor地址>/dev-team/nginx:v1
  2. docker push <Harbor地址>/dev-team/nginx:v1

拉取镜像

  1. docker pull <Harbor地址>/dev-team/nginx:v1

高级功能:镜像复制

  1. 在Harbor中配置“复制规则”,指向其他Registry(如阿里云CR)。
  2. 设置触发条件(手动/定时/事件驱动)。
  3. 实现跨集群镜像同步。

四、常见问题与优化建议

1. 网络问题排查

  • 推送失败:检查防火墙是否放行端口,确认客户端信任配置。
  • 拉取缓慢:启用镜像缓存或部署CDN加速节点。

2. 存储优化

  • 使用独立磁盘存储镜像数据(避免与系统盘混用)。
  • 定期清理未使用的镜像标签(Harbor支持自动清理策略)。

3. 高可用方案

  • 多节点部署Harbor(需共享存储和数据库)。
  • 结合Nginx实现负载均衡。

4. 安全加固

  • 启用HTTPS(Let’s Encrypt免费证书)。
  • 定期更新Registry和Harbor版本。
  • 审计日志分析(Harbor内置日志功能)。

五、总结与延伸

通过本文的手把手教学,读者已掌握:

  1. 使用Docker Registry快速搭建轻量级镜像仓库。
  2. 通过Harbor部署企业级解决方案,满足复杂场景需求。
  3. 完成镜像的上传、下载及权限管理。

进一步学习方向:

  • 集成CI/CD流水线(如Jenkins、GitLab CI)。
  • 探索Kubernetes与私有仓库的集成(ImagePullSecrets)。
  • 研究镜像签名与漏洞扫描(Harbor支持Clair/Trivy)。

私有镜像仓库的搭建是容器化基础设施的关键一步,合理规划与维护能显著提升团队的开发效率和安全性。希望本文能为读者提供实用的技术参考!