Docker 私有镜像仓库 一:Docker Registry


在企业和个人开发中,搭建一套稳定可靠的 Docker 私有镜像仓库(Docker Registry)非常重要,能够极大地提升镜像管理效率和安全性。本文将详细介绍如何在 Rocky Linux 系统上,使用 Docker 官方 Registry 镜像快速搭建一个私有镜像仓库,并支持基本认证和 Docker Compose 启动方式。

1. 为什么要搭建 Docker 私有镜像仓库?

 

  • 节省带宽和时间:将镜像保存在内网,拉取更快,避免重复下载外网镜像。

  • 安全管理:限制访问权限,保护企业核心镜像不被外泄。

  • 镜像版本控制:方便团队协作,控制镜像版本和发布流程。

2. 环境准备

 

  • 操作系统:Rocky Linux

  • Docker 已安装并正常运行

  • 有一定的 Linux 基础操作能力

3. 搭建 Docker Registry

 

3.1 创建镜像存储目录

Markup 全选
mkdir -p /opt/registry/data

3.2 编写 docker-compose.yml 启动脚本

文件路径:/root/docker-compose.yml

Markup 全选
version: '3'

services:
  registry:
    image: registry:2.8.2
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry/data:/var/lib/registry

3.3 创建并启动registry 容器

Markup 全选
docker-compose up -d

4. 防火墙放行5000端口(Firewalld)

Markup 全选
# 永久放行 TCP 5000端口
sudo firewall-cmd --permanent --add-port=5000/tcp

# 重新加载防火墙配置
sudo firewall-cmd --reload

# 查看是否生效
sudo firewall-cmd --list-ports

5.添加基本认证

5.1 安装密码生成工具

Markup 全选
sudo dnf install -y httpd-tools
mkdir -p /opt/registry/auth
htpasswd -Bc /opt/registry/auth/htpasswd admin

5.2 修改 Compose 配置

Markup 全选
version: '3'

services:
  registry:
    image: registry:2.8.2
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry/data:/var/lib/registry
      - /opt/registry/auth:/auth
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd

重新启动:

Markup 全选
docker-compose down
docker-compose up -d

6.配置Docker客户端信任

因为默认 Docker 客户端不信任 HTTP 协议,需要配置 insecure-registries,步骤如下:

 

编辑 /etc/docker/daemon.json

Markup 全选
{
  "insecure-registries": ["192.168.2.100:5000"]
}

注意:这里不需要带协议头

保存后重启 Docker 服务:

Markup 全选
sudo systemctl restart docker

7.测试镜像推拉

登录docker

Markup 全选
docker login --username=admin --password=*** http://192.168.2.100:5000

经过测试,协议头[http://]可有可无,

Markup 全选
docker pull alpine
docker tag alpine <你的服务器IP>:5000/alpine
docker push <你的服务器IP>:5000/alpine

docker rmi <你的服务器IP>:5000/alpine
docker pull <你的服务器IP>:5000/alpine

示例:

Markup 全选
docker pull alpine
docker tag alpine 192.168.2.100:5000/alpine
docker push 192.168.2.100:5000/alpine

docker rmi 192.168.2.100:5000/alpine
docker pull 192.168.2.100:5000/alpine

8.查看镜像列表

方法一:使用 Registry HTTP API v2

Docker Registry 提供了 RESTful API,可以通过如下命令查询:

1. 查看仓库中所有镜像(镜像名,不含 tag)

Markup 全选
curl http://<registry-host>:5000/v2/_catalog

返回示例:

JavaScript 全选
{
  "repositories": [
    "nginx",
    "myapp",
    "alpine"
  ]
}

2. 查看某个镜像的所有 tag

Markup 全选
curl http://<registry-host>:5000/v2/<镜像名>/tags/list

例如:

Markup 全选
curl http://<registry-host>:5000/v2/nginx/tags/list

返回示例:

Markup 全选
{
  "name": "nginx",
  "tags": [
    "latest",
    "1.25.3-alpine"
  ]
}

🔐 如果你启用了认证(Basic Auth),记得加上 -u 参数:

Markup 全选
curl -u admin:password http://<registry-host>:5000/v2/_catalog

方法二:使用开源工具增强管理体验(推荐)

Docker Registry 本身没有图形界面。如果你想更方便地查看镜像列表和 tag,可以用这些 UI 工具:

1. Docker Registry UI (Joxit)

启动方式(Docker Compose):

Markup 全选
version: '3'

services:
  registry:
    image: registry:2.8.2
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry/data:/var/lib/registry
    environment:
      # CORS 设置
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://192.168.2.100:8080]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'
      REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'

  ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - "8080:80"
    environment:
      - REGISTRY_TITLE=My Private Registry
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

如果带密码认证配置如下:

Markup 全选
version: '3'

services:
  registry:
    image: registry:2.8.2
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry/data:/var/lib/registry
      - /opt/registry/auth:/auth
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd  
      # CORS 设置
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://192.168.2.100:8080]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'
      REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'

  ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - "8080:80"
    environment:
      - REGISTRY_TITLE=My Private Registry
      - REGISTRY_URL=http://127.0.0.1:5000
      - DELETE_IMAGES=true
      - SINGLE_REGISTRY=true
      - REGISTRY_USER=admin             # 指定用户名
      - REGISTRY_PASS=***       # 指定密码(与 htpasswd 中一致)
    depends_on:
      - registry    

添加防火墙:

Markup 全选
# 永久放行 TCP 8080 端口
sudo firewall-cmd --permanent --add-port=8080/tcp

# 重新加载防火墙配置
sudo firewall-cmd --reload

# 查看是否生效
sudo firewall-cmd --list-ports

访问地址:

Markup 全选
http://<你的主机>:8080

 

2. 使用 Harbor(更高级图形界面)

如果你有高阶需求(权限、项目隔离、镜像扫描、LDAP 集成等),可以用 Harbor 替代原始 Registry,我可以帮你配置完整 Harbor 服务。

 

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:Git 提交文件名大小写变更无效?用 git mv 正确提交文件名大小写修改的方法
下一篇:PVE安装 RockyLinux10
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

Docker 私有镜像仓库 Docker Registry
Docker 私有镜像仓库 二:Harbor部署
NPM私有仓库
CentOS7 Docker设置国内镜像加速器
Docker 常用命令速查:容器、镜像与清理
.NET 微服务——CI/CD(3):镜像自动分发
CentOS7安装Docker
suse docker容器安装
NPM淘宝镜像
docker安装mysql
Rocky Linux10 安装Docker环境
CentOS Docker中安装gitlab
CentOS Docker命令集合
.NET 微服务——CI/CD(2):自动打包镜像
C# .net项目Docker方式部署
Docker安装JIRA 7.2.2
Docker安装Redis
仓库库位选择
CentOS Docker中安装gitea
git仓库子模块(submodule)项目中的实战应用

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码