我在这里的镜像仓库搭建在ip为192.168.3.23的虚机中。
安装docker-registry
1.拉取镜像
# docker pull registry
2.查看镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 1 f32a97de94e1 7 months ago 25.8MB
3.启动私有仓库
这里-v挂载的目录是镜像实际存放的目录,挂载是为了删除容器时里面的镜像不丢,在本地备份
# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry:1
这时,一个私有的镜像仓库docker-registry就搭建好了。
基本操作
首先pull一个nginx作镜像测试
1.pull nginx镜像
# docker pull nginx
2.打上Tag
# docker tag nginx:latest 192.168.3.23:5000/nginx:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.3.23:5000/nginx v1 f949e7d76d63 2 weeks ago 126MB
3.修改docker安全规则
在需要上传镜像的主机上打开docker配置文件
# vi /etc/docker/daemon.json
不同版本的docker修改方式可能不同,现在使用的是19.03版本的docker,在/etc/docker/daemon.json 配置文件中插入
{
"insecure-registries" : ["192.168.3.23:5000"],
"registry-mirrors": ["https://4wmjwi37.mirror.aliyuncs.com"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
4.镜像上传
# docker push 192.168.3.23:5000/nginx:v1
5.查看镜像
在镜像上传成功后,可通过命令查看镜像仓库内的镜像
# curl http://192.168.3.23:5000/v2/_catalog
{"repositories":["cmcc-mec","nginx"]}
6.查看镜像标签列表
要想知道某个镜像的标签可通过这种方式查看,比如说nginx
# curl http://192.168.3.23:5000/v2/nginx/tags/list
{"name":"nginx","tags":["v1"]}
7.拉取镜像
从docker-registry中拉取镜像,首先也得像第3步一样修改主机的docker配置文件,然后才能拉
# docker pull 192.168.3.23:5000/nginx:v1
v1: Pulling from nginx
Digest: sha256:066edc156bcada86155fd80ae03667cf3811c499df73815a2b76e43755ebbc76
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
1.提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2.提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3.支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4.良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。