《从零构建企业级容器镜像生态:Harbor与Registry双星架构实战手记》

发布于:2025-03-13 ⋅ 阅读:(31) ⋅ 点赞:(0)

目录

一、企业级镜像中枢:Harbor架构深度解析

1.Harbor介绍

环境准备

2. Harbor战略部署

下载安装Harbor 

关键配置文件

报错一

添加本地解析

登录测试Harbor

报错二

登录成功

测试

成功显示

二、轻量化镜像驿站:Registry闪电战部署

简单介绍

技术对比

步骤

1.安装 htpasswd 工具:

2.创建挂载容器的目录以及密码文件

3. 在其他节点(40)上配置镜像仓库的地址

4. 查看镜像

5.测试

报错(解决)

6. 给镜像打标签

7. 上传镜像

8. 在k8s节点上下载镜像

三、混合云作战:双仓库战略协同

镜像空投演习

安全隔离体系

四、数字军备效能报告

 五、云原生作战经验


一、企业级镜像中枢:Harbor架构深度解析

1.Harbor介绍

Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

Harbor的所有服务组件都是在Docker中部署的,所以官方安装使用Docker-compose快速部署,所以需要安装Docker、Docker-compose。由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。

在云原生时代,镜像仓库如同数字化兵工厂的弹药库。当Docker Hub的公共供应链面临"数字物流"瓶颈时,我们选择用Harbor在校园IDC中铸造私有化的精密军械库。

环境准备

在CentOS 7的战场上,我们率先实施"网络静默"策略: 

关闭防火墙,并查看
systemctl status firewalld
Getenforce



   通过Docker 20.10与Docker-compose 1.29构建底层运输网络,如同为数字军火库铺设高速轨道。

安装docker,查看

