五、Docker仓库之https的registry搭建(二)

news2024/11/24 15:37:27

本节我们分享更多的实用的仓库搭建使用方式。包括支持https的registry、Harbor、nexus。

支持HTTPS的registry

准备站点证书(测试使用,用一个自己的测试域名,配置本地hosts)
如果你拥有一个公网域名,那很好,你很牛。当然也可以使用 openssl 自行签发证书。
这里我计划将要搭建的私有仓库地址为 docker.margu.com,下面介绍使用 openssl 自行签发 docker.margu.com 的站点 SSL 证书。
1、创建 CA 私钥

[root@k8s-m1 ~]# openssl genrsa -out "root-ca.key" 2048
Generating RSA private key, 2048 bit long modulus

2、利用私钥创建 CA 根证书请求文件

[root@k8s-m1 ~]# openssl req  -new -key "root-ca.key"  -out "root-ca.csr" -sha256  -subj '/C=CN/ST=sichuang/L=chengdu/O=margu/CN=docker.margu.com'
[root@k8s-m1 ~]# ll root-ca.csr 
-rw-r--r-- 1 root root 989 May 22 21:54 root-ca.csr

以上命令中 -subj 参数里的 /C 表示国家,如 CN;/ST 表示省;/L 表示城市或者地区;/O 表示组织名;/CN 通用名称。

3、配置 CA 根证书,新建 root-ca.cnf

