五分钟学会 Docker Registry 搭建私有镜像仓库

news2024/11/16 2:35:23

在上一篇文章《前端不懂 Docker ?先用它换掉常规的 Vue 项目部署方式》中,我们学习了如何使用 aliyun 私有镜像仓库,也了解到可以使用 Docker Registry 搭建私有镜像仓库。这篇文章就分享下实操过程。

registry 是官方提供的 registry 镜像,可以用来搭建私有镜像 registry,有了它,我们就可以建立起私有的镜像仓库。

启动 registry 容器

我们先把 registry 镜像拉下来,容器启动起来。

docker run -d -p 5000:5000 \
-v d:/robin/docker/registry/config.yml:/etc/docker/registry/config.yml \
--restart always --name registry-srv registry:2

config.yml 是容器的配置文件,我们可以使用 volume 挂载到一个本地文件,这样我们就可以在本地修改并更新它。

docker registry 跑起来之后就支持推拉镜像了,但是没有鉴权的系统是很危险的,任何人都可以使用。

鉴权方式

docker registry 支持三种 auth 方式,分别是 silly, token, htpasswd。

silly 实际上不进行认证,只要请求头中有Authorization字段就算鉴权通过,这显然不能用于生产环境,不必过于关注。

image.png

htpasswd 鉴权

htpasswd 支持 basic authentication,htpasswd 文件只会加载一次,registry 启动后如果新增用户,需要重启registry。

htpasswd is used to create and update the flat-files used to store usernames and password for basic authentication of HTTP users

image.png

由于我是 Win 系统,我们可以执行下面的命令借助容器生成 htpasswd 的用户名和密码,并写到本地文件d:/robin/docker/registry/htpasswd中。

docker run --entrypoint htpasswd \
registry.cn-beijing.aliyuncs.com/google_registry/registry:2.4.1 \
-Bbn test 123456789 \
>>d:/robin/docker/registry/htpasswd

接着我们修改 docker resigry 的配置文件 config.yml,加入 auth 配置。

auth:
  htpasswd:
    realm: basic-realm
    path: /opt/auth/htpasswd

然后重新运行容器,注意这里挂载了本地的 htpasswd 文件,也就是把账号信息写进去了。

docker run -d -p 5000:5000 \
-v d:/robin/docker/registry/config.yml:/etc/docker/registry/config.yml \
-v d:/robin/docker/registry/htpasswd:/opt/auth/htpasswd \
--restart always --name registry-srv registry:2

此时我们再访问 localhost:5000/v2 已经需要登录认证了。

image.png

同样地,当我们在命令行 push 镜像时会发现它提示了"no basic auth credentials"。这是因为我们在命令行终端中还没登录过。

docker tag vue3-ts-blog-frontend localhost:5000/vue3-ts-blog-frontend
docker push localhost:5000/vue3-ts-blog-frontend

image.png

我们需要先使用 docker login 进行登录。

docker login localhost:5000

image.png

这个时候再 push 镜像到私有 registry 就可以成功了。

image.png

Token 鉴权

那么 token auth 是怎么玩的呢?我们来看看它的简单说明。

image.png

我们先生成一套 ssl 证书和密钥。

openssl req -newkey rsa:4096 -nodes -sha256 -keyout c:robin/docker/ssl/myssl.key -x509 -days 365 -out c:robin/docker/ssl/myssl.pem

修改 config.yml,加入 token 方式的 auth。

token:
  # external url to docker-web authentication endpoint
  realm: http://localhost:8080/api/auth
  # should be same as registry.name of registry-web
  service: localhost:5000
  # should be same as registry.auth.issuer of registry-web
  issuer: 'my issuer'
  # path to auth certificate
  rootcertbundle: /etc/docker/registry/auth.pem

这个 auth.pem 文件,就是 ssl 证书,我们需要挂载到 docker registry。

realm 配置指定了一个 auth server 的地址,我们需要启动这样一个 auth server,这个就是后面会提到的 registry-web 项目。

service 配置要和 registry-web 项目的 conf 文件中的 registry.name 对应上。

这些都是可以在 Token Authentication Specification 中找到踪迹的。

先重新启动 registry 项目,把 auth.pem 挂载上去。

