Docker 镜像仓库

news/2024/5/9 13:47:33/文章来源:https://blog.csdn.net/Yuanshigou9/article/details/136963250

目录

1、搭建私有 registry

服务端创建镜像仓库

客户端推送镜像

镜像导入导出

2、Nginx 代理 registry 仓库

SSL 证书 & https 协议

SSL证书

https协议

SSL 的验证流程

客户端安装 Nginx

使用 openssl 生成CA根证书和根证书key

创建 Nginx 服务证书

配置启动 Nginx

服务端配置 docker

上传镜像

registry 仓库镜像删除

3、Harbor 仓库搭建

Docker-compose

创建 Harbor 服务证书

部署 Harbor

配置 Nginx 代理 Harbor

上传镜像


1、搭建私有 registry

主机名

ip

安装服务

角色

node-10

192.168.137.110

docker

Registry客户端

node-11

192.168.137.111

docker,Registry

Registry服务器

服务端创建镜像仓库
# 服务端拉取Registry镜像
[root@node-11 ~] docker pull registry
mkdir -p /data/docker/registry# 启动Registry仓库
docker run -d --name registry1 --restart=always -p 5000:5000 \
-v /data/docker/registry:/var/lib/registry registry# 查看仓库中的镜像
curl -X GET http://192.168.137.111:5000/v2/_catalog

客户端推送镜像

修改images仓库中镜像的名字

在镜像名字前加registry仓库地址和端口, 使之和registry仓库地址匹配, 只有Docker Hub 上的官方镜像可以省略仓库地址和项目名字,因为默认镜像下载地址就是docker hub

# 修改images仓库中镜像的名字
docker tag centos:7 192.168.137.111:5000/centos7:v1

客户端添加私有仓库地址:vim /etc/docker/daemon.json

{"insecure-registries": ["192.168.137.111:5000"],"registry-mirrors": ["https://w0ckwo1v.mirror.aliyuncs.com"]
}
----------------------------------------------------------------# 重启docker
systemctl restart docker

推送镜像到镜像仓库

docker push 192.168.137.111:5000/centos7:v1# 查看仓库中的镜像
curl -X GET http://192.168.137.111:5000/v2/_catalog

测试拉取私有仓库镜像

# 删除有原有镜像
docker rmi 192.168.137.111:5000/centos7:v1 # 拉取私有仓库镜像
Docker pull 192.168.137.111:5000/centos7:v1

镜像导入导出
# 导出镜像
docker save -o centos7.tar centos:7

# 删除原有镜像
docker rmi centos:7# 导入镜像
docker load < centos-7.tar	 |   docker load -i centos-7.tar 

2、Nginx 代理 registry 仓库
SSL 证书 & https 协议
SSL证书
https协议

SSL 证书,也称为 SSL 服务器证书,是遵守 SSL 协议的一种数字证书,由全球信任的证书颁发机构 (CA) 验证服务器身份后颁发,将 SSL 证书安装在网站服务器上,可以使用https加密协议访问网站。

ssl证书用来认证服务器真实身份,钓鱼欺诈网站泛滥,用户如何识别网站是钓鱼网站还是安全网站?网站部署全球信任的SSL证书后,浏览器内置安全机制,实时查验证书状态,通过浏览器向用户展示网站认证信息,让用户轻松识别网站真实身份,防止钓鱼网站仿冒。

https协议可以看成是HTTP+SSL的结合体,https实现网站加密传输,用户通过http协议访问网站时,浏览器和服务器之间是明文传输,这就意味着用户填写的密码、帐号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,被黑客加以利用。网站安装SSL证书后,使用https加密协议访问网站,可激活客户端浏览器到网站服务器之间的"SSL加密通道"(SSL协议),实现高强度双向加密传输,防止传输数据被泄露或篡改。

SSL 的验证流程

使用证书认证比我们之前秘钥认证多了一个用户浏览器访问证书颁发机构验证服务器颁发公钥的合法性。浏览器默认集成了证书颁发机构。

证书认证采用非对称加密,公钥和私钥都可以用来加密数据,用另一个解开,公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名

客户端安装 Nginx

主机名

ip

安装服务

角色

node-10

192.168.137.110

docker、Nginx

Registry客户端

node-11

192.168.137.111

docker,Registry

Registry服务器

# 安装nginx依赖包
yum -y install pcre-devel zlib-devel openssl openssl-devel epel-release# 安装nginx
yum install -y nginx

使用 openssl 生成CA根证书和根证书key

如果你有经过认证机构认证的证书,则直接使用将证书放入nginx目录下即可。如果没有,则使用openssl创建自签名证书

查看ca证书默认配置:cat /etc/pki/tls/openssl.cnf

