阅读 214

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、以下是部署机器要求规格:

ResourceMinimumRecommended
CPU2 CPU4 CPU
Mem4 GB8 GB
Disk40 GB160 GB

软件要求:

SoftwareVersionDescription
Docker engineVersion 17.06.0-ce+ or higherFor installation instructions, see Engine documentation
Docker ComposeVersion 1.18.0 or higherFor installation instructions, see Docker Compose documentation
OpensslLatest is preferredUsed 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

复制代码

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

五、参考文档

文章分类
前端
文章标签