7.4 自动化构建(镜像仓库Harbor)

系列 - 自动化构建与持续集成
目录
Harbor简介
Harbor 是一个开源的企业级 Docker 镜像仓库服务器,用于存储和分发 Docker 镜像。它提供了基于角色的访问控制、镜像扫描、漏洞分析等企业级功能,是 Kubernetes 和 Docker 环境中常用的私有镜像仓库解决方案。

准备工作
1、下载安装文件
cd /srv
wget http://192.168.192.199:8080/harbor-offline-installer-v2.10.2.tgz
2、解压安装文件
tar xvf harbor-offline-installer-v2.10.2.tgz
3、准备配置文件
cd /srv/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改以下内容:
hostname: 192.168.192.240 # 这里配置的监听地址,换成你自己的服务器IP
port: 9000 #监听端口
data_volume: /srv/harbor/data #配置数据目录
配置文件修改提示
需要注释或删除文件中关于 HTTPS 的部分,默认是13行到18行。在生产环境中,建议配置 HTTPS 以提高安全性,但在实验环境中可以先使用 HTTP。

任务一:部署 Harbor
1、安装 Harbor
# 准备工作主要是下载镜像并生成配置文件
./prepare
# 安装并启动
./install.sh

信息
Harbor 安装过程会自动拉取和启动多个 Docker 容器,包括 nginx、registry、redis 等组件。整个过程可能需要几分钟时间,具体取决于网络环境和系统性能。
2、验证是否安装成功
浏览器打开 IP:9000
看到如下登录界面,说明 Harbor 已成功部署:

默认登录凭证
默认的用户名是:admin
默认密码是:Harbor12345
任务二:试用 Harbor
现在来尝试使用 Docker 客户端登录到 Harbor 仓库,并进行基本操作。
1、使用 Docker 登录 Harbor
docker login -u admin -p Harbor12345 IP:9000

常见错误
如上图所示,首次登录时可能会遇到证书问题。这是因为我们使用的是 HTTP 而非 HTTPS,需要在 Docker 客户端配置允许不安全的仓库。
2、修改 Docker 配置文件
vim /etc/docker/daemon.json
文件内容:
{
"registry-mirrors": ["https://docker.seahi.me"],
"insecure-registries": [
"IP:9000"
]
}
3、重启 Docker 服务
systemctl restart docker
4、重新登录 Harbor 🔁
docker login -u admin -p Harbor12345 IP:9000
登录成功
成功登录后,你将看到 “Login Succeeded” 的提示信息。现在你可以开始推送和拉取镜像了。
任务三:推送和拉取镜像
注意
在 Harbor 网页上,新建一个名为
library 的项目1、标记一个本地镜像,准备推送到 Harbor
# 拉取一个测试镜像
docker pull nginx:latest
# 给镜像打标签,指向你的 Harbor 仓库
docker tag nginx:latest IP:9000/library/nginx:v1
2、推送镜像到 Harbor
docker push IP:9000/library/nginx:v1
作业
使用 Sublime Merge 将昨天的项目克隆到本地,修改 .drone.yml
文件内容如下,增加了镜像信息和镜像仓库信息
kind: pipeline
type: docker
name: build
steps:
- name: 构建并推送镜像
image: plugins/docker
settings:
dockerfile: Dockerfile
# 镜像信息
repo: 192.168.192.199:9000/library/pacman
tags: latest
# 镜像仓库
registry: 192.168.192.199:9000
username: "admin"
password: "Harbor12345"
mirror: https://docker.seahi.me # 指定使用国内镜像加速器
# dry_run: true # 注释或删除这一行,否则不进行推送
修改完成后,使用 Sublime Merge 将文件上传到代码仓库,观察构建过程,如果构建成功,查看 Harbor 中是否有镜像。