vim /etc/pki/tls/openssl.cnf
-----------------openssl.cnf---------------------------
req_extensions = v3_req
-----------------openssl.cnf---------------------------

创建根证书key

cd /etc/pki/CA/
openssl genrsa -out private/cakey.pem 2048

# 生成根证书
openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem

req

证书请求的子命令,请求生成证书

x509

表示输出证书,X509是通用的证书文件格式

days

证书有效期

OpenSSL生成密钥文件的格式就只有PEM和DER两种格式,PEM的是将密钥用base64编码(base64就是一种基于64个可打印字符来表示二进制数据的方法)表示出来的,直接打开你能看到一串的英文字母,DER格式是二进制的密钥文件

创建 Nginx 服务证书
[root@node-10 CA] mkdir /etc/pki/CA/ssl
cd /etc/pki/CA/ssl/
openssl genrsa -out nginx.key 2048

为nginx web服务器生成证书签署请求

# 为nginx web服务器生成证书签署请求
[root@cong10 ssl] openssl req -new -key nginx.key -out nginx.csr

Common Name一定要是访问nginx的web服务器的域名。这里使用registry.test.com域名访问后端镜像仓库。

创建证书序列号文件、证书索引文件:第一次创建的时候需要给予证书序列号

[root@node-10 ssl] touch /etc/pki/CA/{serial,index.txt}
echo 00 > /etc/pki/CA/serial# 使用私有CA根据请求签发服务端证书
openssl ca -in nginx.csr -keyfile /etc/pki/CA/private/cakey.pem -cert \
/etc/pki/CA/cacert.pem -days 3650 -out nginx.crt

配置启动 Nginx

编写nginx配置文件:vim /etc/nginx/nginx.conf

