Linux环境下构建私有Docker镜像仓库的完整指南

一、技术方案适用场景

本方案专为以下场景设计:

  1. 企业内网环境:通过离线包实现Harbor仓库的无外网部署
  2. 镜像安全管控:构建带RBAC权限控制的私有镜像仓库
  3. 开发测试隔离:为不同项目组分配独立命名空间
  4. CI/CD集成:与Jenkins等工具链实现镜像自动推送
  5. 混合云架构:作为多云环境的镜像同步中枢

系统要求:Ubuntu 64位系统(推荐20.04 LTS),内存≥4GB(生产环境建议8GB+),磁盘空间≥200GB(根据镜像存储量调整)。

二、基础环境准备

2.1 系统权限配置

  1. # 创建专用运维用户(推荐)
  2. sudo useradd -m -s /bin/bash harbor-admin
  3. sudo usermod -aG sudo harbor-admin
  4. # 切换至专用用户执行后续操作(可选)
  5. su - harbor-admin

2.2 网络环境检测

  1. # 验证关键端口可用性
  2. sudo netstat -tulnp | grep -E '80|443|2375|2376'
  3. # 测试DNS解析(确保能访问Docker Hub)
  4. dig registry-1.docker.io

2.3 依赖组件安装

  1. # 安装基础工具链
  2. sudo apt update
  3. sudo apt install -y \
  4. apt-transport-https \
  5. ca-certificates \
  6. curl \
  7. gnupg-agent \
  8. software-properties-common \
  9. conntrack \
  10. socat \
  11. ebtables \
  12. ipset

三、Docker引擎优化部署

3.1 镜像源加速配置

  1. # 添加国内镜像源(示例使用通用镜像站)
  2. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  3. echo \
  4. "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  5. $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  6. # 配置多镜像加速器
  7. sudo mkdir -p /etc/docker
  8. cat <<EOF | sudo tee /etc/docker/daemon.json
  9. {
  10. "registry-mirrors": [
  11. "https://<通用镜像加速器1>",
  12. "https://<通用镜像加速器2>",
  13. "https://registry-1.docker.io"
  14. ],
  15. "max-concurrent-downloads": 10,
  16. "log-driver": "json-file",
  17. "log-opts": {
  18. "max-size": "100m",
  19. "max-file": "3"
  20. }
  21. }
  22. EOF

3.2 生产级配置优化

  1. # 配置存储驱动(根据需求选择overlay2或devicemapper)
  2. sudo sed -i 's/^# StorageDriver=/StorageDriver=overlay2/' /etc/docker/daemon.json
  3. # 配置TCP监听(谨慎使用,建议配合TLS)
  4. # echo '{"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]}' | sudo tee /etc/docker/daemon.json
  5. # 应用配置并验证
  6. sudo systemctl daemon-reload
  7. sudo systemctl restart docker
  8. sudo docker info | grep -i "storage driver\|registry mirrors"

四、Harbor仓库搭建

4.1 离线包准备

  1. 从开源社区获取最新稳定版Harbor离线包(建议v2.5+)
  2. 验证包完整性:
    1. # 示例验证命令(实际文件名需替换)
    2. sha256sum harbor-offline-installer-v2.5.3.tgz | grep <官方校验值>

4.2 安装前配置

  1. # 解压安装包
  2. tar xvf harbor-offline-installer-*.tgz -C /opt
  3. cd /opt/harbor
  4. # 生成自签名证书(生产环境建议使用CA证书)
  5. sudo mkdir -p /data/cert
  6. sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/cert/domain.key \
  7. -x509 -days 3650 -out /data/cert/domain.crt \
  8. -subj "/C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=harbor.example.com"

4.3 配置文件定制

  1. # harbor.yml 关键配置示例
  2. hostname: harbor.example.com
  3. http:
  4. port: 8081
  5. https:
  6. port: 443
  7. certificate: /data/cert/domain.crt
  8. private_key: /data/cert/domain.key
  9. harbor_admin_password: Harbor12345
  10. database:
  11. password: root123
  12. max_idle_conns: 50
  13. max_open_conns: 100
  14. data_volume: /data/harbor
  15. trivy:
  16. ignore_unfixed: true
  17. skip_update: true

4.4 安装执行

  1. # 安装依赖组件
  2. sudo ./prepare
  3. sudo apt install -y docker-compose
  4. # 启动安装(添加--with-trivy启用漏洞扫描)
  5. sudo ./install.sh --with-notary --with-trivy
  6. # 验证服务状态
  7. sudo docker-compose ps

五、核心操作实践

5.1 镜像推送/拉取

  1. # 登录仓库(使用配置的admin密码)
  2. docker login harbor.example.com:8081
  3. # 标记并推送镜像
  4. docker tag nginx:latest harbor.example.com:8081/library/nginx:v1
  5. docker push harbor.example.com:8081/library/nginx:v1
  6. # 从私有仓库拉取
  7. docker pull harbor.example.com:8081/library/nginx:v1

5.2 仓库管理命令

  1. # 使用Harbor CLI工具(需自行开发或使用REST API)
  2. # 示例:查询项目列表
  3. curl -u "admin:Harbor12345" -X GET "https://harbor.example.com/api/v2.0/projects" -k
  4. # 垃圾回收(清理未使用的镜像层)
  5. sudo docker-compose exec -it harbor-core bash
  6. /harbor/garbage_collection.sh

六、生产环境建议

  1. 高可用方案

    • 数据库使用外部MySQL集群
    • 配置共享存储(NFS/对象存储)
    • 使用Keepalived实现VIP切换
  2. 安全加固

    • 启用LDAP/OAuth集成
    • 配置网络策略限制访问源
    • 定期更新Trivy漏洞库
  3. 监控告警

    • 集成Prometheus监控指标
    • 配置镜像扫描失败告警
    • 设置存储空间阈值告警

七、常见问题处理

问题现象 解决方案
502 Bad Gateway 检查Nginx日志,通常为后端服务未启动
证书验证失败 确保客户端信任自签名证书或配置正确CA
推送镜像超时 检查存储空间及网络带宽
漏洞扫描失败 更新Trivy数据库或调整扫描配置

本方案通过标准化流程和配置模板,帮助开发者在Linux环境下快速构建企业级私有Docker仓库。实际部署时需根据具体网络环境和安全要求调整配置参数,建议先在测试环境验证完整流程后再投入生产使用。