docker run -d -p 5000:5000 \
-v d:/robin/docker/registry/config.yml:/etc/docker/registry/config.yml \
-v d:/robin/docker/registry/ssl/myssl.pem:/etc/docker/registry/auth.pem \
--restart always --name registry-srv registry:2

好的,接上面,我们跑一个 registry-web 项目。

先把 registry-web 的 conf 文件写好。

registry:
  # Docker registry url
  url: http://registry-srv:5000/v2
  # Docker registry fqdn
  name: localhost:5000
  # To allow image delete, should be false
  readonly: false
  auth:
    # Enable authentication
    enabled: true
    # Token issuer
    # should equals to auth.token.issuer of docker registry
    issuer: 'my issuer'
    # Private key for token signing
    # certificate used on auth.token.rootcertbundle should signed by this key
    key: /conf/auth.key

然后启动它。

docker run -it -p 8080:8080 --name registry-web --link registry-srv \
-v d:/robin/docker/registry/registry-web.yml:/conf/config.yml \
-v d:/robin/docker/registry/ssl/myssl.key:/conf/auth.key \
hyper/docker-registry-web

我们使用默认的 admin/admin 账密登录。

image.png

然后给 admin 赋予读写权限,否则本地使用 admin 账号推送镜像也会报错的。

image.png

赋权之后,再 push 镜像就可以成功了。

image.png

image.png

然后在 registry web 首页就能看到我们 push 上去的镜像了。

image.png

至此,我们就成功搭建了一个基础版的 Docker Registry,可以用来管理私有镜像。

如果我们把这些部署在服务器上,配置好域名和 nginx,就能在外部直接登录访问了,推拉镜像都不是问题。

学会了 Docker Registry,再去了解企业级项目 Harbor 就会变得更简单!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构--查找】

目录 一、查找(Searching)的概念1.1、基本概念1.2、算法的评价指标 二、顺序查找2.1、算法思想2.2、算法实现2.2.1、常规顺序查找2.2.2、带哨兵的顺序查找 2.3、效率分析2.4、优化2.4.1、针对有序表2.4.2、被查效率不相等 三、折半查找3.1、算法思想3.2、…

<数据集>学生课堂行为识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:13899张 标注数量(xml文件个数):13899 标注数量(txt文件个数):13899 标注类别数:8 标注类别名称:[js, tt, dk, zt, dx, zl, jz, xt] # 举手 js # 抬头听课 …

新版GPT-4omini上线!快!真TM快!

大半夜,OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时,正准备去睡觉。mini版本质上是GPT-4o模型的精简版本,没有什么革命性的创新,因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线,官网和…

Vue3+ element plus 前后分离admin项目安装教程

前后分离admin项目安装 前后分离admin项目安装基于 vue3.x CompositionAPI typescript vite element plus vue-router-next pinia,适配手机、平板、pc 的后台开源免费模板,希望减少工作量,帮助大家实现快速开发。 下载源码 前往gite…

Flink SQL 实时读取 kafka 数据写入 Clickhouse —— 日志处理(三)

文章目录 前言Clickhouse 表设计adlp_log_local 本地表adlp_log 分布式表 Flink SQL 说明创建 Source Table (Kafka) 连接器表创建 Sink Table (Clickhouse) 连接器解析 Message 写入 Sink 日志查询演示总结 前言 在之前的文章中,我们总结了如何在 Django 项目中进…

甄选范文“论系统安全架构设计及其应用”,软考高级论文,系统架构设计师论文

论文真题 随着社会信息化进程的加快,计算机及网络已经被各行各业广泛应用,信息安全问题也变得愈来愈重要。它具有机密性、完整性、可用性、可控性和不可抵赖性等特征。信息系统的安全保障是以风险和策略为基础,在信息系统的整个生命周期中提供包括技术、管理、人员和工程过…

Noah-MP陆面生态水文模拟与多源遥感数据同化技术

了解陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用;熟悉模型的发展历程,常见模型及各自特点;理解Noah-MP模型的原理,掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法;…

【Spring Boot】网页五子棋项目实现,手把手带你全盘解析(长达两万3千字的干货,坐好了,要发车了......)

