搭建Harbor仓库

Harbor是什么?为什么会用到Harbor?
harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】

另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似 于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的 CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的 漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。

Harbor的三种安装方式

在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
离线安装:安装包包含部署的相关镜像,因此安装包比较大
OVA安装程序(第三方):当用户具有vCenter环境时,使用此安装程序,在部署 OVA后启动Harbor
我们这里也是采用的离线安装!!!

离线安装

Harbor官方地址:https://github.com/goharbor/harbor/releases
下载所需的安装包: harbor-offline-installer-v2.1.0.tgz

一)准备的环境:docker(已安装)

github下载docker-compose
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
给docker-compose可执行权限

chmod +x /usr/local/bin/docker-compose

下载依赖包,默认安安装docker时已经下载

yum -y install yum-utils device-mapper-persistent- data lvm2

验证docker-compose安装完成
docker-compose -version
docker-compose version 1.25.0, build 0a186604

二)解压已经安装的harbor-offline-installer-v2.1.0.tgz

tar -zxf harbor-offline-installer-v2.1.0.tgz -C /usr/local/
cd harbor
cp harbor.yml.tmpl harbor.yml

PS: 这里跟以前不一样,没有了harbor.cfg文件,我们需要手动复制harbor.yml.tmpl在做修改即可

三)修改harbor.yml

PS: harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可!
所以 把https相关的已经注释掉

四)安装harbor

./prepare
./install.sh

五)harbor的控制

docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动

六)访问Harbor

访问地址:http://172.16.46.111
默认的账号密码:admin/Harbor12345

registry 和 harbor 对比 harbor和cherish区别_git

registry 和 harbor 对比 harbor和cherish区别_git_02

Docker开启远程API

用vim编辑器修改docker.service文件

vi /usr/lib/systemd/system/docker.service

需要修改的部分:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改后的部分:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
让Docker支持http上传镜像(docker对于私有仓库默认都是使用https,不信任http)

echo '{ "insecure-registries":["192.168.3.101"] }' > /etc/docker/daemon.json

如果端口号不是 80;加上端口号:
echo '{ "insecure-registries":["192.168.3.101:9080"] }' > /etc/docker/daemon.json

重新启动Docker服务
systemctl daemon-reload
systemctl restart docker
开启防火墙的Docker构建端口(需要的话)
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload

测试推送镜像

登录harbor仓库

[root@master ~]# docker login -u admin -p Harbor12345 172.16.46.111
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

上传镜像到私有仓库

docker tag 0901fa9da894 172.16.46.111/mynginx/nginx:v1.0
docker push 172.16.46.111/mynginx/nginx:v1.0

问题

unauthorized: unauthorized to access repository: ces/ces-auth, action: push: unauthorized to access repository: ces/ces-auth, action: push

所有操作多对的,那可能是端口模式默认的 80/443

解决方案

加端口(8080)

docker login -u admin -p Harbor12345 172.16.46.111:8080

docker push 172.16.46.111:8080/mynginx/nginx:v1.0