Ubantu docker学习笔记(八)私有仓库

文章目录

  • 一、建立HTTPS链接
    • 1.在仓库服务器上获取TLS证书
      • 1.1 生成证书颁发机构证书
      • 1.2 生成服务器证书
      • 1.3 利用证书运行仓库容器
    • 2.让私有仓库支持HTTPS
    • 3.客户端端配置
  • 二、基本身份验证
  • 三、对外隐藏仓库服务器
    • 3.1 在服务器端
    • 3.2 在客户端进行
  • 四、仓库可视化


在前面的学习中,我们可以知道,我们所使用上传的镜像全都是公共镜像,镜像如果是商业机密,只能供公司内部人员使用,怎么办,这个就涉及到我们私有仓库的搭建。
在这里插入图片描述
在这一章的学习中,我们就用两台主机,分别作为服务器端和客户端,现在我们开始吧!

名称IP地址
服务端192.168.2.109
客户端192.168.2.108

一、建立HTTPS链接

<registry.xinhua.com>可以替换
/opt/docker/registry/certs也地址可以进行修改

1.在仓库服务器上获取TLS证书

新建一个目录

sudo su
mkdir -p /opt/docker/registry/certs
cd /opt/docker/registry/certs
ls

1.1 生成证书颁发机构证书

生成 CA 证书私钥

openssl genrsa -out ca.key 4096

生成ca证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=registry.xinhua.com" \
 -key ca.key \
 -out ca.crt

在这里插入图片描述

1.2 生成服务器证书

生成私钥

openssl genrsa -out registry.xinhua.com.key 4096

