简介:本文详细介绍了如何在Gitee上搭建私有或公共的Docker镜像仓库,包括准备工作、Gitee仓库配置、Docker Registry部署、HTTPS支持、自动化构建集成及安全优化,帮助开发者高效管理Docker镜像。
在DevOps实践中,Docker镜像的高效存储与分发是核心需求。传统的Docker Hub或阿里云容器镜像服务虽功能强大,但对于中小团队或开源项目而言,可能存在成本、隐私或网络访问的限制。Gitee作为国内领先的代码托管平台,其Gitee Pages与仓库托管能力可被巧妙复用,构建低成本、高可控的私有或公共Docker镜像仓库。本文将详细阐述如何基于Gitee实现这一目标,覆盖从基础配置到高级优化的全流程。
docker-compose(用于简化部署)。docker-registry),用于存储镜像元数据或作为镜像索引。Read、Write或Admin权限,确保镜像访问的安全性。Gitee本身不直接存储Docker镜像(二进制大文件),但可通过其Git仓库存储镜像的manifest文件、SHA256校验和及下载链接,结合对象存储服务(如七牛云、腾讯云COS)或自有服务器存储实际镜像文件,实现“索引+存储”分离的轻量级仓库。
# 示例目录结构/registry├── repos│ └── <namespace>│ └── <image-name>│ ├── tags│ │ └── <tag>.json # 存储镜像标签元数据│ └── manifest.json # 存储镜像清单
<tag>.json示例:
{"name": "myapp","tag": "v1.0","digest": "sha256:abc123...","url": "https://your-storage.com/myapp/v1.0.tar.gz","created": "2023-10-01T12:00:00Z"}
用户通过自定义脚本解析Gitee中的元数据,从对象存储下载镜像:
# 伪代码示例TAG_INFO=$(curl https://gitee.com/<user>/docker-registry/raw/main/repos/<namespace>/<image>/tags/<tag>.json)URL=$(echo $TAG_INFO | jq -r '.url')curl $URL | docker load # 或使用docker pull的替代方案
直接部署Docker Registry(开源镜像仓库)作为后端存储,Gitee仅作为认证与元数据管理层,兼顾性能与可控性。
# docker-compose.ymlversion: '3'services:registry:image: registry:2ports:- "5000:5000"volumes:- ./registry-data:/var/lib/registryenvironment:REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
docker-compose up -d
config.yml:
# /path/to/registry/config.ymlauth:htpasswd:realm: Gitee Authpath: /auth/htpasswd
Client ID与Secret。oauth2_proxy中间件拦截Registry请求,验证Gitee Token。
# 登录Registry(通过Gitee OAuth)docker login registry.example.com# 推送镜像docker tag myapp:v1 registry.example.com/myapp:v1docker push registry.example.com/myapp:v1# 拉取镜像docker pull registry.example.com/myapp:v1
使用Let’s Encrypt免费证书:
# 安装Certbotsudo apt install certbot python3-certbot-nginx# 获取证书sudo certbot --nginx -d registry.example.com
config.yml中添加:
http:addr: :5000tls:certificate: /path/to/fullchain.pemkey: /path/to/privkey.pem
部署Registry Mirror缓存常用镜像(如alpine、nginx),减少对上游仓库的依赖:
# config.yml片段proxy:remoteurl: https://registry-1.docker.iousername: <your-dockerhub-user>password: <your-dockerhub-pass>
结合Gitee的CI/CD流水线,在代码提交后自动构建镜像并推送至Registry:
# Gitee CI示例(.gitee/workflows/ci.yml)name: Docker Buildon:push:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Build Docker Imagerun: docker build -t registry.example.com/${{ github.repository }}:${{ github.sha }} .- name: Push to Registryrun: |docker login registry.example.com -u $GITEE_USER -p $GITEE_TOKENdocker push registry.example.com/${{ github.repository }}:${{ github.sha }}
/var/lib/registry)及Gitee元数据。cosign等工具对镜像进行签名,防止篡改。ELK或Grafana+Loki监控Registry访问日志,及时发现异常。通过本文的方案,开发者可灵活选择适合自身需求的Gitee Docker镜像仓库搭建方式,实现高效、安全的容器镜像管理。