upstream docker-registry {ip_hash;server 192.168.137.111:5000;server 192.168.137.111:5001;
}
server {listen       80;listen       [::]:80;server_name  registry.test.com;location / {return 301 https://$host$request_uri;}# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}server {listen       443 ssl http2;listen       [::]:443 ssl http2;server_name  registry.test.com;ssl_certificate /etc/pki/CA/ssl/nginx.crt;ssl_certificate_key /etc/pki/CA/ssl/nginx.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {auth_basic "Registry realm";auth_basic_user_file /etc/nginx/nginx.htpasswd;proxy_pass http://docker-registry;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forward-Proto $scheme;proxy_connect_timeout 900;proxy_read_timeout 900;proxy_send_timeout 900;}# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}    
}

配置nginx认证

yum -y install httpd-tools
htpasswd -bc /etc/nginx/nginx.htpasswd admin 123456

启动 Nginx

# 启动nginx
systemctl enable nginx
systemctl start nginx# 查看nginx端口
netstat -antup | grep nginx

配置hosts解析

vim /etc/hosts
192.168.137.110 registry.test.com

访问测试

# curl命令访问
curl -k -u admin:123456 https://registry.test.com/v2/_catalog

服务端配置 docker

添加hosts解析

[root@node-11 ~] vim /etc/hosts
192.168.137.110 registry.test.com

添加registry仓库

[root@node-11 ~] vim /etc/docker/daemon.json
{"insecure-registries": ["https://registry.test.com"],"registry-mirrors": ["https://0u0do0ns.mirror.aliyuncs.com"]
}

注意:如果有多个私有仓库,请在insecure-registries列表里使用逗号分隔

重启docker

systemctl restart docker# 登陆registry仓库
docker login https://registry.test.com

上传镜像
# 给busybox镜像打标签
docker tag busybox registry.test.com/busybox# 推送镜像
docker push registry.test.com/busybox# 查看仓库镜像
curl -k -u admin:123456 https://registry.test.com/v2/_catalog
curl -k -u admin:123456 'https://registry.test.com/v2/busybox/tags/list'

registry 仓库镜像删除
# 删除repo
docker exec registry1 rm -rf /var/lib/registry/docker/registry/v2/repositories/centos7# 清除blob
docker exec registry1 registry garbage-collect /etc/docker/registry/config.yml

# 查看registry仓库镜像
curl -k -u admin:123456 https://registry.test.com/v2/_catalog

3、Harbor 仓库搭建

项目地址:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content.

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能,具有web管理功能,操作其实是非常简单易行的。

Harbor是一个基于Apache协议的开源软件,主要开发语言为go,harbor本身也是基于docker镜像,使用docker-compose来进行编排部署。

https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-online-installer-v2.6.0.tgz

Docker-compose

项目地址: https://github.com/docker/compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用docker-compose up,就可以从YML 文件配置中创建并启动所有服务。

# Docker-compose下载(新版本docker集成compose,无需安装)
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose# 查看docker-compose版本
docker-compose -v
#新版本docker compose使用方法
[root@node-11 ~] docker compose version 

创建 Harbor 服务证书
[root@node-10 ssl] mkdir /etc/pki/CA/harbor && cd /etc/pki/CA/harbor
openssl genrsa -out harbor.key 2048

# 为harbor服务器生成证书签署请求
openssl req -new -key harbor.key -out harbor.csr

# 使用私有CA根据请求签发服务端证书
openssl ca -in harbor.csr -keyfile /etc/pki/CA/private/cakey.pem -cert \
/etc/pki/CA/cacert.pem -days 3650 -out harbor.crt

# 拷贝证书到cong12
scp -r /etc/pki/CA/harbor/ 192.168.137.111:/etc/pki/CA

部署 Harbor

解压软件包

tar -zxvf harbor-online-installer-v2.6.0.tgz -C /usr/local/
ls /usr/local/harbor/

配置文件harbor.yml

cd /usr/local/harbor/
mv harbor.yml.tmpl harbor.yml 
vim harbor.yml 
--------------------- harbor.yml -----------------------
hostname: 192.168.137.111
https:# https port for harbor, default is 443port: 443# The path of cert and key files for nginxcertificate: /etc/pki/CA/harbor/harbor.crtprivate_key: /etc/pki/CA/harbor/harbor.key
--------------------- harbor.yml -----------------------

安装Harbor仓库

./install.sh

# 查看Harbor依赖的镜像及其健康状况
docker-compose -f docker-compose.yml ps

登录Harbor并创建羡慕:账户为admin ,密码为 Harbor12345,该密码的初始配置在harbor.yml文件中

点击镜像仓库可以看到推送命令,这里包含有docker以及k8s的Helm

配置 Nginx 代理 Harbor

添加harbor.conf:[root@node-10 ~] vim /etc/nginx/conf.d/harbor.conf

server {listen       443 ssl http2;listen       [::]:443 ssl http2;server_name  harbor.test.com;ssl_certificate /etc/pki/CA/harbor/harbor.crt;ssl_certificate_key /etc/pki/CA/harbor/harbor.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;	ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {proxy_pass https://192.168.137.111;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forward-Proto $scheme;proxy_connect_timeout 900;proxy_read_timeout 900;proxy_send_timeout 900;}# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}    
}
---------------------------------------------# 重载 nginx
nginx -s reload

修改hosts:vim /etc/hosts

192.168.137.110 harbor.test.com

添加harbor仓库:vim /etc/docker/daemon.json

{"insecure-registries": ["192.168.137.111:5000","https://harbor.test.com"],"registry-mirrors": ["https://0u0do0ns.mirror.aliyuncs.com"]
}-----------------------------------------------
# 重启docker
[root@node-10 ~] systemctl restart docker

上传镜像

推送镜像

# 登陆harbor
[root@node-10 ~] docker login https://harbor.test.com

# 推送镜像
[root@node-10 ~] docker tag busybox:latest harbor.test.com/docker/busybox:v2
[root@node-10 ~] docker push harbor.test.com/docker/busybox:v2

拉取镜像

docker pull harbor.test.com/docker/busybox:v1

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

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

相关文章

MATLAB | R2024a更新了哪些好玩的东西?

Hey 好久不见&#xff0c;大家一看三月中下旬这个时间节点也应该能猜到这篇更新什么内容&#xff0c;没错MATLAB R2024a正式版发布啦啦拉拉&#xff0c;直接来看看有啥我认为比较有意思的更新点吧&#xff1a; 1 极坐标表达式绘制 将会使用使用fpolarplot函数来替换ezpolar&a…

【创建QT项目】使用向导创建

打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application&#xff0c; 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;按照向导进行下一步&#x…

JVM—内存可见性

什么是可见性 可见性&#xff1a;一个线程对共享变量值的修改,能够及时地被其他线程看到共享变量&#xff1a;如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 Java内存模型(JMM) Java内存模型(Java Memory Model)描述了Java程序中各种…

【工具使用】VScode如何设置中文环境

操作步骤 1.1 安装中文插件 1.2 设置为中文&#xff0c;然后重启 按照插件的使用方法介绍设置中文&#xff1a; 按下“CtrlShiftP”组合键以显示“命令面板”&#xff1a; 输入“dispaly”&#xff0c;选择“Configure Display Language”&#xff1a; 选择“中文简体” …

景泓达智能科技邀您参观2024第七届燕窝及天然滋补品博览会

2024第七届世界燕窝及天然滋补品博览会 2024年8月7-9日 | 上海新国际博览中心 同期举办&#xff1a;第三届世界滋补产业生态大会暨交流晚宴/颁奖典礼 2024第九届酵素、益生产品博览会 2024上海国际月子健康博览会 2024上海燕博会经历了7年的发展与资源积累&#xff0c;已成…

Linux编程6.1 线程及并发控制-线程与进程

1、概述 线程与进程非常像&#xff1a;进程线程*n(n>1)资源 线程&#xff1a;执行单元->运行 就绪 阻塞 线程状态 多线程&#xff0c;一个进程中&#xff0c;有多个线程在运行->虚拟内存不是镜像&#xff0c;而是共享 2、线程 2.1线程分类 1)、线程按照其调用者可…

JavaParser 手动安装和配置

目录 前言 一、安装 Maven 工具 1.1 Maven 软件的下载 1.2 Maven 软件的安装 1.3 Maven 环境变量配置 1.4 通过命令检查 Maven 版本 二、配置 Maven 仓库 2.1 修改仓库目录 2.2 添加国内镜像 三、从 Github 下载 JavaParser 3.1 下载并解压 JavaParser 3.2 从路径打…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布,并上传镜像到阿里镜像私仓

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布&#xff0c;并上传镜像到阿里镜像私仓一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、…

每日一题 --- 数组中的第 K 个最大元素[力扣][Go]

数组中的第 K 个最大元素 题目&#xff1a;数组中的第 K 个最大元素 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1…

数据挖掘终篇!一文学习模型融合!从加权融合到stacking, boosting

模型融合&#xff1a;通过融合多个不同的模型&#xff0c;可能提升机器学习的性能。这一方法在各种机器学习比赛中广泛应用&#xff0c; 也是在比赛的攻坚时刻冲刺Top的关键。而融合模型往往又可以从模型结果&#xff0c;模型自身&#xff0c;样本集等不同的角度进行融合。 数据…

【理解机器学习算法】之Clustering算法(Agglomerative Clustering)

聚合聚类(Agglomerative Clustering)是一种层次聚类算法&#xff0c;通过逐步合并或“聚集”它们来构建嵌套聚类。这种方法采用自底向上的方式构建聚类层次&#xff1a;它从将每个数据点作为单个聚类开始&#xff0c;然后迭代合并最接近的聚类对&#xff0c;直到所有数据点合并…

基于tcp协议的网络通信(将服务端守护进程化)

目录 守护进程化 引入 介绍 如何实现 思路 接口 -- setsid 注意点 实现代码 daemon.hpp log.hpp 运行情况 前情提要 -- 前后台任务介绍(区别命令),sessionsid介绍,session退出后的情况(nuhup,终端进程控制组),任务进程组概念,任务与进程组的关系,-bash介绍-CSDN博客…

基于SSM框架的酒店预订系统

基于SSM框架的酒店预订系统的设计与实现 摘要 当今世界的互联网信息技术飞速发展&#xff0c;网络化的工作模式已经几乎覆盖到各个工作领域中的业务内&#xff0c;人们的日常生活也渐渐离不开互联网。因此&#xff0c;在当下全国各处的酒店都开始构建起了自己的网络预订系统。…

vue的优缺点有那些 组件常用的有那些?

优点&#xff1a; 组件化开发&#xff0c;提升效率&#xff0c;方便复用&#xff0c;便于协同开发单页面路由易于结合其他的第三方库丰富的api方法轻量高效,虚拟DOMMVVM&#xff0c;数据驱动视图轻量级的框架 缺点&#xff1a; 缺少高阶教程和文档生态环境不如angular和re…

【PHP + 代码审计】数组基础

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

OpenHarmony系统服务的核心组件

简介 samgr组件是OpenHarmony的核心组件&#xff0c;提供OpenHarmony系统服务启动、注册、查询等功能。 系统架构 图 1 系统服务管理系统架构图 目录 /foundation/distributedschedule ├── samgr │ ├── bundle.json # 部件描述及编译文件 │ ├── frameworks…

Git的配置与简单的使用

Git概述 Git的工作流程 Git的配置与简单的使用 配置用户信息 配置用户名以及邮箱 邮箱尽量自己能够记住&#xff0c;以后会用到 git config --global user.name "Your name" git config --global user.email "Your email"查看用户信息 git config --…

警务数据仓库的实现

目录 一、SQL Server 2008 R2&#xff08;一&#xff09;SQL Server 的服务功能&#xff08;二&#xff09;SQL Server Management Studio&#xff08;三&#xff09;Microsoft Visual Studio 二、创建集成服务项目三、配置“旅馆_ETL”数据流任务四、配置“人员_ETL”数据流任…

ORA-29548

ORA-29548: Java system class reported: release of Java system classes in the database ( being determined) does not match that of the oracle executable (11.2.0.4.221018) 执行 java 报错 create or replace and compile java source named preg_replace aspackage…

深入解析MySQL的四种打开方式

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …