CICD自动化构建基础建设 – 搭建Docker hub 私有化仓库

这是我参与更文挑战的第4天,活动详情查看:更文挑战

一、前言

关于私有镜像仓库的搭建,教程很多,但大都是最简单的部署,忽略了很多细节。

而企业级别的仓库,必要要有很多特定的需求,比如对镜像的管理,仓库大小的扩容,对私有镜像和公共镜像进行区分,权限管理等。

所以特意学习了下公司内部的私有仓库部署原理,搞了一台虚拟机实际操作一遍,记录下过程。

我司的内部仓库是通过Docker Registry + services + UI web实现的,由于个人没有精力去再写个服务和前端web,所以了解下架构和原理即可。

二、部署方式区别

1、这里主要实践的两种方式一种是通过Docker Registry,特点如下

  • Registry也是开源的软件,没有UI界面,只提供了底层简单对镜像进行操作的API
  • UI界面需要自行开发,可定制性高,部署简单。

2、然后找到一个开源的镜像仓库harbor,实际部署一下。

  • harbor是一款成熟的开源软件,直接集成了UI界面、权限、日志等功能,还有对应的API
  • 通过Docker compose部署,部署方式简单,定期更新维护。

三、Docker Registry

如果我们不需要那么多的功能,或者需要需要实现自己定制化需求,可以采用这种方式,可以在Docker Registry实现自己的需求。

1、架构布局

image.png

1、Docker Registry作为基础能力,提供操作Docker仓库的Api,镜像仓库地址部署通过云服务商的文件系统,利用云盘的可扩展性,随镜像文件增加,对云盘进行扩容

2、开发前端web,接入sso获取登陆用户信息

3、开发镜像管理后端服务,使用mysql作为数据库,开发具体权限、镜像管理等需求,通过请求Registry获取对镜像仓库进行操作

4、用户拉取镜像,通过Registry API即可

docker pull [your domain]/nginx:latest
复制代码

2、具体实现

下面虚拟机、账号密码,测试完毕删除,可以替换成自己的

1、下载、安装Docker,查看版本号

[root@10-8-148-121 ~]# docker --version
Docker version 20.10.7, build f0df350
复制代码

2、安装

docker run -d \
    -p 80:5000 \
    -v /opt/data/registry:/var/lib/registry \
    registry
复制代码
  • 1、使用宿主机的80端口作为镜像仓库的端口
  • 2、/opt/data/registry作为镜像仓库的存储地址,这里可以挂载云服务商的文件系统

这样就部署了私有镜像仓库

3、推送镜像到仓库

docker login 129.227.143.240 -u [account] -p [password]

docker pull nginx:latest

docker tag nginx:latest 129.227.143.240/test/nginx:latest

// 推送远程仓库
docker push 129.227.143.240/test/nginx:latest

// 拉取
docker pull 129.227.143.240/test/nginx:latest
复制代码

image.png

7、相关API

1、拉取镜像仓库列表
curl 129.227.143.240/v2/_catalog

2、拉取景象标签列表
curl 129.227.143.240/v2/test/nginx/tags/list
复制代码

image.png

四、Harbor

1、部署完成后的,web长这个样子

image.png

2、以下是部署机器要求规格:

Resource Minimum Recommended
CPU 2 CPU 4 CPU
Mem 4 GB 8 GB
Disk 40 GB 160 GB

软件要求:

Software Version Description
Docker engine Version 17.06.0-ce+ or higher For installation instructions, see Engine documentation
Docker Compose Version 1.18.0 or higher For installation instructions, see Docker Compose documentation
Openssl Latest is preferred Used to generate certificate and keys for Harbor

Openssl和443端口都是为了https服务的,这里我们实践过程中用http就可以了,所以不做要求,开启80端口。

3、申请机器、配置机器

image.png
申请测试机器,2CPU 4G Mem Disk 80G,后面顺便解析下域名,所以申请了香港的云主机。
申请云主机可以到我司控制台,性价比很高,这里为了保存镜像,可以使用文件系统,可以无限扩容,不浪费空间。

申请了文件系统,具体的挂载方法:挂载硬盘

接着是安装软件,安装Docker和Docker Compose,注意版本要符合要求

4、下载harbor

下载harbor压缩包服务,然后执行解压缩命令

tar xzvf harbor-online-installer-version.tgz
复制代码

image.png

解压后看到对应的harbor目录

5、修改配置文件

找到harbor.yml.temp 文件修改配置,保存为harbor.yml

cp harbor.yml.temp harbor.yml
chmod +x harbor.yml
复制代码

修改主要配置:

  • hostname 可以写域名或ip,访问地址
  • http 端口号
  • https 如果有证书的话,可以配置443端口和证书地址,这里我们没有注释掉
  • harbor_admin_password 管理员admin账户密码配置
  • data_volume 文件存储的地址
  • 其他的包括数据库的地址,日志的路径等可以自行选择配置
hostname: 152.32.216.122
http:
  port: 80
#https:
#  port: 443
#  certificate: /your/certificate/path/
#  private_key: /your/certificate/path/
harbor_admin_password: 123456
data_volume: /opt
复制代码

执行./install.sh

6、解析域名,并访问仓库

解析域名到当前机器,然后通过域名访问就可以了

这里我们通过IP打开,看到

image.png
登陆后可以访问

7、推送本地镜像到仓库

由于我们目前仅支持http,所以需要本地的机器需要修改以下配置,让docker支持当前http。

手动添加daemon.json

{
  "insecure-registries": [
    "152.32.216.122"
  ]
}
复制代码

image.png
这样就可以愉快的推送镜像了

这里,这里我们测试下,推送本地的镜像到仓库

docker login 152.32.216.122 -u admin -p lpf123456

docker images

docker tag nginx:latest 152.32.216.122/library/nginx:1.0.0

docker push 152.32.216.122/library/nginx:1.0.0

复制代码

推送完成,打开页面,将看到对应仓库中的镜像

五、参考文档

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享