【必知必会】使用Harbor搭建私有仓库。
本实验在一台新的机器vms102上操作,在vms102上安装Docker。
Harbor是一个通过Web界面管理的镜像仓库,使用起来非常方便且功能强大。安装Harbor需要Compose,Compose是一种容器编排工具,所以需要先把docker-compose安装好。
本实验准备在vms102上搭建Harbor,所以下面的操作在vms102上进行。
第1步 使用yum安装docker-compose。
第2步 查看Compose的版本。
因为私有仓库拉取镜像默认使用的是HTTPS,为了能让Docker通过HTTP访问,必须修改相关配置。
第1步 在vms102上创建/etc/docker/daemon.json,内容如下。
这里insecure-registries后面的地址是仓库的地址,重启Docker。
第2步 到https://github.com/goharbor/harbor/releases下载最新版Harbor离线包并解压,解压之后进入目录harbor。
第3步 导入Harbor所需要的镜像。
第4步 生成harbor.yml文件。
编辑harbor.yml文件,修改hostname的值为本主机名,最前面的数字是行号。
把以下几行注释掉。可以在代码前加上“#”,此时加“#”的代码就会被注释掉,不再生效。
前面的数字是所在行号,行号后面的#是新增的。
harbor_admin_password是登录Harbor的密码,大概在34行,这里默认为Harbor12345,可以在此处修改管理员密码。
第5步 运行脚本./prepare,执行一些准备工作。
第6步 运行./install.sh。
安装完成,下面开始访问Harbor。
第7步 在浏览器里输入192.168.26.102,进入图2-3所示的界面。
图2-3 登录Harbor
用户名输入admin,密码输入Harbor12345,单击“登录”按钮,如图2-4所示。
图2-4 Harbor的界面
单击界面左下角的“浅色主题”,整个面板的颜色以浅色显示。
第8步 依次单击“系统管理”→“用户管理”→“创建用户”选项,如图2-5所示。
设置新创建用户的信息,单击“确定”按钮。
第9步 依次单击“项目”→“新建项目”选项,如图2-6所示。
图2-5 创建用户
图2-6 创建项目
项目名称输入cka,访问级别选择公开。这里的访问级别指的是别人从这个项目里拉取镜像时要不要先登录,如果选择了公开,则不需要登录就可以直接拉取;如果没有选择公开,则必须在命令行里登录之后才能拉取。不管有没有选择公开,往此仓库里推送镜像都是需要登录的,单击“确定”按钮。
第10步 为项目添加用户。
依次单击“项目”→“cka”选项,如图2-7所示。
图2-7 进入cka项目
依次单击“成员”→“+用户”选项,如图2-8和图2-9所示。
图2-8 为项目关联用户
名称输入tom,角色选择项目管理员,单击“确定”按钮。
单击“镜像仓库”选项,可以看到没有任何镜像,如图2-10所示。
图2-9 把tom设置为项目管理员
图2-10 查看项目里的镜像
下面在客户端vms100上把做好的镜像推送到仓库里,不管Harbor里的cka项目是不是设置了公开,推送镜像都要先登录。
第1步 修改/etc/docker/daemon.json,如下所示。
这里新增加insecure-registries,后面的地址是仓库的地址,要记得在registry-mirrors最后添加一个逗号。
第2步 重启Docker。
第3步 登录私有仓库。
按提示输入刚创建的用户名和密码,登录成功后会在当前目录下生成一个隐藏文件夹.docker,里面记录了登录信息。
这个config.json文件里就记录的登录信息。
第4步 测试推送镜像。
在推送镜像之前,需要给镜像重新打标签,新的tag里的IP是仓库的IP,分类就是Harbor里的项目。比如我们现在的环境里,需要把镜像重新打标签为192.168.26.102/cka/镜像名:tag这样的格式。
先把centos:v1重新打标签为192.168.26.102/cka/centos:v1。
然后通过docker push命令推送到仓库里。
第5步 打开Harbor管理页面,如图2-11所示。
图2-11 查看项目里的镜像
单击“cka/centos”选项之后,再单击图2-12箭头所指位置的选项。
图2-12 单击箭头所指位置的选项
之后进入图2-13所示的界面,单击箭头所指位置的按钮,即可自动复制拉取此镜像的命令。
图2-13 单击箭头所指位置的按钮
如果是在其他的Docker机器上拉取镜像,需要在/etc/docker/daemon.json里添加"insecure-registries": ["192.168.26.102"],这里insecure-registries后面的值是仓库的IP,具体配置与前面一样。下面来看如何在Containerd的环境里下载,下面的操作是在vms101上进行的。
首先使用crictl拉取镜像192.168.26.102/cka/centos:v1。
这里拉取失败,是因为vms101与Harbor服务器192.168.26.102之间使用了HTTPS的方式通信。我们现在修改一下Containerd的配置文件/etc/containerd/config.toml,用Vim编辑器打开此文件后搜索关键字mirror,找到之后,原来的内容如下。
修改之后的内容如下。
上面的粗体字部分是新增的,重启Containerd。
然后再次拉取镜像。
可以看到,现在可以正常拉取镜像了。
下面尝试使用nerdctl拉取镜像。
这里提示的也是因为HTTPS的问题,导致无法拉取镜像。但是,前面已经修改了/etc/containerd/config.toml,为什么还不行呢?原来是因为nerctl不使用这个配置文件,所以在此配置文件里所做的修改对nerdctl不生效。如果想使用nerdctl拉取镜像,可以加上--insecure-registry选项。
使用nerdctl再次拉取镜像。
可以看到,现在可以正常拉取镜像了。