Docker笔记7 | 如何使用 Docker Compose 搭建一个拥有权限 认证、TLS 的私有仓库?

news/2024/5/15 11:55:55/文章来源:https://blog.csdn.net/NoamaNelson/article/details/130705449

7 | 如何使用 Docker Compose 搭建一个拥有权限 认证、TLS 的私有仓库?

  • 1 准备工作
  • 2 准备站点证书
    • 2.1 创建CA私钥
    • 2.2 创建CA根证书请求文件
    • 2.3 配置CA根证书
    • 2.4 签发根证书
    • 2.5 生成站点SSL私钥
    • 2.6 私钥生成证书请求文件
    • 2.7 配置证书
    • 2.8 签署站点SSL证书
  • 3 配置私有仓库
  • 4 生成 http 认证文件
  • 5 修改hosts文件
  • 6 启动
  • 7 测试私有仓库
    • 7.1 移动证书
    • 7.2 登陆仓库
    • 7.3 拉取推送镜像
    • 7.4 退出登陆,并推送镜像

1 准备工作

  • 创建一个文件夹registry,后续专门在该文件下操作;
  • 拥有一个私有仓库地址,比如demo.testdocker.com

2 准备站点证书

注意:以下是使用 openssl 自行签发demo.testdocker.com 的站点 SSL 证书。

2.1 创建CA私钥

$ sudo openssl genrsa -out "root-ca.key" 4096

在这里插入图片描述

2.2 创建CA根证书请求文件

sudo openssl req -new -key "root-ca.key" -out "root-ca.csr" -sha256 -subj '/C=CN/ST=Shanxi/L=Xian/O=Company/CN=Company Docker Registry CA'

在这里插入图片描述

2.3 配置CA根证书

  • 新建root-ca.cnf
    在这里插入图片描述

  • 并写入如下内容:

在这里插入图片描述

