技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • Docker

    • Docker 概念、命令及Dockerfile介绍
    • Docker-Compose 命令及基本使用
    • Docker私有库的开发
      • 准备
        • config.yml
      • 使用 Docker Registry
      • 访问 Registry API
  • Jenkins

    • Jenkins(一) 持续集成及Jenkins介绍
    • Jenkins(二) Jenkins安装和环境配置
    • Jenkins(三) Jenkins用户管理及凭证
    • Jenkins(四) Maven安装和配置
    • Jenkins(五) Jenkins构建Maven项目
    • Jenkins(六) Jenkins项目构建细节
    • Jenkins(七) Jenkins+Docker+SpringCloud微服务持续集成(上)
    • Jenkins(八) Jenkins+Docker+SpringCloud微服务持续集成(下)
  • Kubernetes

    • kubernetes(一) 概念及介绍
    • kubernetes(二) 集群环境搭建
    • kubernetes(三) 资源管理
    • kubernetes(四) Namespace、Pod、Lable、Deployment、Service 的资源介绍
    • kubernetes(五) Pod 介绍及配置
    • kubernetes(六) Pod 生命周期
    • kubernetes(七) Pod 调度
    • kubernetes(八) Pod 控制器详解
    • kubernetes(九) Service介绍、类型及使用
    • kubernetes(十) Ingress介绍及使用
    • kubernetes(十一) 数据存储(挂载卷管理)
    • kubernetes(十二) 安全认证
    • kubernetes(十三) DashBoard
  • linux

    • linux 创建用户及权限操作
    • Linux 磁盘操作相关命令
    • Linux 文本数据处理工具awk命令
    • Linux 定时任务
    • Linux 命令总结
    • Linux 22端口对外攻击解决
目录

Docker私有库的开发

正常来说我们使用别人的私有库就足够了,比如使用 Harbor,它可以帮我们很好的管理 docker,以及部署为私有或公有库给企业或其他人使用,如果想开发一套那么需要了解 docker 相关的 API,其中 dockerAPI 分为如下三部分:

  • Docker Engine API:Docker Engine API 是 Docker 引擎的 API 接口,用于与 Docker 引擎进行通信和管理。通过 Docker Engine API,可以管理容器、镜像、网络、卷等 Docker 相关资源。可以使用 Docker Engine API 创建、启动、停止和删除容器,构建和推送镜像,以及进行容器和镜像的管理和监控。
  • Docker Hub API:Docker Hub API 是与 Docker Hub 交互的 API 接口。Docker Hub 是一个公共的 Docker 镜像仓库,用于存储和分享 Docker 镜像。Docker Hub API 允许用户通过 API 接口与 Docker Hub 进行交互,可以搜索、下载、上传和删除镜像,管理仓库、标签和组织等
  • Registry API:Registry API 是与 Docker Registry 进行交互的 API 接口。Docker Registry 是一个私有的 Docker 镜像仓库,可以自己搭建和管理。Registry API 允许用户通过 API 接口与私有的 Docker Registry 进行交互,可以上传、下载和删除镜像,管理仓库和标签等

没错,如果需要建立自己的 docker 私有库就要用到 Registry API。

# 准备

