搭建harbor仓库
搭建harbor仓库
harbor概述
容器技术越来越或火,越成熟,容器应用的开发和运行始终离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境的Registry也是非常必要的。
所以Harbor孕育而生,Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
Harbor的主要功能
-
基于角色的访问控制
用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。 -
基于镜像的复制策略
镜像可以在多个Registry实例中复制(可以将仓库中的镜像同步到远程的Harbor,类似于MySQL主从同步功能),尤其适合于负载均衡,高可用,混合云和多云的场景。 -
图形化用户界面
用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。 -
审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。 -
部署简单
提供在线和离线两种安装工具, 也可以安装到vSphere平台虚拟设备。
harbor搭建
搭建准备
- Linux CentOS 7
- 最低要求:CPU2核/内存4G/硬盘40G
- 推荐:CPU4核/内存8G/硬盘300G
- docker下载地址:https://download.docker.com/linux/static/stable/x86_64/
- docker-compose下载地址:https://github.com/docker/compose/releases
- harbor下载地址:https://github.com/goharbor/harbor/releases
开始搭建
docker安装(离线)
将安装包文件上传到服务器目录并解压。
tar -zxvf docker-23.0.1.tgz
将解压出来的docker文件内容移动到 /usr/bin/ 目录下.
cp docker/* /usr/bin/
将docker注册为service,在/etc/systemd/system目录下创建docker.service文件,并配置如下内容保存。
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
添加文件权限并启动docker,执行如下命令。
chmod +x /etc/systemd/system/docker.service #添加文件权限 systemctl daemon-reload #重载unit配置文件 systemctl start docker #启动Docker systemctl enable docker.service #设置开机自启
验证docker安装是否成功。
systemctl status docker #查看Docker状态 docker -v #查看Docker版本
docker-compose安装(离线)
将之前下载的docker-compose文件复制到/usr/bin/目录下,并给执行权限。
mv docker-compose-linux-x86_64 docker-compose cp docker-compose /usr/bin/ chmod +x /usr/bin/docker-compose
安装成功,验证。
docker-compose -v
harbor安装(离线)
上传harbor压缩包,并解压。
tar -zxvf harbor-offline-installer-v1.10.16.tgz
进入harbor目录给予以下文件执行权限。
chmod +x common.sh install.sh prepare
修改harbor.yml文件。
注:以实际行数为准,只供参考。
- 修改第五行 hostname 为主机ip或域名;
- 注释第13行 https;
- 注释第15行 port: 443;
- 修改第27行 harbor_admin_password,设置一个admin用户的密码;
- 修改第40行 data_volume,修改harbor的数据目录;
- 修改第87行 location,修改harbor的日志目录。
安装,执行harbor目录下的install.sh文件。
./install.sh
✔ ----Harbor has been installed and started successfully.----
出现上面这句表示安装成功。
harbor维护
容器 | 功能 |
---|---|
harbor-core | 配置管理中心 |
harbor-db | PG数据库 |
harbor-jobservice | 负责镜像复制 |
harbor-log | 记录操作日志 |
harbor-portal | Web管理页面和API |
nginx | 前端代理,负责前端页面和镜像上传/下载转发 |
redis | 会话 |
registryctl | 镜像存储 |
- 容器数据持久化目录(可更改):/data
- 日志文件目录(可更改):/var/log/harbor
- 数据库做好定期备份。
配置harbor主从复制
主备
- 简单,主挂了切到备Harbor;
- 同一时间只有一台提供服务;
- 适合少量镜像下载。
双主
- 双向配置复制;
- 两台同时提供服务;
- 前面增加负载均衡器。
一主多从
- 多个从同步主;
- 适合多地区业务、大量镜像下载需求。
主从配置步骤
系统管理$\Longrightarrow$仓库管理$\Longrightarrow$新建目标
- 提供者:选择Harbor;
- 目标名:自定义,可填一个具有声明意义的名称;
- 描述:自定义,可备注目标仓库的一些信息;
- 目标URL:对端仓库的地址;
- 访问ID:目标仓库的用户名;
- 访问密码:访问ID的密码;
- 验证远程证书:如果对端用的是自签证书或者非信任证书的话不要勾选此项。
系统管理$\Longrightarrow$复制管理$\Longrightarrow$新建规则
- 名称:自定义,有声明意义;
- 描述:自定义,备注规则中仓库信息;
- 复制模式
- Push-based:从本地仓库推送到远程仓库,双主模式两个harbor同时配置;
- Pull-based:从远程仓库拉去到本地仓库,一主多从模式的从库可配置,主从模式从库可配置;
- 目标仓库/源仓库:对端仓库地址,在仓库管理中添加;
- 资源过滤器:指定根据什么来同步;
- 触发模式:一般选择事件驱动,这样主库已更新就会同步。
docker基础命令使用以及镜像上传下载
主机连接harbor仓库命令
docker login 目标仓库地址:端口
输入账号密码
docker login 192.168.106.170:80
登录docker报错,按照文档《登录docker报错》处理
退出连接
docker logout 目标仓库地址:端口
docker logout 192.168.106.170:80
上传镜像到私有仓库及验证
docker push 仓库地址/项目名称/镜像:镜像版本
docker push 192.168.106.170:80/test/nginx:1.23-alpine
拉取harbor仓库镜像报错
[root@es-single ~]# docker pull 192.168.106.170/ferhat/nginx:1.23-alpine Error response from daemon: Get "https://192.168.106.170/v2/": dial tcp 192.168.106.170:443: connect: connection refused
加上端口拉取docker pull 192.168.106.170:80/ferhat/nginx:1.23-alpine
/etc/systemd/system/docker.service文件下面一行后面添加
--insecure-registry=192.168.2.195
(没试过)
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.2.195
然后重启docker服务
systemctl daemon-reload systemctl restart docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix