tx

星河皓月

Something New — Always Exploring
175,090
自建私有Docker Registry及Registry Browser 自建私有Docker Registry及Registry Browser

前言

在国内拉取Docker镜像时,由于网络限制,直接从Docker Hub拉取镜像可能会遇到速度慢或无法拉取的问题。就算自己有国外服务器,拉完还要想办法弄到国内服务器,各种中转。虽然国内大厂有镜像服务,但也是不太方便,命名空间有限,还有点慢。所以就有了自建Registry的想法。

一、

我的服务器ip 192.210.xxx.xxx
准备使用的Registry域名 registry-docker.com(相当于官方源registry-1.docker.io)


目录结构:
/data/docker-registry/
├── auth/               # 认证文件
├── registry-data/      # 镜像数据
└── docker-compose.yml  # 配置文件

二、docker-compose.yml 配置文件

创建 /data/docker-registry/docker-compose.yml,内容如下:

version: '3'

services:
  # 私有 Docker Registry(带认证,HTTP 模式)
  registry:
    image: registry:2
    container_name: docker-registry
    restart: always
    ports:
      - "5000:5000"  # 暴露 5000 端口,供 registry-docker.com 反向代理
    volumes:
      - ./auth:/auth  # 认证文件目录
      - ./registry-data:/var/lib/registry  # 镜像数据持久化
    environment:
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=PrivateRegistry
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
    networks:
      - registry-net

  # Registry Browser(Web 管理端,端口 9090)
  registry-browser:
    image: klausmeyer/docker-registry-browser
    container_name: registry-browser
    restart: always
    ports:
      - "9090:8080"  # 对外暴露 9090 端口
    environment:
      - SECRET_KEY_BASE=${SECRET_KEY}  # 从环境变量获取密钥
      - DOCKER_REGISTRY_URL=http://registry:5000  # 内部直接访问 Registry 服务
      - DOCKER_REGISTRY_USER=admin123  # 你的用户名
      - DOCKER_REGISTRY_PASSWORD=admin123456  # 你的密码
    depends_on:
      - registry  # 等待 Registry 启动后再启动
    networks:
      - registry-net

networks:
  registry-net:  # 自定义网络,服务间可通过服务名访问
    driver: bridge

三、初始化部署步骤

  1. 进入目录并创建认证文件

    cd /data/docker-registry
    # 生成认证文件(用户名 admin,按提示输入密码)
    htpasswd -Bc auth/htpasswd admin
  2. 生成 SECRET_KEY 并启动服务

    # 生成密钥(临时环境变量,仅本次启动有效)
    export SECRET_KEY=$(openssl rand -hex 64)
    # 启动所有服务
    docker-compose up -d
  3. 配置 Docker 客户端信任 HTTP 仓库
    客户端需添加以下配置(避免 HTTP 访问被拒绝):

    # 编辑 Docker 配置
    sudo vim /etc/docker/daemon.json

    添加内容:

    {
      "insecure-registries": [
        "registry-docker.com",       # 代理域名
        "192.210.xxx.xxx:5000"  # 服务器 IP:端口
      ]
    }

    重启 Docker:

    sudo systemctl daemon-reload
    sudo systemctl restart docker

四、验证部署

  1. 检查服务状态

    docker-compose ps
    # 应显示 registry 和 registry-browser 均为 Up 状态
  2. 测试 Registry 登录(通过代理域名)

    docker login registry-docker.com
    # 输入用户名 admin 和密码,显示 Login Succeeded 即正常
  3. 访问 Web 管理端
    浏览器打开 http://192.210.xxx.xxx:9090,可看到仓库列表(推送镜像后会显示内容)。

五、反向代理

registry-docker.com 反向代理到 192.210.xxx.xxx:5000 即可


server {
    listen 80;
    server_name registry-docker.com;

    # 转发所有请求到 Registry 实际地址
    location / {
        proxy_pass http://192.210.xxx.xxx:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Authorization $http_authorization; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

如果是apache或其他Web服务器,或者需要https,自行百度,如何配置

六、使用

  1. 登录私有 Registry(IP 或域名均可)

    # 用 IP 登录
    docker login 192.210.xxx.xxx:5000
    # 或用域名登录
    docker login registry-docker.com
  2. 输入用户名密码,显示「Login Succeeded」则认证通过
  3. 测试镜像推送

    # 未登录,推送镜像
    docker push registry-docker.com/hello-world:test
    未认证,其他人无法push未认证,其他人无法push

已认证,正常push已认证,正常push

  1. 访问 Registry Browser
  2. 认证无法操作,确保私有性认证无法操作,确保私有性
  • 浏览器打开 http://192.210.xxx.xxx:8080http://服务器域名:8080
  • 可看到推送的镜像
认证后的web界面认证后的web界面

转载请遵循 协议许可
本文链接 http://blog.lizh.cc/post/722.html
1
3
打赏
分享:
0 条评论
user 编辑评论信息
插入图片
 

隐私评论

随机一言

:D 获取中...

随机文章

利用V2Ray实现全应用免流 25595 浏览 - 2021/08/05
奇迹 笨小孩 1796 浏览 - 2022/02/15

欢迎您

友情链接

猜猜这次是哪1个小可爱