目录 网页五子棋项目一、项目核心流程二、 登录模块2.1 前端输入用户信息2.2 后端进行数据库查询用户信息 三、 游戏大厅模块3.1 前端通过Ajax请求用户数据,后端从Session中拿取并从数据库中查询后返回3.2 前后端建立WebSocket连接,并进行判断&#xff0…

xxl-job登录没反应问题解决方法

最近在写一个关于xxl-job的项目,然后遇到了如下的问题,可以正常访问到xxl-job的登录界面但是点击登录按钮发现没有反应,并且没有发送任何请求。 排查步骤(使用docker) 1.重启mysql 2.重启docker 3.重写安装mysql 4.查看…

Mysql-索引结构

一.什么是索引? 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引 二.无索引的情况 找到…

【Linux】Linux的基本使用

一.Linux的背景知识. 1.1什么是Linux Linux是一种开源的类Unix操作系统内核. 和Windows是" 并列 "的关系. 1.2Linux的发行版本. Linux 严格意义来说只是一个 “操作系统内核”.一个完整的操作系统 操作系统内核 配套的应用程序. 由于 Linux 是一个完全开源免费…

基于JSP的高校二手交易平台

开头语:你好,我是专注于计算机技术的学姐码农小野,如果有任何技术需求,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:JSP技术 JAVA MySQL 工具:常见Web浏览器&#xff0…

【开发踩坑】 MySQL不支持特殊字符(表情)插入问题

背景 线上功能报错: Cause:java.sql.SQLException:Incorrect string value:xFO\x9F\x9FxBO for column commentat row 1 uncategorized SQLException; SQL state [HY000]:error code [1366]排查 初步觉得是编码问题(utf8 — utf8mb4) 参考上…

Linux环境下dockes使用MongoDB,上传zip文件如何解压并备份恢复到MongoDB数据库中

1、准备 Docker 和 MongoDB 容器 建议主机端口改一下 docker run --name mongodb -d -p 27018:27017 mongo 2. 创建一个工作目录并将 zip 文件上传到dockers容器中 docker cp data.zip mongodb:/data.zip 3. 在 MongoDB 容器中解压 zip 文件(也可以解压完再复制…

大语言模型LLM-三种模型架构

架构:由Transformer论文衍生出来的大语言模型,主要有三种模型架构预训练目标:FLM,PLM,MLM调整:微调: Transformer transfomer可以并行地计算? transformer中encoder模块是完全并行…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后,⽤户进程就进⼊到了内核态,通过执⾏⼀系列的内核协议层函数,然后到 socket 对象的接收队列中查看是否有数据,没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…

MYSQL——库表操作

MYSQL——库表操作 1.1 SQL语句基础1.1.1. SQL简介1.1.2. SQL语句分类1.1.3. SQL语句的书写规范 1.2 数据库的操作1.2.1 数据库的登录及退出1.2.2 查看数据库1.2.3 创建数据库1.2.4 切换数据库1.2.5 查看当前用户1.2.6 删除数据库 1.3 MySQL字符集1.3.1. 字符集1.3.2. 字符序1.…

myBatis的基本操作(持续更新中。。。)

目录 1. 简介2. 简单使用3. 代理开发4. 小技巧5. 动态查询6. 注解&#xff08;待更新&#xff09;底部 1. 简介 mybatis是一款优秀的持久层框架&#xff0c;用来简化JDBC开发 持久层&#xff1a;负责将数据保存到数据库的那一层代码 2. 简单使用 依赖 <dependencies>…

LabVIEW断路器操动机构运动速度检测

开发了一种基于LabVIEW设计平台开发的断路器操动机构运动速度检测系统。通过集成高速相机和图像处理技术&#xff0c;该系统能够实时监控和分析操动机构的动态性能&#xff0c;为电力系统提供关键的技术支持。 项目背景 随着工业化的发展&#xff0c;对电力系统的稳定性和可靠…

python的tkinter、socket库开发tcp的客户端和服务端

一、tcp通讯流程和开发步骤 1、tcp客户端和服务端通讯流程图 套接字是通讯的利器&#xff0c;连接时要经过三次握手建立连接&#xff0c;断开连接要经过四次挥手断开连接。 2、客户端开发流程 1&#xff09;创建客户端套接字 2&#xff09;和服务端器端套接字建立连接 3&#x…