要在本地搭建私有的 Docker Registry,您可以按照以下步骤进行操作:

  1. 确保已经安装 Docker,若还没有,您可以从 Docker 官方网站(https://www.docker.com/)下载并安装适用于您的操作系统的 Docker 版本。
  2. 配置 Docker Registry:接下来,您需要创建并配置 Docker Registry。可以按照以下步骤进行配置:
    • 创建一个存储 Registry 数据的目录。例如,您可以创建一个名为 /var/lib/registry 的目录。
    • 创建一个名为 config.yml 的配置文件,并在其中指定 Registry 的配置选项。例如,您可以指定 Registry 监听在 5000 端口上,并允许匿名访问。(具体见下面 config 配置讲解)
  3. 为 Docker Registry API 提前配置
    先进行配置,去 /etc/docker/daemon.json 添加如下一句,最好是宿主机的 IP, 不要使用 127.0.0.1 ,我这里是方便测试,不使用宿主机 IP,会造成在使用 Docker Engine API 报 HTTPS 错误。
{
  "insecure-registries": ["127.0.0.1:5000"]
}
1
2
3

配置完成后需要重新启动 Docker

sudo systemctl restart docker
1
  1. 启动 Registry 容器:使用以下命令在本地启动 Registry 容器,官方文档 https://docs.docker.com/registry/deploying/?_gl=11ytdheb_gaODY2NTEyNi4xNjkyMDAxODU2_ga_XJWPQMJYHQ*MTY5Mzk5NzEyNy4yNS4xLjE2OTM5OTcyMTAuNTMuMC4w#native-basic-auth
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/software/dockerRegistry:/var/lib/registry -v /opt/software/dockerRegistry/config.yml:/etc/docker/registry/config.yml registry:2
1

这个命令将在本地启动一个名为 registry 的容器,并将本地的 /var/lib/registry 目录挂载到容器的 /var/lib/registry 目录,以保存 Registry 的数据。
5. 测试 Registry:现在,您的私有 Docker Registry 应该已经在本地成功搭建。您可以使用以下命令来测试 Registry 是否正常工作:

  • 从 Docker Hub 拉取一个镜像:
docker pull ubuntu
1
  • 标记该镜像为私有 Registry 的地址:
docker tag ubuntu 127.0.0.1:5000/my-ubuntu
1
  • 将标记的镜像推送到私有 Registry:
docker push 127.0.0.1:5000/my-ubuntu
1
  • 从私有 Registry 拉取镜像:
docker pull 127.0.0.1:5000/my-ubuntu
1

如果上述步骤都成功执行,那么私有 Docker Registry 就已经搭建好了,并且可以通过 http://127.0.0.1:5000/v2/my-ubuntu/tags/list 进行访问。

# config.yml

config 里面是一些配置信息,包括存储库位置,日志,安全认证等,首先要配置安全认证

# 安装 htpasswd 文件的工具
yum install -y httpd-tools
# 创建一个 htpasswd 文件,并添加用户名和密码
htpasswd -Bbn user1 password1 > /opt/software/dockerRegistry/htpasswd
1
2
3
4

配置 config.xml

# 指定配置文件的版本。目前可用的版本为0.1。
version: 0.1                                                                                                                                                                           
log:                                                                                                                                                                                   
  fields:                                                                                                                                                                              
    service: registry                                                                                                                                                                  
storage:                                                                                                                                                                               
  cache:                                                                                                                                                                               
    blobdescriptor: inmemory                                                                                                                                                           
  filesystem:         
    # 指定存储镜像数据的目录路径。                                                                                                                                                                 
    rootdirectory: /var/lib/registry
  # 可执行删除操作,不能省                                                                                                                                                   
  delete:                                                                                                                                                                              
    enabled: true
# 暴漏端口                                                                                                                                                                      
http:                                                                                                                                                                                  
  addr: :5000                                                                                                                                                                          
  headers:                                                                                                                                                                             
    X-Content-Type-Options: [nosniff]    
# 心跳                                                                                                                                              
health:                                                                                                                                                                                
  storagedriver:                                                                                                                                                                       
    enabled: true                                                                                                                                                                      
    interval: 10s                                                                                                                                                                      
    threshold: 3     
# 基本认证(Basic Auth),还可以使用Bearer Token认证、AWS认证、LDAP认证
auth:
  htpasswd: 
    realm: registry
    path: /opt/software/dockerRegistry/htpasswd 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

如果已经启动容器,修改后需要重新启动容器

# 使用 Docker Registry

接下来先登录我们的私有库,如果是本机,使用 127.0.0.1,如果没设置账号密码,则默认是宿主机本身 SSH 连接的账号密码

docker login <registry_host>
# 可以使用快捷命令
docker login 127.0.0.1:5000 --username=xxx --password=xxxx
1
2
3

登出

docker logout <registry_host>
1

为需要推送的镜像打 tag(必须)

docker tag my-image:latest 127.0.0.1:5000/my-image:latest
1

推送镜像

docker push localhost:5000/my-image:latest
1

# 访问 Registry API

API 的访问输入你 docker 所在的 IP,加以上设置的端口就行,访问需要带版本号,目前 Docker 建议使用 v2 版本,所以请求路径需要带上,如: http://xx.xxx.xx.xx:5000/v2/_catalog

  • 检查连接(一定要考虑兼容)
GET /v2/
返回 200 代表ok
返回 401 代表需要身份验证
返回 404 代表注册表未实现 /v2/,有可能就是 v1
1
2
3
4
  • 列出存储库:
// 获取全部
GET /v2/_catalog
{
  "repositories": [
    <name>,
    ...
  ]
}
// 分页获取
GET /v2/_catalog?n=<integer>
1
2
3
4
5
6
7
8
9
10
  • 列出镜像 tags
/v2/<ImagesName>/tags/list 
1
上次更新: 6/11/2025, 4:10:30 PM
Docker-Compose 命令及基本使用
Jenkins(一) 持续集成及Jenkins介绍

← Docker-Compose 命令及基本使用 Jenkins(一) 持续集成及Jenkins介绍→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式