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": ["http://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部署
CentOS7 Docker设置国内镜像加速器
.NET 微服务——CI/CD(3):镜像自动分发
CentOS7安装Docker
NPM淘宝镜像
docker安装mysql
CentOS Docker命令集合
CentOS Docker中安装gitlab
.NET 微服务——CI/CD(2):自动打包镜像
C# .net项目Docker方式部署
Docker安装JIRA 7.2.2
Docker安装Redis
CentOS Docker中安装gitea
git仓库子模块(submodule)项目中的实战应用
国内镜像大全
重新认识Docker Compose之Sidecar模式
Docker安装SQLServer2019
git批量克隆仓库代码以及批量上传
CentOS配置阿里云镜像

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码