[root@k8s-m1 ~]#vim root-ca.cnf
[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

4、签发根证书

[root@k8s-m1 ~]# openssl x509 -req  -days 3650  -in "root-ca.csr"  -signkey "root-ca.key" -sha256 -out "root-ca.crt" -extfile "root-ca.cnf" -extensions root_ca
Signature ok
subject=/C=CN/ST=sichuang/L=chengdu/O=margu/CN=docker.margu.com
Getting Private key

5、生成站点 SSL 私钥

[root@k8s-m1 ~]#  openssl genrsa -out "docker.margu.com.key" 2048
Generating RSA private key, 2048 bit long modulus
.....................................................................................................................+++
.........................................................+++
e is 65537 (0x10001)

6、使用私钥生成证书请求文件

[root@k8s-m1 ~]# openssl req -new -key "docker.margu.com.key" -out "site.csr" -sha256  -subj '/C=CN/ST=sichuan/L=chengdu/O=margu/CN=docker.margu.com'

7、配置证书,新建 site.cnf 文件

[root@k8s-m1 ~]#vim site.cnf
[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:docker.domain.com, IP:192.168.2.140
subjectKeyIdentifier=hash

8、签署站点 SSL 证书

[root@k8s-m1 ~]# openssl x509 -req -days 750 -in "site.csr" -sha256     -CA "root-ca.crt" -CAkey "root-ca.key"  -CAcreateserial     -out "docker.margu.com.crt" -extfile "site.cnf" -extensions server
Signature ok
subject=/C=CN/ST=sichuan/L=chengdu/O=margu/CN=docker.margu.com
Getting CA Private Key

这样已经拥有了 docker.domain.com 的网站 SSL 私钥 docker.domain.com.key 和 SSL 证书 docker.domain.com.crt 及 CA 根证书 root-ca.crt。
新建 /root/registry/ssl文件夹并将 docker.domain.com.key docker.domain.com.crt root-ca.crt 这三个文件移入,其他文件也可以移进去。

9、配置私有仓库

[root@k8s-m1 ~]# mkdir -p /root/registry/ssl
[root@k8s-m1 ~]# mv  docker.margu.com.key docker.margu.com.crt root-ca.crt  /root/registry/ssl
[root@k8s-m1 ~]# docker ps
CONTAINER ID   IMAGE                                               COMMAND                  CREATED          STATUS          PORTS                    NAMES
d7e4249bc561   registry                                            "/entrypoint.sh /etc…"   44 minutes ago   Up 24 minutes   0.0.0.0:5000->5000/tcp   registry
[root@k8s-m1 ~]# docker exec -it d7e /bin/sh
[root@k8s-m1 auth]#  docker exec -it d7e /bin/sh
/ # ls -al /etc/docker/registry/config.yml
-rw-rw-r--    1 root     root           295 Nov 13  2021 /etc/docker/registry/config.yml

私有仓库默认的配置文件位于 /etc/docker/registry/config.yml,我们先在本地编辑 config.yml,之后挂载到容器中使用。

version: 0.1
log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
auth:
  htpasswd:
    realm: basic-realm
    path: /etc/docker/registry/auth/registry
http:
  addr: :443
  host: https://docker.margu.com
  headers:
    X-Content-Type-Options: [nosniff]
  http2:
    disabled: false
  tls:
    certificate: /etc/docker/registry/ssl/docker.margu.com.crt
    key: /etc/docker/registry/ssl/docker.margu.com.key
health:
  storagedriver:
    enabled: true
    interval: 10s
threshold: 3

10、生成 http 认证文件

[root@k8s-m1 ~]#mkdir -p /root/registry/auth
[root@k8s-m1 ~]#docker run --rm     --entrypoint htpasswd     httpd:alpine   -Bbn margu 123456 > /root/registry/auth/registry

将上面的 username password 替换为自己想用的用户名和密码。
11、添加编辑 docker-compose.yml

version: '3'
services:
  registry:
    image: registry
    ports:
      - "443:443"
    volumes:
      - /root/registry:/etc/docker/registry
      - registry-data:/var/lib/registry
volumes:
  registry-data:

放在registry目录下
注意最后的所有文件路径:

[root@k8s-m1 registry]# tree
.
├── auth
│   └── registry
├── config.yml
├── docker-compose.yml
└── ssl
    ├── docker.margu.com.crt
    ├── docker.margu.com.key
    ├── root-ca.crt
    ├── site.cnf
    └── ssl.conf

修改 hosts
往/etc/hosts中添加:
192.168.2.140 docker.margu.com
启动

[root@k8s-m1 ~]#docker-compose up -d

这样我们就搭建好了一个具有权限认证、TLS 的私有仓库,接下来我们测试其功能是否正常。
测试私有仓库功能。
由于自行签发的 CA 根证书不被系统信任,所以我们需要将 CA 根证书 ssl/root-ca.crt 移入 /etc/docker/certs.d/docker.margu.com 文件夹中。

[root@k8s-m1 ~]# mkdir -p /etc/docker/certs.d/docker.margu.com

[root@k8s-m1 ~]#cp /root/registry/ssl/root-ca.crt /etc/docker/certs.d/docker.margu.com/ca.crt

登录到私有仓库。

[root@k8s-m1 ~]#docker login docker.margu.com

尝试推送、拉取镜像。

[root@k8s-m1 ssl]# docker tag  registry:latest  docker.margu.com/registry:latest
[root@k8s-m1 ssl]# docker push docker.margu.com/registry:latest 
The push refers to repository [docker.margu.com/registry]
aeccf26589a7: Layer already exists 
f640be0d5aad: Layer already exists 
aa4330046b37: Pushed 
ad10b481abe7: Layer already exists 
69715584ec78: Layer already exists 
latest: digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4 size: 1363

如果我们退出登录,尝试推送镜像。

[root@k8s-m1 ssl]# docker logout  docker.margu.com
Removing login credentials for docker.margu.com
[root@k8s-m1 ssl]# docker push docker.margu.com/registry:latest 
The push refers to repository [docker.margu.com/registry]
aeccf26589a7: Preparing 
f640be0d5aad: Preparing 
aa4330046b37: Preparing 
ad10b481abe7: Preparing 
69715584ec78: Preparing 
no basic auth credentials

发现会提示没有登录,不能将镜像推送到私有仓库中。

web界面登录也是正常的。
在这里插入图片描述

由于篇幅原因,其他方式的搭建请看其他章节。

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

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

相关文章

ESP-01模块刷固件

ESP-01模块刷固件 0.前言一、准备二、烧写1.接线2.软件设置3.检验 0.前言 最近需要用esp-01模块作为wifi模块上云,但由于出厂自带固件太过老旧,经常会出现奇奇怪怪的警告,所以记录下如何给ESP-01刷写较新的固件。 一、准备 需要准备三个东西…

Python之并发编程一背景知识

一、开篇介绍 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展…

大型软件外包开发管理工具

大型软件项目涉及人员多,软件代码量大,业务复杂,因此需要借助软件工程的管理工具进行管理,否则容易隐入混乱。今天和大家分享这些工具,这些工具比较实用,在实际工作中使用广泛,希望对大家有所帮…

Linux常规基础配置

通过VMware成功安装RHEL7服务器后,为了能够正常使用,需要对其进行常规的一些基础配置,主要有:关闭防火墙与selinux,设置主机名,配置虚拟机IP地址使其能够与外网ping通,配置IP地址与主机名映射&a…

从小白到大神之路之学习运维第29天

第二阶段基础 时 间:2023年5月25日 参加人:全班人员 内 容: Apache服务 目录 一、基本信息 二、安装方法 三、配置方法 四、虚拟主机头 1:基于不同的IP地址 2:基于不同的端口 3:基于不同的域…

SQL 教程(2)

SQL 函数 SQL 拥有很多可用于计数和计算的内建函数。 SQL Aggregate 函数 SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。 有用的 Aggregate 函数: AVG() - 返回平均值COUNT() - 返回行数FIRST() - 返回第一个记录的值LAST() - 返回最后…

C++回调函数理解

C回调函数理解 0.引言1.回调函数的实现方式2.普通函数以函数指针的形式进行实现3.类成员函数以静态函数进行实现4.类成员函数以非静态函数进行实现5.std::funtion和std::bind的使用6.c回调的实现7.应用实例 0.引言 看了一些介绍感觉太官方了,我的简单理解就是从模式…

3D点云深度学习处理的基本概念

权重矩阵更新学习方法概述 参数初始化: 需要对权重矩阵初始化参数(通常使用随机初始化方法,如正态分布或者均匀分布生成随机数) 前向传播: 前向传播中,模型计算权重矩阵和输入数据的结果,得…

第1关:JDBC程序设计

第1关:JDBC程序设计 任务描述相关知识JDBC程序设计JDBC主要功能JDBC主要接口和函数JDBC应用程序开发实例编程要求代码参考 任务描述 本关任务:使用 JDBC 往表中插入数据。 相关知识 为了完成本关任务,你需要掌握: 1.JDBC 主要功…

SM3_CNC,轴组,G代码解析,CNC运动控制

硬件要求: 中型PLC(汇川AM600,禾川HCQ0),且带 SM3_CNC.library 库(3.5.6支持离线仿真) G代码标准: DIN66025 DIN66025-1标准G0 运动定位 G1 线性插补 G2 顺圆插补 G3 …

决策树案例以及决策树可视化

一、案例背景 泰坦尼克号沉没是历史上最臭名昭著的沉船之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502人死亡。在这个案例中,我们要求完成对哪些人可能存活的分析。特别是&…

【C++系列Pn】引用——背刺指针的神秘刺客“吃我一棍”

前言 大家好吖,欢迎来到 YY 滴 C系列 ,热烈欢迎!如标题所示,本章主要内容主要来侃侃“引用”这个刺客!如下就是大纲啦~ 一.引用 1.含义与特点 引用,即取别名。它的最大特点是编译器不会为引用变量而开辟空间…

202313读书笔记|《山居七年》————我只想在广袤璀璨的星河里享受生的鲜活,独自飞,游走

202313读书笔记|《山居七年》————我只想在广袤璀璨的星河里享受生的鲜活,独自飞,游走 《山居七年》 作者张二冬,选择隐士山居是一种很自由随性的生活态度,我觉得这不是普通人可以拥有的,比如我,并未入…

Office project 2007安装

哈喽,大家好。今天一起学习的是project 2007的安装,Microsoft Office project项目管理工具软件,凝集了许多成熟的项目管理现代理论和方法,可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

xmind思维导图转成禅道测试用例

xmind思维导图用来编写用例胜在效率高,可以快速的理清楚需求。缺点在于没法上传禅道,但是公司有要求每次迭代要有禅道的测试用例。直接写禅道的测试用例的话,又很耗时,效率低下,与提高人效的公司年度战略不符&#xff…

apache虚拟主机头的实现方式

目录 一:基于不同的IP地址 二:基于不同的端口 三:基于不同的域名 一:基于不同的IP地址 步骤一:修改主配置文件 vim /usr/local/apache/conf/httpd.conf 声明监听不同的IP地址的80端口 Listen 192.168.2.20:80 Listen…

ChatGPT工作提效之使用python开发对接百度地图开放平台API的实战方案(批量路线规划、批量获取POI、突破数量有限制、批量地理编码)

ChatGPT工作提效系列文章目录 ChatGPT工作提效系列 ChatGPT工作提效之初探路径独孤九剑遇强则强ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)ChatGPT工作提效之生成开发需求和报价单并转为Excel格式ChatGPT工作提效之小…

URLConnection(四)

文章目录 1. 配置客户端请求HTTP首部2. 向服务器写入数据3. URLConnection的安全考虑4. HttpURLConnection 1. 配置客户端请求HTTP首部 HTTP客户端(如浏览器)向服务器发送一个请求行和一个首部,如下: web服务器可以根据这个信息…

Visual Studio 远程调试工具(Remote Debugger)使用方法

一、关于Remote Debugger 当项目在测试环境上有bug,需要运行代码调试一下,这时就需要在测试环境上安装一个调试工具(Remote Debugger),然后在本地运行代码,远程链接到测试环境服务器来调试代码&#xff1b…

算法基础学习笔记——⑦位运算

✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨位运算 ✨操作一 🍓十进制转化成二进制、八进制、十六进制(连除法) 🍓二进制、八进制、十六进制转化成十进制 🍓关于原码,反码&am…