生成证书签名请求 (CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=registry.xinhua.com" \
    -key registry.xinhua.com.key \
    -out registry.xinhua.com.csr

在这里插入图片描述
生成 x509 v3 扩展文件

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=registry.xinhua.com
DNS.2=registry.xinhua
DNS.3=hostname
EOF

使用该文件为 主机生成证书v3.ext

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in registry.xinhua.com.csr \
    -out registry.xinhua.com.crt

在这里插入图片描述

1.3 利用证书运行仓库容器

docker run -it -d --name registry-TLS -p 5000:5000 -v /opt/docker/registry/certs/:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.xinhua.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.xinhua.com.key registry:2

在这里插入图片描述

2.让私有仓库支持HTTPS

ip addr

在这里插入图片描述
在仓库服务器和客户端配置域名解析

sudo gedit /etc/hosts


192.168.2.109 registry.xinhua.com
192.168.2.109 nginx.xinhua.com

在这里插入图片描述
验证一下

ping registry.xinhua.com

在这里插入图片描述

3.客户端端配置

在仓库服务器和客户端配置域名解析

sudo gedit /etc/hosts

<服务器ip>
192.168.2.109 registry.xinhua.com
192.168.2.109 nginx.xinhua.com

在这里插入图片描述
验证一下

ping registry.xinhua.com

在这里插入图片描述
客户端安装open-ssh server

apt-get install openssh-server

在客户端上创建存储证书的目录

mkdir -p /etc/docker/certs.d/registry.xinhua.com\:5000

将服务器上的所有证书/opt/docker/registry/certs(.cert .key .crt)通过scp拷贝到创建客户端存储证书的目录服务端执行

修改服务端权限:chmod 777 /opt/docker/registry/certs
修改客户机权限:chmod 777 /etc/docker/certs.d/registry.xinhua.com:5000

scp -r -p /etc/docker/certs.d/registry.xinhua.com:5000/register.xinhua.com.crt username@serverip: /opt/docker/registry/certs/register.xinhua.com.crt 

username<登录用户名你服务器的名字【就是你直接打开控制台的名字】>
serverip<客户端ip(ip addr查看)> 192.168.2.108

scp -r -p /opt/docker/registry/certs/registry.xinhua.com.crt root-u@192.168.2.108:/etc/docker/certs.d/registry.xinhua.com:5000/register.xinhua.com.crt

在这里插入图片描述
客户端
在这里插入图片描述
下面我们就来演示吧

名称IP地址
服务端192.168.2.109
客户端192.168.2.108

在客户端推送镜像
代码解释参考:Ubantu docker学习笔记(三)docker账号push及Dockerfile优化

docker tag busybox:latest registry.xinhua.com:5000/busybox:V1
docker push registry.xinhua.com:5000/busybox:V1

在这里插入图片描述

curl -X GET https://registry.xinhua.com:5000/v2/_catalog -k

在这里插入图片描述

二、基本身份验证

创建目录及用户密码文件

mkdir /opt/docker/registry/auth
docker run  --entrypoint htpasswd  httpd:2 -Bbn testuser testpassword > /opt/docker/registry/auth/htpasswd

这里注意testuser testpassword 就是我们后面登录的账号密码了

停止之前镜像(直接把所有关了)

docker stop $(docker ps -q) & docker rm $(docker ps -aq)

再次运行我们的服务镜像

docker run -d  \
-p 5000:5000   \
--restart=always  \
--name registry  \
-v /opt/docker/registry/auth:/auth  \
-e "REGISTRY_AUTH=htpasswd"  \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  \
-v /opt/docker/registry/certs:/certs   \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.xinhua.com.crt   \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.xinhua.com.key   registry:2

在这里插入图片描述
去我们客户端进行镜像上传

docker push registry.xinhua.com:5000/busybox:V1

在这里插入图片描述
可以看到我们上传不了,接着我们登录

登录

docker login registry.xinhua.com:5000

账号:testuser
密码:testpassword
在这里插入图片描述
在这里插入图片描述
我们再去上传我们的镜像

docker push registry.xinhua.com:5000/busybox:V1

在这里插入图片描述

三、对外隐藏仓库服务器

3.1 在服务器端

安装nginx

apt install nginx

为nginx创建SSL秘钥和证书到/etc/nginx/certs/目录下

mkdir -p /etc/nginx/certs/
cd /etc/nginx/certs/
ls

开始参考https的方式啦,也就是相当于把registry.xinhua.com全都替换成nginx.xinhua.com

生成ca证书私钥

openssl genrsa -out ca.key 4096

生成ca证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=nginx.xinhua.com" \
 -key ca.key \
 -out ca.crt

生成服务器证书,私钥

openssl genrsa -out nginx.xinhua.com.key 4096

生成证书签名请求 (CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=nginx.xinhua.com" \
    -key nginx.xinhua.com.key \
    -out nginx.xinhua.com.csr

生成 x509 v3 扩展文件

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=nginx.xinhua.com
DNS.2=nginx.xinhua
DNS.3=hostname
EOF

使用该文件为 主机生成证书v3.ext

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in nginx.xinhua.com.csr \
    -out nginx.xinhua.com.crt

在这里插入图片描述
客户端上创建存储证书的目录

mkdir -p /etc/docker/certs.d/nginx.xinhua.com\:443

将服务器上的所有证书/opt/docker/registry/certs(.cert .key .crt)通过scp拷贝到创建客户端存储证书的目录服务端执行

修改服务端权限:
chmod 777 /etc/nginx/certs/
修改客户机权限:
chmod 777 /etc/docker/certs.d/nginx.xinhua.com:443
chmod 777 /usr/local/share/ca-certificates

username<登录用户名你服务器的名字【就是你直接打开控制台的名字】>
serverip<客户端ip(ip addr查看)> 192.168.2.108

scp -r -p /etc/nginx/certs/nginx.xinhua.com.crt root-u@192.168.2.108:/etc/docker/certs.d/nginx.xinhua.com:443/nginx.xinhua.com.crt
scp -r -p /etc/nginx/certs/nginx.xinhua.com.crt root-u@192.168.2.108:/usr/local/share/ca-certificates/nginx.xinhua.com.crt

在这里插入图片描述

修改nginx配置/etc/nginx/nginx.conf让nginx的支持SSL的反向代理和身份验证

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {
        upstream docker-register {
        	server registry.xinhua.com:5000;
        }

	server {
	    listen 443 ssl;
	    server_name nginx.xinhua.com;
	    #修改
	    ssl_certificate /etc/nginx/certs/nginx.xinhua.com.crt;
	    #修改
	    ssl_certificate_key /etc/nginx/certs/nginx.xinhua.com.key;

	    ssl_session_cache builtin:1000 shared:SSL:10m;
	    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
	    ssl_prefer_server_ciphers on;
	    
	    proxy_set_header Host $host;
	    proxy_set_header X-Real-IP $remote_addr;
	    add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
	    
	    location / {
	        auth_basic "Restricted";
	        auth_basic_user_file /etc/nginx/auth/htpasswd.txt;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_pass https://docker-register;
		proxy_read_timeout 900;
	    }
	    
	    location /v2 {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	    
	    location /_ping {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	    
	    location /v2/_ping {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	    location /v2/_catalog {
	        auth_basic off;
		proxy_pass https://docker-register;
	    }
	}
	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
#
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

使用htpasswd去生成用户账号,设置密码

mkdir /etc/nginx/auth
cd /etc/nginx/auth
apt install apache2-utils
htpasswd -c htpasswd.txt user

输入你的密码

在这里插入图片描述
重启Nginx服务

sudo /etc/init.d/nginx restart
注意!!!
一定要打全
https://192.168.2.109:443
直接输入域名可能出现以下错误

没有打端口号
在这里插入图片描述
没有用http连接
在这里插入图片描述
正确!!!
在这里插入图片描述

在这里插入图片描述

3.2 在客户端进行

配置

sudo vi /etc/docker/daemon.json

{  
   "registry-mirrors": ["https://8f6a79wk.mirror.aliyuncs.com"],
   "insecure-registries":["私库地址(可以域名也可以ip)"]
}



我的配置
{
   "registry-mirrors": ["https://8f6a79wk.mirror.aliyuncs.com"],
   "insecure-registries":["https://nginx.xinhua.com"]
}

如果不配置就会出现
Error response from daemon: Get "https://nginx.xinhua.com/v2/": x509: certificate signed by unknown authority

登录

update-ca-certificates
systemctl daemon-reload
systemctl restart docker

第一种:
docker login https://192.168.2.109:443 -u user -p "123456"

第二种:
#设置环境变量
export PASSWORD=123456
#以环境变量的方式读入
echo "$PASSWORD" | docker login https://https://nginx.xinhua.com --username user --password-stdin

在这里插入图片描述

我们再去上传我们的镜像

docker tag busybox:latest 192.168.2.109:443/busybox:V1
docker push 192.168.2.109:443/busybox:V1

四、仓库可视化

http:

docker run --name registry -d  -p 5000:5000 --restart=always  -v /opt/data/registry:/var/lib/registry registry


docker run -it -d -p 8080:8080 --name registry-web --link registry   \
-e REGISTRY_URL=http://192.168.2.109:5000/v2            \
-e REGISTRY_TRUST_ANY_SSL=true            \
-e REGISTRY_BASIC_AUTH="cm9vdDoxMjM0NTY"            \
-e REGISTRY_NAME=192.168.2.109:5000 hyper/docker-registry-web

在这里插入图片描述

https:(未实现)

docker run -it -d --name registry-TLS -p 5000:5000 -v /opt/docker/registry/certs/:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.xinhua.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.xinhua.com.key registry:2


docker run -it -d -p 8080:8080 --name registry-web --link registry-TLS   \
-e REGISTRY_URL=https://192.168.2.109:5000/v2            \
-e REGISTRY_TRUST_ANY_SSL=true            \
-e REGISTRY_BASIC_AUTH="cm9vdDoxMjM0NTY"            \
-e REGISTRY_NAME=192.168.2.109:5000 hyper/docker-registry-web

在这里插入图片描述

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

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

相关文章

ChatGPT被淘汰了?Auto-GPT到底有多强

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了&#xff0c;显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API&#xff0c;某种意义只是基于ChatGPT能力的应用。但最近&#xff0c;Auto…

Nautilus Chain Layer 3 圆桌会议圆满举办,超4.8K用户观看

在4月21日&#xff0c;Nautilus Chain举办了以“Layer 3区块链的意义和发展以及Crypto的演变”为主题的线上圆桌会议&#xff0c;我们邀请了众多行业嘉宾包括GitcoinDAO社区管理者Bob jiang、Whalers Community发起者崔棉大师、Chatpuppy联合创始人 古千峰、Whalers Community核…

机器学习与深度学习——通过决策树算法分类鸢尾花数据集iris求出错误率画出决策树并进行可视化

什么是决策树&#xff1f; 决策树是一种常用的机器学习算法&#xff0c;它可以对数据集进行分类或回归分析。决策树的结构类似于一棵树&#xff0c;由节点和边组成。每个节点代表一个特征或属性&#xff0c;每个边代表一个判断或决策。从根节点开始&#xff0c;根据特征的不同…

vue3的props和defineProps

文章目录 1. Props 声明1.1 props用字符串数组来声明Blog.vueBlogPost.vue 1.2 props使用对象来声明Blog.vueBlogPost.vue 2. 传递 prop 的细节2.1 Prop 名字格式2.1 静态Prop & 动态 Prop静态prop动态prop示例Blog.vueBlogPost.vue 2.3 传递不同的值类型NumberBooleanArra…

基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)

摘要&#xff1a;本文介绍了一种MATLAB实现的目标检测系统代码&#xff0c;采用 YOLOv4 检测网络作为核心模型&#xff0c;用于训练和检测各种任务下的目标&#xff0c;并在GUI界面中对各种目标检测结果可视化。文章详细介绍了YOLOv4的实现过程&#xff0c;包括算法原理、MATLA…

C++知识点 -- 异常

C知识点 – 异常 文章目录 C知识点 -- 异常一、异常概念二、异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范 三、自定义异常体系四、C标准库的异常体系五、C异常的优缺点 一、异常概念 当一个函数发现自己无法处理错误时&#xff0c;就可以抛出异常&#…

14-3-进程间通信-消息队列

前面提到的管道pipe和fifo是半双工的&#xff0c;在某些场景不能发挥作用&#xff1b; 接下来描述的是消息队列&#xff08;一种全双工的通信方式&#xff09;&#xff1b; 比如消息队列可以实现两个进程互发消息&#xff08;不像管道&#xff0c;只能1个进程发消息&#xff…

kali: kali工具-Ettercap

kali工具-Ettercap ettercap工具&#xff1a; 用来进行arp欺骗&#xff0c;可以进行ARP poisoning&#xff08;arp投毒&#xff09;&#xff0c;除此之外还可以其他功能&#xff1a; ettercap工具的arp投毒可以截取web服务器、FTP服务器账号密码等信息&#xff0c;简略后打印出…

前端学习之使用JavaScript

前情回顾&#xff1a;网页布局 JavaScript 简介 avaScript诞生于1995年&#xff0c;它的出现主要是用于处理网页中的前端验证。所谓的前端验证&#xff0c;就是指检查用户输入的内容是否符合一定的规则。比如&#xff1a;用户名的长度&#xff0c;密码的长度&#xff0c;邮箱的…

SQL中去除重复数据的几种方法,我一次性都告你​

使用SQL对数据进行提取和分析时&#xff0c;我们经常会遇到数据重复的场景&#xff0c;需要我们对数据进行去重后分析。 以某电商公司的销售报表为例&#xff0c;常见的去重方法我们用到distinct 或者group by 语句&#xff0c; 今天介绍一种新的方法&#xff0c;利用窗口函数…

Github 的使用

3. Github 在版本控制系统中&#xff0c;大约90%的操作都是在本地仓库中进行的&#xff1a;暂存&#xff0c;提交&#xff0c;查看状态或者历史记录等等。除此之外&#xff0c;如果仅仅只有你一个人在这个项目里工作&#xff0c;你永远没有机会需要设置一个远程仓库。只有当你…

2001-2021年全国30省就业人数数据

2001-2021年全国30省就业人数数据/各省就业人数数据 1、时间&#xff1a;2001-2021年 2、范围&#xff1a;包括30个省市不含西藏 3、指标&#xff1a;就业人数 4、来源&#xff1a;各省NJ、社会统计NJ 5、缺失情况说明&#xff1a;无缺失 6、指标说明&#xff1a; 就业人…

实在智能出席第六届数字中国建设峰会,入围2022年信息技术应用创新优秀解决方案榜单

最美榕城四月天&#xff0c;山海之间尽显数字澎湃。这一周来&#xff0c;实在智能来到了“有福之州”&#xff0c;为数字中国建设增添实在色彩。 4月25日&#xff0c;实在华夏行抵达福州站&#xff0c;与众多生态合作伙伴携手共话数字发展新未来&#xff1b; 4月26日&#xff…

分布式事务 --- Seata事务模式、高可用

一、事务模式 1.1、XA模式 XA 规范 是 X/Open 组织定义的分布式事务处理&#xff08;DTP&#xff0c;Distributed Transaction Processing&#xff09;标准&#xff0c;XA 规范 描述了全局的TM与局部的RM之间的接口&#xff0c;几乎所有主流的数据库都对 XA 规范 提供了支持。…

ContextCapture Master 倾斜摄影测量实景三维建模技术应用

查看原文>>>ContextCapture Master 倾斜摄影测量实景三维建模技术应用 目录 第一部分、倾斜摄影测量原理及应用领域 第二部分、倾斜摄影测量数据采集方法 第三部分、CC支持数据类型及导入数据方法 第四部分、CC空三计算参数设置及数据处理方法 第五部分、CC控制…

电气电工相关专业知识及名词解释

一、电流电压 火线、零线、地线&#xff1a;火线和零线的区别就是&#xff1a;火线带电&#xff0c;零线不带电。火线是传电流的&#xff0c;而零线是回流的。 红色是火线&#xff0c;零线一般是绿色的&#xff0c;通常可用电笔来测。电笔一头亮了是火线&#xff0c;不亮的则…

Python使用CV2库捕获、播放和保存摄像头视频

Python使用CV2库捕获、播放和保存摄像头视频 特别提示&#xff1a;CV2指的是OpenCV2&#xff08;Open Source Computer Vision Library&#xff09;&#xff0c;安装的时候是 opencv_python&#xff0c;但在导入的时候采用 import cv2。 若想使用cv2库必须先安装&#xff0c;P…

InnoDB 引擎 底层逻辑

目录 0 课程视频 1 逻辑存储结构 1.1 结构图 1.2 表空间 -> 记录 索引 存储记录 等数据 1.2.1 储存在 cd/var/lib/mysql -> ll -> 目录 mysql.ibd 1.3 段 -> 索引 存储记录 具体存储 1.3.1 数据段 b树 叶子节点 1.3.2 索引段 b树的 非叶子节点 1.3.3 回滚段…

ChatGPT来了不用慌,广告人还有这个神器在手

#ChatGPT能取代广告人吗&#xff0c;#ChatGPT会抢走你的工作吗&#xff1f;#ChatGPT火了&#xff0c;会让营销人失业吗&#xff1f;自ChatGPT爆火以来&#xff0c;各种专业or非专业文章不停给广告人强加焦虑&#xff0c;但工具出现的意义&#xff0c;更多在于提效而非替代&…

【技术分享】防止根据IP查域名,防止源站IP泄露

有的人设置了禁止 IP 访问网站&#xff0c;但是别人用 https://ip 的形式&#xff0c;会跳到你服务器所绑定的一个域名网站上 直接通过 https://IP, 访问网站&#xff0c;会出现“您的连接不是私密连接”&#xff0c;然后点高级&#xff0c;会出现“继续前往 IP”&#xff0c;…