Docker 镜像仓库

news2024/11/18 12:31:47

目录

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 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /etc/pki/CA/harbor/harbor.crt
  private_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.coloradmin.cn/o/1540481.html

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

相关文章

哈希表(c++)

1、介绍 哈希表&#xff0c;也称为散列表&#xff0c;是一种非常高效的数据结构。它通过将键&#xff08;Key&#xff09;映射到数组的特定位置来快速查找、插入和删除数据。这个映射过程由哈希函数&#xff08;Hash Function&#xff09;完成&#xff0c;该函数将键转化为一个…

基于Springboot的牙科就诊管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的牙科就诊管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍: 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c…

unity编辑器扩展高级用法

在PropertyDrawer中&#xff0c;您不能使用来自GUILayout或EditorGUILayout的自动布局API&#xff0c;而只能使用来自GUI和EditorGUI的绝对Rect API始终传递相应的起始位置和维度。 你需要 计算显示嵌套内容所需的总高度将此高度添加到public override float GetPropertyHeig…

P6维护:P6 数据库迁移Step by Step

前言 根据大家的近期给的提议&#xff0c;这里简单介绍如何迁移P6数据库&#xff0c;场景选取为从将P6从ORACLE迁移到SQLServer。 Oracle Primavera P6 PPM 以及 EPPM 均有其自带的migrate工具完成数据库迁移&#xff0c;整个操作也较为傻瓜式&#xff0c;只要有基本的数据库…

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

文章目录 前期准备&#xff1a;注册高德开发者并创建 key登录控制台创建 key获取 key 和密钥 创建项目创建JS API Loader配置权限创建定义创建模型创建地图组件创建交互逻辑 项目地址 地图组件在手机App中常用地理相关业务&#xff0c;如查看线下门店&#xff0c;设置导航&…

【MySQL】深入解析事务与MVCC

文章目录 1、事务四大特性1.1、原子性1.2、一致性1.3、隔离性1.4、持久性 2、并发事务带来问题2.1、脏读2.2、不可重复读2.3、幻读 3、事务隔离级别3.1、读未提交3.2、读已提交3.3、可重复读3.4、串行化 4、MVCC4.1、InnoDB隐藏字段4.2、undo log版本链4.3、ReadView4.4、MVCC工…

『K8S 入门』三:资源调度

『K8S 入门』三&#xff1a;资源调度 一、Label 和 Selector 可以通过 Selector 基于 Label 匹配需要的资源 Label 标签 配置文件中&#xff08;metadata.labels&#xff09;配置 metadata: # Pod相关的元数据&#xff0c;用于描述Pod的数据name: nginx-demo #Pod的名称lab…

阅读笔记(ICIP2023)Rectangular-Output Image Stitching

“矩形输出”图像拼接 Zhou, H., Zhu, Y., Lv, X., Liu, Q., & Zhang, S. (2023, October). Rectangular-Output Image Stitching. In 2023 IEEE International Conference on Image Processing (ICIP) (pp. 2800-2804). IEEE. 0. 摘要 图像拼接的目的是将两幅视场重叠的…

GDC期间LayaAir启动全球化战略

3 月 18 日至 3 月 22 日&#xff0c;一年一度的游戏开发者大会&#xff08;GDC&#xff09;在美国旧金山举行。在此期间&#xff0c;Layabox宣布LayaAir引擎启动全球扩张战略&#xff0c;这标志着引擎将步入快速发展的新阶段。此举旨在利用公司先进的3D引擎技术&#xff0c;将…

力扣每日一题 2024/3/23 统计桌面上的不同数字

题目描述 用例说明 思路讲解 给定整数n&#xff0c;找出循环十亿天后桌上的数字。可以先通过一天来找找规律。 第一天 n%i1 &#xff08;1<i<n&#xff09;只有n-1符合.加入桌面 第二天(n-1)%i1 &#xff08;1<i<n-1&#xff09;只有n-2符合 加入桌面 依次类推…

RHEL9部署Docker环境

华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功…

【LabVIEW FPGA入门】FPGA 存储器(Memory)

可以使用内存项将数据存储在FPGA块内存中。内存项以2kb为倍数引用FPGA目标上的块内存。每个内存项引用一个单独的地址或地址块&#xff0c;您可以使用内存项访问FPGA上的所有可用内存。如果需要随机访问存储的数据&#xff0c;请使用内存项。 内存项不消耗FPGA上的逻辑资源&…

stm32平衡车

目录 一.所需材料 二.PID算法&#xff08;简单说明&#xff09; 直立环 速度环 串级PID 三.使用到的外设 1.定时器输出比较-PWM 2.定时器编码器模式 3.编码器读取速度 4.电机驱动函数 5.外部中断 四、小车 调试 一.所需材料 1.陀螺仪MPU6050--读取三轴的加速度…

C++类和对象进阶

CSDN成就一亿技术人 C类的6个默认成员函数(构造)-CSDN博客https://blog.csdn.net/lh11223326/article/details/136917667?spm1001.2014.3001.5502 目录 一.再谈构造函数 1.构造函数体赋值&#xff1a; 在创建对象时&am…

# Maven Bom 的使用

Maven Bom 的使用 文章目录 Maven Bom 的使用概述BOM特点优点缺点 MavenMaven 安装安装步骤settingx.ml常用仓库地址Idea 使用maven常见坑 SpringBoot 项目Bom使用案例项目结构主项目 zerocode-back-servezc-dependency&#xff08;第三方jar管理&#xff09;子模块zc-serve子模…

Qt creator构建DLL库

文章目录 一、构建DLL库二、隐式调用DLL库 一、构建DLL库 Qt creator创建DLL项目。 实现功能函数。 运行代码&#xff0c;debug目录下会有.dll和.lib文件。 二、隐式调用DLL库 QT新建控制台项目。将.lib文件和与之关联的头文件赋值到项目文件夹。 3. 添加头文件和外部依赖库…

目标检测——YOLOR算法解读

论文&#xff1a;YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks 作者&#xff1a;Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2105.04206 代码&#xff1a;https://github.com/WongKinYiu/yolo…

Python界面库Flet(1)介绍和快速使用

Python界面库Flet(1)快速上手使用 Author&#xff1a;Once Day Date&#xff1a;2024年3月19日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Pyt…

利用sealos安装k8s集群

1. 环境准备 准备三台干净&#xff08;未安装过k8s环境&#xff09;的虚拟机 # 所有的主机都要配置主机名和域名映射 # 设置主机名 hostnamectl set-hostname k8s-master01 # vim /etc/hosts 192.168.59.201 k8s-master01 192.168.59.202 k8s-worker01 192.168.59.203 k8…

飞鸟写作能用吗 #笔记#笔记

飞鸟写作是一个强大的论文写作工具&#xff0c;不仅可以帮助用户高效、准确地完成论文写作&#xff0c;还能帮助用户对论文进行查重和降重。那么&#xff0c;飞鸟写作能用吗&#xff1f;答案是肯定的&#xff0c;飞鸟写作非常好用&#xff01; 首先&#xff0c;飞鸟写作拥有强大…