这是我参与更文挑战的第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、架构布局
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
复制代码
7、相关API
1、拉取镜像仓库列表
curl 129.227.143.240/v2/_catalog
2、拉取景象标签列表
curl 129.227.143.240/v2/test/nginx/tags/list
复制代码
四、Harbor
1、部署完成后的,web长这个样子
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、申请机器、配置机器
申请测试机器,2CPU 4G Mem Disk 80G,后面顺便解析下域名,所以申请了香港的云主机。
申请云主机可以到我司控制台,性价比很高,这里为了保存镜像,可以使用文件系统,可以无限扩容,不浪费空间。
申请了文件系统,具体的挂载方法:挂载硬盘
接着是安装软件,安装Docker和Docker Compose,注意版本要符合要求
4、下载harbor
下载harbor压缩包服务,然后执行解压缩命令
tar xzvf harbor-online-installer-version.tgz
复制代码
解压后看到对应的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打开,看到
登陆后可以访问
7、推送本地镜像到仓库
由于我们目前仅支持http,所以需要本地的机器需要修改以下配置,让docker支持当前http。
手动添加daemon.json
{
"insecure-registries": [
"152.32.216.122"
]
}
复制代码
这样就可以愉快的推送镜像了
这里,这里我们测试下,推送本地的镜像到仓库
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
复制代码
推送完成,打开页面,将看到对应仓库中的镜像