docker的企业级仓库-harbor
- 2021 年 2 月 12 日
- 筆記
- docker, docker从入门到实践
Harbor
一、背景
Docker中要使用镜像,我们一般都会从本地、Docker Hub公共仓库或者其它第三方的公共仓库中下载镜像,但是出于安全和一些内外网的原因考虑,企业级上不会轻易使用。普通的Docker Registry又不满足需求,所以一般可以利用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安装有3种方式:
- 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
- 离线安装:安装包包含部署的相关镜像,因此安装包比较大
- OVA安装程序:当用户具有vCenter环境时,使用此安装程序,在部署OVA后启动Harbor
本文记录通过离线安装的方式部署
前提条件:安装企业仓库不能有registry,否则冲突
1、下载一个docker-compse工具
离线安装docker-compse工具 [root@docker01 ~]# ls docker-compose.1.25.0.tar.gz harbor-offline-installer-v2.0.2.tgz [root@docker01 ~]# tar zxpf docker-compose.1.25.0.tar.gz -C /usr/local/bin/ [root@docker01 ~]# cd /usr/local/bin/ [root@docker01 bin]# ls docker-compose-Linux-x86_64 [root@docker01 bin]# mv docker-compose-Linux-x86_64 docker-compose [root@docker01 bin]# chmod +x /usr/local/bin/docker-compose [root@docker01 bin]# docker-compose -v docker-compose version 1.25.0, build 0a186604 //下载依赖包 [root@docker bin]# yum -y install yum-utils device-mapper-persistentdata lvm2
2、harbor离线模式
直接在百度搜 harbor进官网 harbor的部署方式,有在线和离线两种方式,考虑到网速原因,这里我们采用离线下载方式。
wget //storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.4.tgz
[root@docker01 ~]# tar -zxf harbor-offline-installer-v2.0.2.tgz -C /usr/local/ [root@docker01 ~]# cd /usr/local/harbor/ [root@docker harbor]# ls common.sh harbor.v2.0.2.tar.gz harbor.yml.tmpl install.sh LICENSE prepare [root@docker01 harbor]# cp harbor.yml.tmpl harbor.yml [root@docker01 harbor]# vim harbor.yml
修改hostname=IP
注释掉https,我们就用http就可以了。如果要用https需要开启nginx sll为on
// 修改完配置文件后,在的当前目录执行./install.sh,Harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动,并且注意,harbor默认使用的是80端口,最好确认是否有冲突,或者也可以在docker-compose.yml中修改对应的端口
[root@docker01 harbor]# systemctl daemon-reload [root@docker01 harbor]# systemctl restart docker [root@docker01 harbor]# ./install.sh
查看和监控
[root@docker01 harbor]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES af0d3f823c92 goharbor/registry-photon:v2.0.2 "/home/harbor/entryp…" About a minute ago Up 2 seconds (health: starting) 5000/tcp registry ce229f6b7e37 goharbor/harbor-db:v2.0.2 "/docker-entrypoint.…" About a minute ago Up 2 seconds (health: starting) 5432/tcp harbor-db a357025287c1 goharbor/harbor-log:v2.0.2 "/bin/sh -c /usr/loc…" About a minute ago Up 2 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log harbor-log
harbor使用
//在执行此命令是一定要在模板目录下!
[root@docker01 harbor]# pwd /usr/local/harbor [root@docker harbor]# docker-compose start Starting log ... done Starting registry ... done Starting registryctl ... done Starting postgresql ... done Starting portal ... done Starting redis ... done Starting core ... done Starting jobservice ... done Starting proxy ... done [root@docker01 harbor]# netstat -anput | grep 80 tcp 0 0 127.0.0.1:51580 127.0.0.1:1514 ESTABLISHED 6286/dockerd tcp 0 0 127.0.0.1:1514 127.0.0.1:51580 ESTABLISHED 6474/docker-proxy tcp6 0 0 :::80 :::* LISTEN 8355/docker-proxy
docker client的设置
//因为docker不支持https的原因,我们也需要将docker的配置文件进 行更改。
[root@docker02 /]# vim /usr/lib/systemd/system/docker.service ..... ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.10 .... [root@docker02 /]# systemctl daemon-reload [root@docker02 /]# systemctl restart docker
客户端登录与上传镜像
[root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos7 latest 7e6257c9f8d8 5 months ago 203MB [root@docker02 ~]# docker tag centos7:latest 192.168.1.10/test/centos:7 //重新打个标签 [root@docker02 ~]# docker login -u admin -p Harbor12345 192.168.1.10 //登录 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 [root@docker02 ~]# docker push 192.168.1.10/test/centos //上传 The push refers to repository [192.168.1.10/test/centos] 613be09ab3c0: Pushed 7: digest: sha256:fe2347002c630d5d61bf2f28f21246ad1c21cc6fd343e70b4cf1e5102f8711a9 size: 529 [root@docker ~]# docker images //查看harbor仓库所有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.1.10:5000/httpd-iso latest 740e9757f71d 4 hours ago 567MB
命令总结
#推送之前先登录Harbor docker login docker login registry.test.myop.com -u admin -p Harbor12345 提示success登录成功 查看自己有哪些镜像;docker images 把需要上传到Harbor的镜像运行如下命令就可以了 #镜像打标签 docker tag 镜像名:标签 私服地址/仓库项目名/镜像名:标签 #推送到私服 docker push 私服地址/仓库项目名/镜像名:标签 #从私服拉取镜像 docker pull 私服地址/仓库项目名/镜像名:标签 也可以在web界面复制下载路径 #通过compose关闭harbor容器服务 docker-compose down