一、Harbor是什么?
Docker有个形象的比喻叫集装箱,kubernetes是舵手,而Harbor是港湾,其实是用来保存容器镜像的仓库,企业使用docker、kubernetes时,一般都需要个私有镜像仓库的,Harbor就是其中的佼佼者。官方的解释:Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
二、Harbor的架构
harbor的整体架构还是很清晰的,下面简单介绍一下,下图展示harbor主要的功能组件和信息流向。
Proxy: Harbor的registry、UI、token services等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients的请求转发到后端服务上。
Registry: 负责存储Docker镜像,以及处理Docker push/pull请求。因为Harbor强制要求对镜像的访问做权限控制, 在每一次push/pull请求时,Registry会强制要求客户端从token service那里获得一个有效的token。
Core services: Harbor的核心功能,主要包括如下3个服务:
UI: 作为Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。1) WebHook
是在registry中配置的一种机制, 当registry中镜像发生改变时,就可以通知到Harbor的webhook endpoint。Harbor使用webhook来更新日志、初始化同步job等。2) Token service
会根据该用户在一个工程中的角色,为每一次的push/pull请求分配对应的token。假如相应的请求并没有包含token的话,registry会将该请求重定向到token service。3) Database
用于存放工程元数据、用户数据、角色数据、同步策略以及镜像元数据。
Job services: 主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
Log: 负责收集其他模块的日志到一个地方
三、Harbor使用
1、安装 docker
1.1 安装依赖
## 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
1.2 添加阿里云yum源
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.3 更新yum源及安装Docker-ce
yum update -y && yum install -y docker-ce
1.4 编写daemon.json配置文件
mkdir /etc/docker ## 创建 /etc/docker 目录
## 配置 daemon. insecure-registries 是后续用来访问 harbor 私有仓库的, 表示可信任的仓库地址
## 192.168.3.155:9999为harbor私服的地址和端口
cat > /etc/docker/daemon.json <<eof< span="">
{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"log-driver": "json-file",
"registry-mirrors": [
"https://tosnxdv7.mirror.aliyuncs.com"
],
"log-opts": {
"max-size": "100m"
},
"insecure-registries": [
"192.168.3.193"
]
}
EOF</eof<>
1.5 重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
2、安装 docker-compose
wget https://linux-soft-ware.oss-cn-shenzhen.aliyuncs.com/docker-compose
chmod +x docker-compose
mv docker-compose /usr/local/bin
3、安装 Harbor
3.1 下载Harbor
wget https://github.com/goharbor/harbor/releases/download/v2.1.4/harbor-offline-installer-v2.1.4.tgz
3.2 解压
## 创建解压目录
mkdir /usr/app
## 解压到指定目录
tar xf harbor-offline-installer-v2.1.4.tgz -C /usr/app
3.3 编辑harbor.yml配置文件
vi /usr/app/harbor
cp harbor.yml.tmpl harbor.yml
vim /usr/app/harbor.yml
hostname: 192.168.3.193 # 修改为自己的IP地址或者域名
# http related config
## 删除下面的https配置
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# 修改登录Harbor的web端密码(用于管理界面的登录)
harbor_admin_password: 123456
4、安装 harbor
4.1 安装Harbor
./harbor/install.sh
4.2 访问 harbor
输入 https://192.168.3.193, 输入 admin/12345
5、测试能否登陆私有仓库
5.1 在客户端编辑Docker配置文件
vi /etc/docker/daemon.json
### 编辑内容如下:
}
"exec-opts": [
"native.cgroupdriver=systemd"
],
"log-driver": "json-file",
"registry-mirrors": [
"https://tosnxdv7.mirror.aliyuncs.com"
],
"log-opts": {
"max-size": "100m"
},
## 添加Harbor仓库的地址(必须添加)
"insecure-registries": [
"192.168.3.193"
]
}
5.2 加载配置文件重启Docker服务
systemctl daemon-reload && systemctl restart docker
5.3 使用docker login测下,是否成功
docker login 192.168.3.193
Username: admin
Password: 123456
6、测试镜像上传和下载
6.1 docker tag打标签
docker tag nginx:latest 192.168.3.193/test/nginx:V2
6.2 docker push 推送镜像到仓库
docker push 192.168.3.193/test/nginx:V2
6.3 docker pull 拉取镜像
docker pull 192.168.3.193/test/nginx:V2