Harbor 简介
Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution 。作为一个企业级私有 Registry 服务器, Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。 Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外, Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
官方文档:https://goharbor.io/docs/
Github用户手册:https://github.com/goharbor/harbor/blob/master/docs/user_guide.md
Github releases:https://github.com/goharbor/harbor/releases
下载安装
Harbor 有离线安装和在线安装,其需要的文件都可以在 https://github.com/goharbor/harbor/releases 上下载。我们这里选择离线安装。
下载离线安装压缩包:
wget -P /dockerDir/harbor https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
其中 -P
参数为指定下载到哪个目录。
PS:因为下载较慢,所以下面使用的是以前下载好的 v1.1.2 的版本
。
解压并修改配置文件:
# 解压
tar -xzvf harbor-offline-installer-v1.1.2.tgz
# 解压完成后进入 harbor 目录
cd harbor
# 编辑 harbor 目录下的配置文件 harbor.cfg(新版本的叫 harbor.conf ???)
vim harbor.cfg
以下是 harbor.cfg 部分参数说明:
# 访问 harbor 的地址,可以是 ip 或域名,但不能是 localhost 和 127.0.0.1
hostname = reg.mydomain.com
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
# mysql数据库root用户默认密码root123,实际使用时修改它
db_password = root123
# 在页面登录时管理员账户 admin 的默认密码
harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth
# 是否开启自注册,on 表示可以注册用户
self_registration = on
# Token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone
配置文件中还可以设置 邮件 和 LADP 等参数,若实际操作时需要用到,可自行配置。
然后执行当前目录的 install.sh
,harbor 会根据当前目录下的docker-compose.yml
下载依赖的镜像,检测并按照顺序依次启动各个服务:
./install.sh
# 部分日志
[Step 4]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating registry ... done
Creating harbor-adminserver ... done
Creating harbor-ui ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://192.168.19.115.
For more details, please visit https://github.com/vmware/harbor .
安装完成之后就可以访问 harbor 了,同时还可以使用 docker ps -a
查看 harbor 运行了哪些容器。
进入 harbor 后会看见一个名称为 library
的项目,这是默认项目且访问级别为公开(表示任何人可读,即任何人都可以下载该项目中的镜像)。
我们还可以在 harbor 中修改系统配置,具体的可配置项请在登录 harbor 后自行查看。
推送镜像
harbor 搭建好了之后,想要推送镜像到仓库,还需要配置 docker 信任仓库地址。
两种方式
:
-
修改
/etc/docker/daemon.json
文件,多个地址使用逗号隔开。下面的 IP 地址,我在末尾加上
:80
,使用docker login
不能正常登录 harbor,去掉:80
就行了,不知道是啥原因。{ "insecure-registries": [ "192.168.19.115" ] }
-
修改
/usr/lib/systemd/system/docker.service
文件,在ExecStart
属性后面追加--insecure-registry=192.168.19.115
修改完成后重启 docker
服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
注意,harbor 相关容器可能不是自动重启,需要在 docker 重启完成之后手动启动。
进入 harbor 页面并创建一个名为 tom
的私有项目,然后推送一个 nginx 镜像上去。其格式为:
docker tag local-image:tag harbor-ip/project-name/image-name:tag
演示:
# 登录 harbor,-uadmin 表示用户名是admin, -pHarbor12345 表示密码是Harbor12345
[root@localhost ~]# docker login -uadmin -pHarbor12345 192.168.19.115
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
# 打tag
[root@localhost system]# docker tag nginx 192.168.19.115/tom/nginx:v1
# 推送镜像
[root@localhost system]# docker push 192.168.19.115/tom/nginx:v1
The push refers to repository [192.168.19.115/tom/nginx]
55a77731ed26: Pushed
71f2244bc14d: Pushed
f2cb0ecef392: Pushed
v1: digest: sha256:3936fb3946790d711a68c58be93628e43cbca72439079e16d154b5db216b58da size: 948
# 删除本地 192.168.19.115/tom/nginx:v1 镜像
docker rmi 192.168.19.115/tom/nginx:v1
# pull 仓库镜像
docker pull 192.168.19.115/tom/nginx:v1
如果不进行登录,是无法 pull
和 push
的,如:
[root@localhost system]# docker logout 192.168.19.115
Removing login credentials for 192.168.19.115
[root@localhost system]# docker pull 192.168.19.115/tom/nginx:v1
Error response from daemon: pull access denied for 192.168.19.115/tom/nginx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
[root@localhost system]# docker push 192.168.19.115/tom/nginx:v1
The push refers to repository [192.168.19.115/tom/nginx]
55a77731ed26: Preparing
71f2244bc14d: Preparing
f2cb0ecef392: Preparing
denied: requested access to the resource is denied
-- end --