[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

2.4 签发根证书

sudo 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

在这里插入图片描述

2.5 生成站点SSL私钥

sudo openssl genrsa -out "demo.testdocker.com.key" 4096

在这里插入图片描述

2.6 私钥生成证书请求文件

sudo openssl req -new -key "demo.testdocker.com.key" -out "site.csr" -sha256 -subj '/C=CN/ST=Shanxi/L=Xian/O=Company/CN=demo.testdocker.com'

在这里插入图片描述

2.7 配置证书

  • 新建 site.cnf 文件:

在这里插入图片描述

  • 写入如下内容:

[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:demo.testdocker.com, IP:127.0.0.1
subjectKeyIdentifier=hash

在这里插入图片描述

2.8 签署站点SSL证书

sudo openssl x509 -req -days 750 -in "site.csr" -sha256 -CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial -out "demo.testdocker.com.crt" -extfile "site.cnf" -extensions server

在这里插入图片描述

此时拥有了 demo.testdocker.com 的网站 SSL 私钥 demo.testdocker.com.key 和 SSL 证书
demo.testdocker.crt 及 CA 根证书 root-ca.crt

ssl 文件夹并将 docker.domain.com.key docker.domain.com.crt root-ca.crt 这
三个文件移入,删除其他文件
在这里插入图片描述

3 配置私有仓库

  • 私有仓库默认的配置文件位于 /etc/docker/registry/config.yml:
version: 0.1
log:accesslog:disabled: truelevel: debugformatter: textfields:service: registryenvironment: staging
storage:delete:enabled: truecache:blobdescriptor: inmemoryfilesystem:rootdirectory: /var/lib/registry
auth:htpasswd:realm: basic-realmpath: /etc/docker/registry/auth/nginx.htpasswd
http:addr: :443host: https://demo.testdocker.comheaders:X-Content-Type-Options: [nosniff]http2:disabled: falsetls:certificate: /etc/docker/registry/ssl/demo.testdocker.com.crtkey: /etc/docker/registry/ssl/demo.testdocker.com.key
health:storagedriver:enabled: trueinterval: 10s
threshold: 3

4 生成 http 认证文件

  • 创建auth文件夹:
    在这里插入图片描述
  • 执行如下命令:
sudo docker run --rm --entrypoint htpasswd httpd:alpine -Bbn noamanelson 123456 > auth/nginx.htpasswd
noamanelson@noamanelson-Virtual-Machine:/etc/docker/registry$ sudo docker run --rm --entrypoint htpasswd httpd:alpine -Bbn noamanelson 123456 > auth/nginx.htpasswd
Unable to find image 'httpd:alpine' locally
alpine: Pulling from library/httpd
8a49fdb3b6a5: Already exists
beb66a906b34: Pulling fs layer
01924573e8db: Pulling fs layer
255f194b76b3: Pulling fs layer
0f48f8ea2bc9: Pulling fs layer
390cbd08c8ae: Pulling fs layer
0f48f8ea2bc9: Waiting
390cbd08c8ae: Waiting
beb66a906b34: Verifying Checksum
beb66a906b34: Download complete
beb66a906b34: Pull complete
01924573e8db: Verifying Checksum
01924573e8db: Download complete
01924573e8db: Pull complete
255f194b76b3: Verifying Checksum
255f194b76b3: Download complete
390cbd08c8ae: Verifying Checksum
390cbd08c8ae: Download complete
255f194b76b3: Pull complete
0f48f8ea2bc9: Verifying Checksum
0f48f8ea2bc9: Download complete
0f48f8ea2bc9: Pull complete
390cbd08c8ae: Pull complete
Digest: sha256:3e25d419bf180122f5f9af5cf2180709d8234320ff25514a61f5d1bc3cf46394
Status: Downloaded newer image for httpd:alpine
noamanelson@noamanelson-Virtual-Machine:/etc/docker/registry$ 
  • 编辑编辑 docker-compose.yml
    在这里插入图片描述
version: '3'ervices:registry:image: registryports:- "443:443"volumes:- ./:/etc/docker/registry- registry-data:/var/lib/registry
volumes:registry-data:

5 修改hosts文件

  • sudo vim /etc/hosts

在这里插入图片描述

6 启动

  • 使用命令提示找不到,需要安装:
noamanelson@noamanelson-Virtual-Machine:/etc/docker/registry$ sudo docker-compose up -d
sudo: docker-compose:找不到命令
  • 安装docker-compose
sudo apt-get install docker-compose

在这里插入图片描述

  • 再次启动,又报错了:
    在这里插入图片描述
  • 应为docker-compose的版本不对,重新卸载docker-compose
sudo apt-get remove docker-compose
  • 再次安装:
sudo apt-get update
sudo apt-get install docker-compose-plugin
  • 启动:
sudo docker compose up -d

在这里插入图片描述

7 测试私有仓库

7.1 移动证书

  • 由于自行签发的 CA 根证书不被系统信任,所以我们需要将 CA 根证书 ssl/root-ca.crt 移入 /etc/docker/certs.d/docker.test.com 文件夹中:
sudo mkdir -p /etc/docker/certs.d/demo.testdocker.com
sudo cp ssl/root-ca.crt /etc/docker/certs.d/demo.testdocker.com/ca.crt

在这里插入图片描述

7.2 登陆仓库

  • sudo docker login demo.testdocker.com
    在这里插入图片描述

7.3 拉取推送镜像

# noamanelson是我的用户名,改为自己的即可
sudo docker pull ubuntu:18.04
sudo docker tag ubuntu:18.04 docker.domain.com/noamanelson/ubuntu:18.04
sudo docker push docker.domain.com/noamanelson/ubuntu:18.04
sudo docker image rm docker.domain.com/noamanelson/ubuntu:18.04
sudo docker pull docker.domain.com/noamanelson/ubuntu:18.04

在这里插入图片描述

7.4 退出登陆,并推送镜像

docker logout docker.domain.com
docker push docker.domain.com/noamanelson/ubuntu:18.04

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码行业的发展真的可以让复杂的代码编写一去不复返?

前言 传统的软件开发过程往往需要耗费大量的时间和精力,因为开发人员需编写复杂的代码以完成各种功能。 低代码行业的发展,正好解决了这个问题,让复杂的代码编写一去不复返了。 文章目录 前言引入强大的平台总结 引入 低代码平台 是一种通过可…

Go基础篇:接口

目录 前言✨一、什么是接口?二、空接口 interface{}1、eface的定义2、需要注意的问题 三、非空接口1、iface的定义2、itab的定义3、itab缓存 前言✨ 前段时间忙着春招面试,现在也算告一段落,找到一家比较心仪的公司实习,开始慢慢回…

yum和repo详细解析

目录 一、rpm、yum、repo 二、repo文件详细解析 三、常用命令 四、更改epel.repo为清华源 一、rpm、yum、repo RPM RPM(Red-hat Package Manager),是一个由红帽最早开发出来的包管理器,目前已经是大多数Linux发行的默认包管理器。RPM管理的包都是以…

程序员一个月拿两万,得知卖猪肉可以赚五万,你是选择做程序员还是卖猪肉?

在知乎上看到这么个帖子,觉得挺有意思,大家一起瞧瞧? 对此,我也看到了许多犀利的回答哈 **A:**我反过来问你,如果一对夫妇卖猪肉一个月只能挣一万,听说一名程序员一个月拿五万,他们…

刷题day66:目标和

题意描述: 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ,在 1 之前添…

【简介】限流

限流 为什么要限流限流算法单机限流计数器算法滑动窗口算法漏桶算法令牌桶算法 分布式限流配额算法 限流策略限流位置 为什么要限流 作为有追求的程序员,我们都希望自己的系统跑的飞快,但是速度再快,系统处理请求耗时也不可能为0&#xff0c…

[MYAQL / Mariadb] 数据库学习-管理表记录2:匹配条件

管理表记录-匹配条件 匹配条件基本条件查询逻辑匹配(多个条件判断) 高级条件范围匹配模糊查询正则表达式: regexp四则运算 操作查询结果(对查找到的数据再做处理)排序分组(一样的显示一次)&…

【网络】交换机基本原理与配置

目录 🍁交换机工作原理 🍁交换机接口的双工模式 🍁交换机命令行模式 🍁交换机常见命令 🧧帮助命令 🧧常用命令介绍 🍁交换机的基本配置 🧧配置接口的双工模式及速率 🦐博…

janus videoroom 对接freeswitch conference 篇1

janus videoroom 实时性非常好, freeswitch conference的功能也很多 ,有没办法集成到一块呢 让很多sip 视频终端也能显示到videoroom 里面, 实现方式要不两种 1.改源码实现 (本文忽略 难度高) 2.找一个videoroom管…

05mysql---函数

目录 1:日期函数 2:字符函数 3:数值函数 4:流程函数 1:日期函数 select 函数(参数) 函数功能举例curdate()返回当前日期2023-05-17curtime()返回当前时间14:44:33now()返回当前日期和时间2023-05-17 14:44:33year(date)获取指定date的年份month(date)获取指定date的月份day…

Python学习26:个人所得税计算器

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 2018年10月1日以前&#xff…

特征选择与特征提取

目录 一、 特征选择1、特征2、特征选择3、扩展——特征选择算法(有兴趣和精力可了解)拓展--完全搜索:拓展--启发式搜索:拓展--随机搜索:拓展--遗传算法: 二、 特征提取三、特征提取主要方法——PCA(主成分分析)1、PCA算法是如何实现的?PCA--零均值化(中心…

【Linux命令】mount / umount命令、查看文件的挂载情况(lsblk)

在Windows环境下,我们可以直接访问检测到的外部设备,如磁盘、U盘等;然而在Linux环境下,外部硬件设备如磁盘、SD卡等外部设备是无法直接访问的。因此就需要挂载。 参考链接:mount 详解 目录 1、什么是挂载?…

Packet Tracer – 配置中继

Packet Tracer – 配置中继 地址分配表 设备 接口 IP 地址 子网掩码 交换机端口 VLAN PC1 NIC 172.17.10.21 255.255.255.0 S2 F0/11 10 PC2 NIC 172.17.20.22 255.255.255.0 S2 F0/18 20 PC3 NIC 172.17.30.23 255.255.255.0 S2 F0/6 30 PC4 NIC 1…

系统分析师:六、企业信息化战略与实施

目录 一、信息与信息化概念 1.1 信息的概念 1.2 信息化的概念 二、信息系统 2.1 信息系统的概念 2.2 信息系统的类型 2.3 信息系统的生命周期 2.4 系统建模 2.5 信息系统战略规划 2.6 信息化开发方法 三、电子政务 四、企业资源计划(ERP) 五、系统集成 一、信息与信息…

第三十三章 使用Redux管理状态

Redux(全称为Redux)是一个基于状态管理的JavaScript库,它可以用来构建可重用的、可维护的代码。Redux主要用于处理复杂的应用程序中的状态管理,它能够自动地处理应用程序中的更改,并在需要时更新视图。 Redux使用一种被…

FreeRTOS_系统配置

目录 1. FreeRTOSConfig.h 文件 2. "INCLUDE_" 开始的宏 2.1 INCLUDE_xSemaphoreGetMutexHolder 2.2 INCLUDE_xTaskAbortDelay 2.3 INCLUDE_vTaskDelay 2.4 INCLUDE_vTaskDelayUntil 2.5 INCLUDE_vTaskDelete 2.6 INCLUDE_xTaskGetCurrentTaskHandle 2.7 IN…

Matlab论文插图绘制模板第92期—折线图(Plot)

之前有分享过Matlab折线图的绘制模板: 但随着技术力的提升,发现很多地方还有待改进,于是便有了本期内容。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需…

5th-Generation Mobile Communication Technology(二)

目录 一、5G/NR 1、 快速参考(Quick Reference) 2、5G Success 3、5G Challenges 4、Qualcomm Videos 二、PHY and Protocol 1、Frame Structure 2、Numerology 3、Waveform 4、Frequency Band 5、BWP 6、Synchronization 7、Beam Management 8、CSI Fra…

FiftyOne 系列教程(2)使用FiftyOne读取数据集

1. 支持的数据集 1.1. 支持各种常见的数据集格式 docs.voxel51.com/user guide/dataset creation/datasets.html#supported import formats此外,zoo上面有什么数据集,这里就可以加载到对应的数据集Available Zoo Datasets — FiftyOne 0.20.1 document…