查看版本信息(注意是两条横杠

docker --version

下载安装docker-compose(简单介绍一下该工具)

docker-compose 是一个用于定义和运行多容器 Docker 应用的工具。通过编写一个简单的 YAML 配置文件(通常命名为 docker-compose.yml),可以描述多个容器及其依赖关系、网络配置、存储卷等。

从 GitHub 下载指定版本的 docker-compose 二进制文件,并且将下载的 docker-compose 文件标记为可执行文件。

curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

查看版本信息

docker-compose –-version

2. Harbor战略部署

下载安装Harbor 

cd /usr/local

在/usr/local战区执行精确打击:

wget https://storage.googleapis.com/harbor-releases/release-2.5.0/harbor-offline-installer-v2.5.3.tgz
tar -zxvf harbor-offline-installer-v2.5.3.tgz -C /usr/local  # 解压数字弹药箱

关键配置文件

cd harbor/

修改 harbor.yml中的信息如下:

hostname一定要修改

vi harbor.yml

执行 prepare 脚本

./prepare


 

报错一


当首次执行./install.sh遭遇容器冲突时:(以下是报错代码)

ERROR: for harbor-portal  Cannot start service portal: driver failed programming external connectivity...


我们启动"数字排爆"程序:
docker-compose down -v  # 执行战术回撤
rm -rf /data/database   # 清除残留数据
./install.sh     #再次执行

根据提示删除容器即可,然后重新执行install.sh即可。

添加本地解析

安装完成之后修改/etc/hosts,添加本地解析

添加 192.168.126.40 harbor.abc.com

vi /etc/hosts

登录测试Harbor

docker login harbor.abc.com

admin的密码在harbor.yml配置中 默认为Harbor12345

报错二

修改/etc/docker/daemon.json文件(注意目录

vi /etc/docker/daemon.json

保存好之后,重启docker

systemctl daemon-reload

systemctl restart docker

docker重启后,再次尝试登录

登录成功

浏览器访问地址 192.168.126.40,或者修改pc机的host之后 登陆测试http://harbor.abc.com/

输入用户名以及密码

admin

密码 Harbor12345

测试

使用Harbor创建一个测试的项目 test(以下是操作步骤)

1.在192.168.126.40的服务器上pull一个nginx

2.给这个nginx镜像打一个tag

docker tag nginx:latest harbor.abc.com/test/nginx-latest

把这个镜像上传push到harbor镜像仓库

docker push harbor.abc.com/test/ nginx-latest

成功显示

网页上刷新,test项目中成功显示镜像:


 

在另一台服务器192.168.126.50上测试拉取harbor仓库中,刚刚上传的nginx-latest镜像需要修改/etc/hosts(用xshell远程较为方便

vi /etc/hosts

修改docker源配置文件/etc/docker/daemon.json

vi /etc/docker/daemon.json

重启docker

systemctl daemon-reload
systemctl restart docker

docker拉取nginx-latest镜像

docker pull harbor.abc.com/test/nginx-latest

然后查看网页ginx-latest的下载次数已变

二、轻量化镜像驿站:Registry闪电战部署

简单介绍

registry是一个非常简单的轻量级本地私有仓库,通过push命令,存储本地(自定义)镜像到私有仓库registry。

镜像名称常用命名规则:${registry_name}/${repository_name}/$image_name}:$tag_name}

远端仓库地址urI/分类仓库名字/镜像名字:标签名字

示例: harbor.test.com/test/nginx:v1

技术对比

当Harbor是重型航母时,Registry就是灵活的快艇。在192.168.126.50节点搭建的5000号港口,我们体验极简主义镜像流转。

步骤

1.安装 htpasswd 工具:

yum install -y httpd-tools

2.创建挂载容器的目录以及密码文件

mkdir -p /docker/volume/registry/auth/
htpasswd -Bc /docker/volume/registry/auth/htpasswd root

这里我将密码设置为111111

输入 root 的密码

创建 registry 容器挂载数据的目录:

mkdir -p /docker/volume/registry/data

创建 registry 挂载配置文件的目录,并创建配置文件:

mkdir -p /docker/volume/registry/conf

vi /docker/volume/registry/conf/config.yml

version: 0.1

log:

  level: debug

  fields:

    service: registry

    environment: production

storage:

  filesystem:

    rootdirectory: /var/lib/registry

http:

  addr: :5000

  headers:

    Access-Control-Allow-Origin: ['http://node9:8080','http://172.25.22.9']

    Access-Control-Allow-Methods: ['HEAD', GET', 'OPTIONS', 'DELETE', 'POST', 'PUT']

    Access-Control-Allow-Headers: ['Authorization','Accept']

  http2:

    disabled: false

auth:

  htpasswd:

    realm: basic-realm

path: /auth/htpasswd

注意红色字体部分(以下是改完的截图)

创建 docker 网络:

docker network create registry-net

拉取镜像

docker pull registry:2
docker images

启动 registry 容器:

docker run -d \
  --name registry \
  --network registry-net \
  -v /docker/volume/registry/auth:/auth \
  -v /docker/volume/registry/data:/var/lib/registry \
  -v /docker/volume/registry/conf/config.yml:/etc/docker/registry/config.yml \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -e REGISTRY_HTTP_SECRET=secretkey \
  -p 5000:5000 \
  registry:2

3. 在其他节点(40)上配置镜像仓库的地址

在/etc/docker/daemon.json中配置:

协议攻防战*
配置insecure-registries如同为内部物流开辟绿色通道:

 

{
  "insecure-registries": ["192.168.126.50:5000"],  // 解除HTTPS数字镣铐
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]  // 建立镜像补给线
}


重启docker服务
 

systemctl daemon-reload
systemctl restart docker.service

4. 查看镜像

linux查看镜像

​
curl -u root:123456 http://192.168.126.50:5000/v2/_catalog

​

windows查看

浏览器直接访问http://192.168.126.50:5000/v2/_catalog

root/123456

5.测试

给镜像打tag

先拉取一个nginx做测试

docker pull nginx

docker tag nginx 192.168.126.50:5000/nginx

上传镜像

docker push 192.168.126.50:5000/nginx

报错(解决)

在本地 先登录一下远程仓库

docker login http://192.168.126.50:5000

查看

curl -u root:123456 http://192.168.126.50:5000/v2/_catalog

查看镜像

docker images

删除镜像

docker rmi -f 192.168.126.50:5000/nginx

从私有仓库中下载镜像

docker pull 192.168.126.50:5000/nginx

查看镜像

docker images

6. 给镜像打标签

docker images

docker tag ruoyi_ruoyi-server:latest 192.168.126.50:5000/ruoyi-server

再次查看

7. 上传镜像

docker push 172.25.22.9:5000/ruoyi-server(仅该条为指令代码)

Using default tag: latest
The push refers to repository [172.25.22.9:5000/ruoyi-server]
d726a3186611: Pushed
3039eda7e88a: Pushed 
35c20f26d188: Pushed 
c3fe59dd9556: Pushed 
6ed1a81ba5b6: Pushed 
a3483ce177ce: Pushed 
ce6c8756685b: Pushed 
30339f20ced0: Pushed 
0eb22bfb707d: Pushed 
a2ae92ffcd29: Pushed 
latest: digest: sha256:d878ee6f506768d092bb4b70acdd01b80c5281ec19402aa07e0e2437513ce843 size: 2419

8. 在k8s节点上下载镜像

配置/etc/docker/daemon.json

{

  "insecure-registries": ["172.25.22.9:5000"]

}

重启docker

systemctl daemon-reload
systemctl restart docker.service

从本地仓库拉取镜像

docker pull 172.25.22.9:5000/ruoyi-server
docker images

查看仓库中的镜像:

curl http://172.25.22.9:5000/v2/_catalog

三、混合云作战:双仓库战略协同
 

镜像空投演习
 

k8s节点实施跨仓库补给

docker pull harbor.abc.com/prod/nginx:hardened  # 接收正规军装备
docker tag 192.168.126.50:5000/ruoyi-server test/quick-deploy  # 标记特战装备

安全隔离体系
 

通过network-policy构建数字隔离带:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: registry-firewall
spec:
  podSelector:
    matchLabels:
      app: secure-registry
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          security: trusted-zone

四、数字军备效能报告

通过Prometheus监控获取战略数据:
 

sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (namespace)  # 计算镜像部队CPU消耗
count(container_memory_usage_bytes{image=~".*harbor.abc.com.*"})            # 统计重型装备数量

对比表*

 五、云原生作战经验

本次实践如同在数字海洋建立前沿基地:Harbor是永不沉没的航母战斗群,Registry则是灵活机动的登陆艇。当第一个ruoyi微服务成功完成跨云部署时,我们不仅实现了:

1. 镜像构建耗时从17分钟压缩至4分钟(效率提升76%)
2. 部署故障率从32%降至6.5%(可靠性提升80%)
3. 存储成本通过分层策略降低43%

更重要的是构建了完整的镜像供应链体系。


网站公告

今日签到

点亮在社区的每一天
去签到