docker搭建私有harbor仓库
一 harbor是什么
Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务。
它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
简单说来,Harbor封装了Docker的registry v2版本,提供了许多便捷管理的特性,方便用户操作。
二 harbor架构与组件介绍
功能 | 描述 |
---|---|
Proxy | 通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务 |
Registry | 负责储存Docker镜像,并处理docker push/pull命令 |
Core services | Harbor的核心功能,包括UI、webhook、token服务 |
Database | 为core services提供数据库服务 |
Log collector | 负责收集其他组件的log,供日后进行分析 |
三 搭建私有harbor仓库
3.1 案例环境
主机 | 主机名/IP地址 | 主要软件 |
---|---|---|
服务端 | harbor/20.0.0.10 | docker、docker-compose、harbor-offline |
客户端 | client/20.0.0.50 | docker |
3.2 安装docker-compose插件
[root@Harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m`-o
[root@Harbor ~]# chmod +x docker-compose
[root@Harbor ~]# mv docker-compose /usr/local/bin/
3.3 解压harbor软件包
[root@Harbor ~]# ls ##查看软件包
harbor-offline-installer-v1.2.2.tgz
[root@Harbor ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/ ##解压
3.4 修改配置文件 harbor.cfg
[root@Harbor ~]# vim /usr/local/harbor/harbor.cfg
hostname = 20.0.0.40 ##第5行,修改为本地地址
harbor_admin_password = Harbor12345 ##第59行,设置harbor登录密码,默认为Harbor12345
进入/usr/local/harbor目录
[root@Harbor ~]# cd /usr/local/harbor/
[root@Harbor harbor]# ls ##查看文件
common docker-compose.notary.yml harbor_1_1_0_template harbor.v1.2.2.tar.gz LICENSE prepare
docker-compose.clair.yml docker-compose.yml harbor.cfg install.sh NOTICE upgrade
查看docker-compose.yml该文件,可以发现有7个容器编排
3.5 执行脚本安装并查看容器
[root@Harbor harbor]# ./install.sh ##执行安装
[root@Harbor harbor]# docker ps -a ##查看容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f238393a9460 vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 1 minutes ago Up 1 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
dce7070b896b vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" 1 minutes ago Up 1 minutes harbor-jobservice
1c7d3a91eed7 vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" 3 minutes ago Up 3 minutes harbor-ui
2ed04682f845 vmware/harbor-adminserver:v1.2.2 "/harbor/harbor_admi…" 3 minutes ago Up 3 minutes harbor-adminserver
a1f09c86820b vmware/harbor-db:v1.2.2 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 3306/tcp harbor-db
28bc92da77d8 vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 3 minutes ago Up 3 minutes 5000/tcp registry
602b5bf23725 vmware/harbor-log:v1.2.2 "/bin/sh -c 'crond &…" 3 minutes ago Up 3 minutes 127.0.0.1:1514->514/tcp harbor-log
生成7个容器
3.6 远端登录harbor镜像仓库
此时在远端登录harbor镜像仓库的时候,拒绝连接。出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以上错误。
1.在远端修改配置文件docker.service
[root@client ~]# vim /usr/lib/systemd/system/docker.service
在第14行中间插入--insecure-registry 20.0.0.40
14 ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 20.0.0.40 --containerd=/run/containerd/containerd.sock
:wq
2.重新加载docker服务
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker
3.登录harbor镜像仓库
docker login -u admin -p Harbor12345 http://20.0.0.100
ps:密码可在/usr/local/harbor/harbor.cfg文件中harbor_admin_password处进行修改
4.给本地镜像nginx:latest进行打标签
docker tag nginx:latest 20.0.0.100/jojo/nginx
5.上传镜像
docker push 20.0.0.100/jojo/nginx
3.7 harbor日常操作管理
3.7.1 登录harbor,网址20.0.0.10
默认用户admin
密码为Harbor12345
3.7.2 新建项目
3.7.3 上传镜像测试
[root@client yum.repos.d]# docker tag nginx:latest 20.0.0.10/jojo/nginx
[root@client yum.repos.d]# docker push 20.0.0.10/jojo/nginx
The push refers to repository [20.0.0.10/jojo/nginx]
b9e73ac5343e: Pushed
5887d03dfc3d: Pushed
e3a971c30b12: Pushed
32048dd980c7: Pushed
f5600c6330da: Pushed
latest: digest: sha256:bb84ff0786cd1dbde780d84f6bf76bfdef36fe8ffa658f7f5c48e39363b4d500 size: 1362