Docker 镜像仓库

目录

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.mzph.cn/news/765055.shtml

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

相关文章

Airgorah:一款功能强大的WiFi安全审计工具

关于Airgorah Airgorah是一款功能强大的WiFi安全审计工具&#xff0c;该工具可以轻松发现和识别连接到无线接入点的客户端&#xff0c;并对特定的客户端执行身份验证攻击测试&#xff0c;捕捉WPA握手包&#xff0c;并尝试破解接入点的密码。在该工具的帮助下&#xff0c;广大研…

在Ubuntu上使用Script命令捕获命令与其输出

在Ubuntu上使用Script命令捕获命令与其输出 起初&#xff0c;是为了记录软件的安装过程&#xff0c;就在想有没有简单高效的记录方法&#xff0c;之后就找到了script命令。 使用 script命令&#xff0c;可以很容易地记录下你在终端里所有的操作与输出&#xff0c;非常适合用来…

是时候来唠一唠synchronized关键字了,Java多线程的必问考点!

写在开头 在之前的博文中&#xff0c;我们介绍了volatile关键字&#xff0c;Java中的锁以及锁的分类&#xff0c;今天我们花5分钟时间&#xff0c;一起学习一下另一个关键字&#xff1a;synchronized。 synchronized是什么&#xff1f; 首先synchronized是Java中的一个关键字…

Tensorflow 2.0 常见函数用法(一)

文章目录 0. 基础用法1. tf.cast2. tf.keras.layers.Dense3. tf.variable_scope4. tf.squeeze5. tf.math.multiply 0. 基础用法 Tensorflow 的用法不定期更新遇到的一些用法&#xff0c;之前已经包含了基础用法参考这里 &#xff0c;具体包含如下图的方法&#xff1a; 本文介…

dbscan算法实现鸢尾花聚类(python实现)

DBscan算法原理 : dbscan算法-CSDN博客 法一(调库) : 直接调库 : import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.cluster import DBSCAN from sklearn.decomposition import PCA from sklearn.discriminant_analysis …

leetcode 225.用队列实现栈 JAVA

题目 思路 1.一种是用双端队列&#xff08;Deque&#xff09;&#xff0c;直接就可以调用很多现成的方法&#xff0c;非常方便。 2.另一种是用普通的队列&#xff08;Queue&#xff09;,要实现栈的先入后出&#xff0c;可以将最后一个元素的前面所有元素出队&#xff0c;然后…

【Flask】Flask项目结构初识

1.前提准备 Python版本 # python 3.8.0 # 查看Python版本 python --version 安装第三方 Flask pip install flask # 如果安装失败&#xff0c;可以使用 -i&#xff0c;指定使用国内镜像源 # 清华镜像源&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 检查 Flask 是…

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述…

Qt如何直接处理系统事件(比如鼠标事件),而不是post事件

#include <QtGui/5.15.2/QtGui/qpa/qwindowsysteminterface.h> // 方便调试事件 QWindowSystemInterface::setSynchronousWindowSystemEvents(true); 直接再 qWindowsWndProc函数中处理 通常情况: 事件被放到一个队列中

基于springboot+vue+Mysql的垃圾分类网站

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

JavaScript高级(十)----JavaScript中的类【重述原型链】!

类 在JavaScript其实本来没有类的概念&#xff0c;哪怕是ES5以后的class&#xff0c;严格意义上来说也只是构造函数的语法糖&#xff0c;之所以喜欢称之为类&#xff0c;因为JavaScript也可以面向对象开发。 类的声明 class Person {}function Person1() {}// 上面两种写法本…

Milvus 向量数据库介绍及使用

一、Milvus 介绍及安装 Milvus 于 2019 年创建&#xff0c;其目标只有一个&#xff1a;存储、索引和管理由深度神经网络和其他机器学习 (ML) 模型生成的大量嵌入向量。它具备高可用、高性能、易拓展的特点&#xff0c;用于海量向量数据的实时召回。 作为专门为处理输入向量查…

Linux:权限的概念与理解

目录 1. Linux权限的概念 2. Linux权限管理 01.文件访问者的分类 02.文件类型和访问权限 03.文件权限值的表示方法 04. 文件访问权限的相关设置方法 3. 使用 sudo分配权限 4. 目录的权限 ---------- 权限 用户角色(具体的人) 文件权限属性 ---------- 1. Linux权限的…

代码随想录--排序算法

912.排序数组 快速排序 思路&#xff1a; 1. 设置一个pivot2. 将小于nums[pivot]的值 放在左边3. 将 大于nums[pivot]的值 放在 右边4. 递归调用注意&#xff1a;必须先比较nums[high] 与pivot 代码&#xff1a; class Solution {int partition(vector<int>&nu…

无人机采集图像的相关知识

1.飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计&#xff0c;软件可以自动计算相机覆盖和图像重叠情况。比如ArduPilot (ArduPilot - Versatile, Trusted, Open) 和UgCS (http://www.ugcs.com)是两个飞行任务规划软件&#xff0c;可以适用大多数无人机系统。 2.图…

QT作业。。

1.使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;密码是否为&q…

【计算机视觉】Gaussian Splatting源码解读补充(一)

本文旨在补充gwpscut创作的博文学习笔记之——3D Gaussian Splatting源码解读。 Gaussian Splatting Github地址&#xff1a;https://github.com/graphdeco-inria/gaussian-splatting 论文地址&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gauss…

mac 用electron-builder打包,如何切换到notarytool

背景&#xff1a;altool已经被遗弃了&#xff0c;我们必须要使用notarytool进行打包,如何从altool切换到notarytool 在打包的配置中afterSign执行的js中 加入teamId和tool teamId在你的开发者账号中可以获取到

二、SpringBoot3 配置文件

本章概要 统一配置管理概述属性配置文件使用YAML 配置文件使用批量配置文件注入多环境配置和使用 2.1 统一配置管理概述 SpringBoot工程下&#xff0c;进行统一的配置管理&#xff0c;你想设置的任何参数&#xff08;端口号、项目根路径、数据库连接信息等等)都集中到一个固定…

docker镜像复制与常见命令

一、前言 最近通过阿里的镜像仓库远程拉取镜像&#xff0c;发现以前的版本不见了&#xff0c;拉取了最新的镜像&#xff0c;有发现版本不配问题。那么想使用老版本的镜像那就要从别的环境获取。于是就需要进行离线镜像复制&#xff0c;打包&#xff0c;上传&#xff0c;重新导入…