目录
一、企业级镜像中枢: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%
更重要的是构建了完整的镜像供应链体系。