企业级私有docker镜像仓库Harbor的搭建和使用

文章目录

一、什么是Harbor

简单来说,Harbor 是一个开源的企业级私有 Docker 镜像仓库服务。我们可以把它理解成一个 "私有的、安全的、功能强大的 Docker Hub"。

  • 私有: 它部署在你自己的基础设施(如公司的数据中心或私有云)上,你完全掌控其中的所有镜像,不对外公开。
  • 企业级: 这意味着它不仅仅是一个简单的存储服务器。它提供了企业所需的高级功能,如权限控制、安全扫描、镜像复制、图形化操作界面等。
  • 镜像仓库: 它是专门用来存储、管理和分发 Docker 镜像的地方。你可以向 Harbor 中推送(上传)镜像,也可以从 Harbor 中拉取(下载)镜像。

目前国内的上网环境公共的Docker Hub不能直接访问了,对于公司和个人开发者来说有必要搭建私有的Docker镜像仓库,使用 Harbor 几乎是必须的。公司自己开发的应用程序镜像可能包含敏感代码和配置,绝不能放到公共仓库。Harbor 提供了一个安全的私有环境来存放这些资产。Harbor 可以配置为 Docker Hub、Google Container Registry(GCR)等公有仓库的代理缓存。当公司内第一个开发者拉取某个公有镜像(如 nginx:latest)时,Harbor 会从公网下载并缓存到本地。后续所有开发者再拉取这个镜像时,都会直接从内网的 Harbor 服务器高速获取,极大地节省了公网带宽,加快了拉取速度。

Harbor 将一个简单的镜像存储服务,升级为一个安全、高效、可靠的企业级镜像生命周期管理平台,是现代云原生应用开发和运维不可或缺的基础设施组件。

本文介绍如何通过Harbor搭建和使用自己的私有镜像仓库。

二、安装Harbor

准备一台linux的服务器,我这里是ubuntu 24.04 IP地址是192.168.0.49

Harbor的docker安装要求

On a Linux host: docker 20.10.10-ce+ and docker-compose 1.18.0+ .

1、安装docker

执行以下命令一键安装docker

bash 复制代码
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
service docker start

配置国内镜像加速

bash 复制代码
vim /etc/docker/daemon.json
bash 复制代码
{
    "registry-mirrors": [
        "https://docker.1ms.run"
    ]
}
bash 复制代码
service docker restart

2、安装Harbor

下载harbor安装包,下载地址如下:

https://github.com/goharbor/harbor/releases/download/v2.14.1/harbor-offline-installer-v2.14.1.tgz

将下载的harbor安装包上传到安装harbor的目标服务器的目录下

如/home/app/harbor

解压上传的harbor安装包

bash 复制代码
tar -zxvf harbor-offline-installer-v2.14.1.tgz

备份配置文件

bash 复制代码
cp harbor.yml.tmpl harbor.yml

修改配置文件

bash 复制代码
vim harbor.yml

执行安装脚本

bash 复制代码
./install.sh

安装完成后通过浏览器即可以访问harbor的管理界面

!harbor登录界面](https://i-blog.csdnimg.cn/direct/f4758ac608e64efa8370b1dc9d2faf82.png)

默认的用户名和密码是admin/Harbor12345

三、使用Harbor

1、通过Harbor代理拉取镜像

先在仓库管理中建一个目标,目标是从docker的加速镜像站点去拉取镜像,我这里配置目标URL是https://docker.1ms.run,点击测试链接,提示"测试连接成功"表示目标URL站点没有问题,就可以点击确定。

这样我们就有了一个目标的加速仓库

在"项目"中点击"新建项目",在镜像代理中开启 "镜像代理",选择我们开始在仓库管理中新建的目标仓库。

在配置管理生成软件物料清单中勾选"在推送镜像时自动生成软件物料清单",这样我们在拉取镜像时harbor会自动帮我们缓存镜像到本地的harbor仓库,下次拉取时速度就非常快了。

在另外一台需要拉取镜像的机器上配置docker的镜像仓库,将地址配置为Harbor的地址

bash 复制代码
vim /etc/docker/daemon.json
bash 复制代码
{
    "registry-mirrors": [
        "http://192.168.0.49"
    ],
    "insecure-registries": ["192.168.0.49"]
}

重启docker服务

bash 复制代码
service docker restart

拉取目标镜像,这里要带上harbor中的项目名称,docker1ms/nginx:1.22

bash 复制代码
docker pull docker1ms/nginx:1.22

在harbor的管理界面可以看到,通过拉取镜像,harbor通过代理镜像源对镜像进行了拉取并缓存到harbor仓库,下次拉取速度更快了。

2、上传镜像到Harbor仓库

另一个在工作中最常用的场景就是将自己的镜像上传到镜像仓库,以便其他人拉取使用。

下面就以在本地已经存在的docker1ms/busybox:latest为例,上传到自己的harbor仓库。

我的harbor仓库的地址是192.168.0.49,上传到默认的library项目中

为镜像打上带仓库地址和项目名的tag

bash 复制代码
docker tag docker1ms/busybox:latest 192.168.0.49/library/busybox:latest 

客户端登录到harbor

bash 复制代码
docker login 192.168.0.49 

输入harbor的用户名和口令进行登录

登录成功后,通过push命令上传镜像到本地harbor仓库

bash 复制代码
docker push 192.168.0.49/library/busybox:latest

到harbor管理界面查看push到仓库中的镜像

可以看到busybox镜像已经成功push到harbor的library项目中了。

在Artifacts中可以看到push上来的镜像物料详情,可看到这个busybox镜像的大小是2.1MB

我们可以直接拉取harbor中我们刚push上去的镜像

可以看到如果是默认仓库library项目直接可以docker pull 镜像名就可以拉取

bash 复制代码
docker pull busybox:latest 

至此,我们通过安装自己私有的镜像仓库Harbor,实现了docker镜像代理下载和上传自己的镜像到Harbor仓库,覆盖了我们平时工作中的大部分场景。


作者博客:http://xiejava.ishareread.com/

相关推荐
一个天蝎座 白勺 程序猿3 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
分布式存储与RustFS7 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希1237 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
@兽血沸腾9 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
闲云自留地14 小时前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
讯捷蓝达14 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落16 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng17 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮18 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹18 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器