如何创建一个私有的Docker仓库

2023-11-19

目录

一、在docker的官方网站中直接创建

二、搭建自己本地的仓库

2.1、搭建自己的本地仓库

2.2、为本地镜像添加认证

2.2.1、添加证书加密功能

        2.2.2、添加用户登录认证

三、部署Harbor仓库


        总所周知,Docker的强大主要是依赖于其仓库中镜像的存在,公用仓库不用说,那如何创建一个私有的个人仓库呢,本片文章小编会从三个方面进行简单的阐述。

一、在docker的官方网站中直接创建

       首先在官方网址(https://hub.docker.com/)中,创建属于自己的账户,在Repository中创建自己的仓库。

图 1 在官网中创建自己的仓库

 根据所需仓库要求,根据上述选项创建在官网自己的镜像仓库。

        远程登录自己的镜像仓库,并进行相应的操作(具体操作在本地搭建私有仓库时进行讲解)。

图 2 登录自己的doker官方仓库

二、搭建自己本地的仓库

2.1、搭建自己的本地仓库

        在Docker的官方镜像中已经给我们提供了自己搭建仓库的镜像,我们只需要下载即可:

##获取官方镜像
[root@server1 ~]# docker pull registry        
[root@server1 ~]# docker images registry

##以该镜像为基础,启动容器
[root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry

##上传镜像(需要先更改镜像名称,以指定上传的仓库)
[root@server1 ~]# docker tag webserver:latest localhost:5000/webservr:latest
[root@server1 ~]# docker push localhost:5000/webservr  ##上传

##查看挂载的地址
[root@server1 ~]# tree /opt/registry

##查看所挂载的镜像
[root@server1 ~]# curl localhost:5000/v2/_catalog
图 3 搭建本地仓库

图 4 给本地仓库上传镜像

         上述过程就是我们简单的搭建了一个个人本地私有仓库,可以进行镜像的上传和获取!

[注] docker在镜像的上传和下载过程中默认的方式为:HTTPS。在上述测试过程中,我们可以临时将本地的仓库设为不安全的通信方式:

##设定registry为不安全的方式
[root@server1 docker]# /etc/docker/daemon.json
##文件内容
{
  "insecure-registries" : ["myregistrydomain.com:5000"]  ##myregistrydomain.com表明仓库的地址
}
图 5 使用不安全方式给本地仓库上传镜像

2.2、为本地镜像添加认证

2.2.1、添加证书加密功能

##官方文档:https://docs.docker.com/registry/insecure/

##创建自签名证书
[root@server1 ~]# mkdir -p certs

[root@server1 ~]#  openssl req  -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.key    -x509 -days 365 -out certs/westos.crt

##签名填写
##在填写签名是,需要注意域名的填写,需要和认证保持一致

##创建成功后,重新搭建容器registry(官方文档:https://docs.docker.com/registry/deploying/)
[root@server1 ~]# docker run -d --name registry  -v "$(pwd)"/certs:/certs  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.key -v /op/registry:/var/lib/registry  -p 443:443 registry

##查看存在的镜像
[root@server1 ~]# curl -k https://localhost/v2/busybox/tags/list

##上传镜像
#把生成的证书传到docker的配置文件中
[root@server1 ~]# mkdir -p /etc/docker/certs/reg.westos.org/
[root@server1 ~]# cp ~/certs/wetsos.org.crt /etc/docker/certs/reg.westos.org/ca.crt

##本地传输
[root@server1 ~]# docker push localhost:443/webservr
[root@server1 ~]# docker push reg.westos.org/webservr

##远程传输
#复制证书文件
[root@server1 ~]# scp /root/certs/westos.org.crt server:/etc/docker/certs/reg.westos.org/ca.crt

#远程传输(需要提前更改好标签,做好地址解析)
[root@server2 ~]# docker push reg.westos.org/webserver:latest
图 6 生成CA认证证书

图 7 添加证书启动镜像

图 8 使用认证的方式进行上传镜像

 2.2.2、添加用户登录认证

##官方文档:https://docs.docker.com/registry/deploying/

##安装htpasswd工具
[root@server1 ~]# yum install -y httpd-tools

##生成用户加密文件
[root@server1 ~]# mkdir auth
[root@server1 ~]# htpasswd -Bc auth/htpasswd admin     ## B 表示强制认证
[root@server1 ~]# htpasswd -B auth/htpasswd linux      ## c 表示第一次创建

##重现启动容器(使用镜像重新生成)

[root@server1 ~]# docker rm -f registry
[root@server1 ~]# docker run -d --name registry -v /opt/registry:/var/lib/registry -p 443:443 -v  "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd"  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

##登录仓库,进行文件上传
[root@server1 ~]# docker login reg.westos.org
#远程登录:保证网络畅通即可(需要注意的是这里启动时我们采用的是加密的传输方式,所以需要先将证书复制到docker文件中(/etc/docker/certs.d/reg.westos.org/ca.crt))
[root@server2 ~]# docker login reg.westos.org

图 9 使用thpasswd创建登录用户

  

图  10 在CA认证的基础上添加用户认证

​三、部署Harbor仓库

##资源下载:https://github.com/goharbor/harbor/releases

##解压安装包
[root@server1 app]# tar zxf harbor-offline-installer-v2.3.2.tgz 

##安装docker-compose文件
[root@server1 harbor]# cat /usr/local/bin/docker-compose-linux-x86_64 >> /usr/local/bin/docker-compose
[root@server1 harbor]# chmod +x /usr/local/bin/docker-compose
[root@server1 harbor]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose


##编辑配置文件
[root@server1 harbor]#  vim harbor.yml.tmpl

##运行
[root@server1 harbor]#  ./install/sh

[root@server1 harbor]# ./install.sh --with-notary --with-chartmuseum --with-trivy


 【注】上述安装过程中可能会出现安装包的依赖性,此时需要安装docker-compose管理工具:

图 11初步安装harbor

图 12 修改harbor的初始配置文件

 ​

图 13 修改harbor的配置文件

 ​ 

         如果注释证书,此时需要将--insecure-reghistry添加到客户端的Docker的守护进程中,默认文件夹位置为:/etc/docker/daemo.json

        内容:

{

  "registry-mirrors": ["https://reg.westos.org"],    ####换成自己的镜像仓库地址,下载时也会首先从本地下载

  "insecure-registries" : ["172.25.21.5:80", "0.0.0.0"]

}

配置完成后需要重启服务:

systemctl restart docker
docker-compose down -v
docker-compose up -d

 启动成功后,自动产生docker-compose.yml的配置文件

图 14 成功启动后的harbor配置目录

  启动后的容器:

图 15 harbor所启动的容器

  在网页登录:

图 16 harbor的图形化登录界面

使用docker-compose命令查看启动的容器组 :

图 17 docer=compose的管理命令

 ​ 

##harbor的使用,通常情况下使用docker-compose进行管理
docker-compose down 关闭管理组中的的所有容器
docker-compose stop 临时停止容器组中的所有容器
docker-compose start 重现启动容器组中的所有容器

图 18 docer=compose的管理命令

图 19 docer=compose的管理命令

 根据需求重新安装Harbor:

图 20 添加harbor的镜像扫描的额外功能,重新启动

         上述则是harbor的安装,使用过程则是分为图形界面的使用,以及在终端上的仓库上传,在上传时,首先要做的就是登录此时登录的仓库为:reg.westos.org,同时必须设置标签(这里做签名),在获取镜像时需要写入全部名称(eg:docker pull reg.westos.org/westos/ubuntu)。其他操作和私有仓库相同,这里不再做赘述,只进行签名认证的阐述。

##镜像签名
##部署根证书
/etc/docker/certs.d/reg.westos.org/ca/crt
~/.docker/tls/reg.westos.org:4443/ca.crt

##启用docker内容信任
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443

##长传镜像
docker push reg.westos.org/library/nginx:lattest

##过程会生成两个密钥,包括根root key和仓库key

##删除签名
export DOCKER_CONTENT_TRUST=0
docker trust reovke reg.westos.org/library/nginx:latest

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建一个私有的Docker仓库 的相关文章

随机推荐

  • C++ 获取文件版本号的代码

    Test cpp 定义控制台应用程序的入口点 include stdafx h include
  • HTML连载85-添加选择圆点

    一 添加选择圆点 先上个半成品 div class top div class top in div class top left div div div
  • 云计算——ACA学习 云计算核心技术

    作者简介 一名云计算网络运维人员 每天分享网络与运维的技术与干货 座右铭 低头赶路 敬事如仪 个人主页 网络豆的主页 写在前面 本系列将会持续更新云计算阿里云ACA的学习 了解云计算及网络安全相关从业的基础知识 以及阿里云产品的使用部署 提
  • 2023智慧城区统一运营白皮书

    本白皮书讨论的 智慧城区 概念 是围绕多种服务业态 特定区域的智慧统一运营管理服务 我们从管理属性 服务业态 管理面积 智慧化程度4个方面对智慧城区分析 把以企业为主导 政府相关部门 社会组织 城区居民等多方协同治理 通过跨业态 跨空间的智
  • matlab中产生随机点,如何在matlab中制作圆形并在里面生成随机点

    这里的另一种选择 Set parameters R 0 5 radius C 3 4 center x y N 50 number of points inside circle generate circle boundary t lin
  • MATLAB2012a下载、安装及破解方法

    下载地址如下 http yunpan cn cyjGMugpDGsse 提取码 32e8 安装步骤如下 1 解压压缩包 打开文件夹内的setup exe 2 选择 不使用Internet安装 3 接受许可协议条款 点击 是 4 选择 我已有
  • Python,燃气火焰检测主要步骤!

    问题描述 在现有的基础上 燃气火焰的检测主要是基于火焰颜色特征 由于燃气火焰不同于普通火焰 其中蓝色分量较多 一般的检测方法准确度不够 故采取其他方法来检测火焰 下面主要介绍4个步骤的思路和主要的 python 代码 解决方案 1 背景差分
  • Python和Matplotlib电磁一维二维三维模拟

    自由空间中传播的脉冲一维模拟 自由空间的时间相关麦克斯韦旋度方程为 E
  • vue3中的readonly

    接受一个对象 不论是响应式还是普通的 或是一个 ref 返回一个原值的只读代理 只读代理是深层的 对任何嵌套属性的访问都将是只读的 它的 ref 解包行为与 reactive 相同 但解包得到的值是只读的 类型 function reado
  • VS2019版本下载详细介绍~

    一 下载地址 第一种方法 VS官网 Visual Studio 2022 IDE 适用于软件开发人员的编程工具 因为官网现在主推2022版本的VS 所以需要选择老旧版本下载 点击下载按钮 向下滑动 该方法需要登录微软账户 才能选择老旧版本的
  • sort的用法

    sort的用法 详细见cplusplus 1 默认的sort函数是按升序排 对应于1 sort a a n 两个参数分别为待排序数组的首地址和尾地址 2 可以自己写一个cmp函数 按特定意图进行排序 对应于2 例如 sort algorit
  • SOIL在VS2015搭建

    这是SOIL库的主页 http www lonesock net soil html 下载好解压 进project vc9 用Vs打开项目 编译记得用release 如果用的OPengl是64位的就用64位编译 不然生成的lib不能用 运行
  • 积分图像(Integral Image)和积分直方图

    积分图像文章推荐 http blog sina com cn s blog 4cb0b54301017wwo html https blog csdn net u010807846 article details 50354000 参考文献
  • vue-router的routes中name属性作用详解

    我们常用vue js和vue router来创建单页应用 vue router能很方便的管理所有的单页组件 我们在定义每个路由的时候会有一个name的属性 如下面代码 通常我们不定义这个属性发现也没有任何问题 那么这个name到底有什么用呢
  • R语言绘图:实现数据点的线性拟合,进行显著性分析(R-squared、p-value)、添加公式到图像

    最近在做关于数据点线性拟合相关的研究 感觉R语言在这方面很方便 而且生成的图片很漂亮 所以在这里和大家分享一下代码 这是别人所绘制的拟合图像 很漂亮 自己也用iris鸢尾花数据集进行一个线性拟合看看 拟合线性模型最基本的函数就是lm 格式为
  • 进阶java大师之路,泛型在hashmap上的灵活运用

    由于 公司的试用的框架上 存在大量的hashmap的创建 产生大量的I O 以及内存的消耗 所以 抽了点时间 看书 effective java 这本书 同时 也从项目的作者 framework 上学习 吸取 最终写出了 符合生产的方案 存
  • 【FreeRTOS】Arduino开发STM32

    0 开发环境 工具 Vscode platformio arduino STM32F103C8T6 USB TTL 引脚连接 STM32直接设置为烧录模式即可 烧录完成后会自动运行程序 1 点灯加串口输出调试 注意事项 每次上传程序前 需要
  • krpano 获取当前场景名称

    var scene krpano get xml scene copy scene name scene get xml scene name set scene name get scene get xml scene name copy
  • element-ui中$confirm弹出框的确定和取消按钮互换位置

    element ui中 confirm弹出框的确定和取消按钮互换位置 1 定位元素 2 找到元素class 通过flex布局 进行位置更换 3 app vue中 进行全局修改 确认窗 取消确认按钮位置更换 el message box wr
  • 如何创建一个私有的Docker仓库

    目录 一 在docker的官方网站中直接创建 二 搭建自己本地的仓库 2 1 搭建自己的本地仓库 2 2 为本地镜像添加认证 2 2 1 添加证书加密功能 2 2 2 添加用户登录认证 三 部署Harbor仓库 总所周知 Docker的强大