一、本地私有仓库

1、本地私有仓库简介

docker本地仓库,存放镜像,本地的机器上传和下载,pull/push。
使用私有仓库有许多优点:

①节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;

②提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用

2、搭建本地私有仓库

docker pull registry 
#下载registry镜像
vim /etc/docker/daemon.json
#daemon.json中添加私有镜像仓库地址,内容如下
 
{"insecure-registries":["192.168.154.10:5000"],
#此行注意填写自己的ip注意最后有逗号
 
​     "registry-mirrors": ["https://b0u3e8x4.mirror.aliyuncs.com"]
 
}
systemctl   restart  docker.service
#重启docker服务使本地私有仓库生效
docker run -itd -v /data/registry:/var/lib/registry  -p  5000:5000 --restart=always  --name registry registry:latest
#运行registry容器,-v指定数据卷挂载目录,-p指定映射端口号,--restart=always容器重启策略即开机自启此容器
docker tag centos:7 192.168.154.10:5000/centos:v1  
#为镜像重新打私有仓库标签
docker  push  192.168.154.10:5000/centos:v1  
#将v1版本上传到私有仓库中
curl   192.168.154.10:5000/v2/_catalog    
#列出私有仓库的所有镜像
curl    192.168.154.10:5000/v2/centos/tags/list   
#处理私有仓库中centos的所有标签镜像
docker  rmi    192.168.154.10:5000/centos:v1  
#删除本地原有v1镜像
docker pull     192.168.154.10:5000/centos:v1  
#测试从私有仓库下载v1镜像

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、容器重启策略介绍

–restart=always重启策略:

no:默认策略,容器退出不重启

on-failure:容器非正常退出重启容器

on-failure:3:容器非正常退出最多重启4次容器

always:退出总是重启容器

unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

二、harbor私有仓库部署与管理

1、什么是harbor

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。

Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。

Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

2、Harbor的特性

①、基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
②、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
③、支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
④、镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
⑤、图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
⑥、审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
⑦、支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
⑧、Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

3、Harbor的构成

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。

Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。

Core services: Harbor的核心功能,主要提供以下3个服务: 1)UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。 2)WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。 3)Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。

Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。

Log collector(harbor-log): 负责收集其他组件的日志到一个地方。
在这里插入图片描述

4、harbor部署及配置

环境准备
Harbor服务器 192.168.154.10 docker-ce、docker-compose、harbor-offline-v1.2.2
client服务器 192.168.154.11 docker-ce

①部署docker-compose

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下载docker-compose包
chmod +x /usr/local/bin/docker-compose
#添加权限
docker-compose --version
#查看版本

②部署Harbor服务

1)下载或上传 Harbor 安装程序
Harbor的压缩包下载地址:https://github.com/goharbor/harbor/releases

wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
2)修改harbor安装的配置文件
vim /usr/local/harbor/harbor.cfg
--5--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.154.10
--59--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③登录创建项目

1)浏览器访问 http://192.168.154.10 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
在这里插入图片描述
注意:如果重启服务出现错误情况

vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
vim /etc/docker/daemon.json
systemctl restart network docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)登录成功后创建一个新项目
通过 Harbor Web 创建项目
在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

在这里插入图片描述
在这里插入图片描述

④登录仓库并上传镜像

#登录到私有仓库中
docker login -u admin -p Harbo12345 http://192.168.154.10
#将此镜像上传到私有仓库
docker push 192.168.154.10/library/nginx:v1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker tag nginx:1.14 192.168.154.10/myproject/nginx:v1
docker push 192.168.154.10/myproject/nginx:v1

在这里插入图片描述

5、客户端测试

①登录报错解决

其他客户端登录到 Harbor,就会报错。出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现错误。

#在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。
vim /usr/lib/systemd/system/docker.service
--13--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.154.10 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.154.10

#重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker

开一台带有docker服务的主机 192.168.154.11

vim /etc/docker/daemon.json
{
   "insecure-registries":  ["http://192.168.154.10"]
   "registry-mirrors":  ["https://6ijb8ubo.mirror.aliyuncs.com"]
}

添加docker-compose包
mv docker-compose /usr/local/bin

cd /usr/local/bin
chmod +x docker-compose
docker-compose --version

systemctl restart docker

在这里插入图片描述

② 客户端私有仓库pull镜像

docker pull 192.168.154.10/library/nginx:v1
docker images

在这里插入图片描述

pull不到myproject项目里的镜像,因为myproject设置的是私有的,所以要登录管理员账户,才能pull到

在这里插入图片描述

创建 Harbor 用户
创建用户并分配权限
在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“test”,邮箱为“test@qq.com”,全名为“test”,密码为“Harbor12345”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“…”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

角色 权限说明
访客 对于指定项目拥有只读权限
开发人员 对于指定项目拥有读写权限,但没用删除权限
维护人员 对于指定项目拥有读写权限,也能对修改其它配置,比如创建 Webhooks
项目管理员 除了读写权限,同时拥有用户管理/镜像扫描等管理权限
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加项目成员
单击项目 -> myproject -> 成员 -> + 成员,填写上述创建的用户 test 并分配角色为“开发人员”。
附:此时单击左侧“…”按钮仍然可对成员角色进行变更或者删除操作

在这里插入图片描述

③登录普通用户操作私有仓库

docker login -u test -p Harbor12345 http://192.168.154.10
docker tag nginx:1.14 192.168.154.10/myproject/nginx:v2
docker push 192.168.154.10/myproject/nginx:v2

在这里插入图片描述
在这里插入图片描述
注意:

docker pull 时,公开项目的镜像可以被任意用户拉取,但私有项目的镜像必须先登录项目的相关用户才能拉取。

docker push 时,必须先登录相关项目的用户,且登录的用户是具有上传权限的角色才能推送镜像。

④查看日志

Web 界面日志,操作日志按时间顺序记录用户相关操作

⑤修改 Harbor.cfg 配置文件

要更改 Harbor的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbor 的实例。

使用 docker-compose 管理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运行。

cd /usr/local/harbor
docker-compose down -v

vim harbor.cfg			#只能修改可选参数

./prepare

docker-compose up -d
//如果有以下报错,需要开启防火墙 firewalld 服务解决
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

systemctl restart firewalld.service
docker-compose up -d

⑥移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

在Harbor服务器上操作
(1)移除 Harbor 服务容器

cd /usr/local/harbor
docker-compose down -v

(2)把项目中的镜像数据进行打包
持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下

ls /data/registry/docker/registry/v2/repositories/myproject
cd /data/registry/docker/registry/v2/repositories/myproject
tar zcvf registry.tar.gz ./*

⑦如需重新部署,需要移除 Harbor 服务容器全部数据

cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry
GitHub 加速计划 / ha / harbor
23.24 K
4.68 K
下载
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
最近提交(Master分支:2 个月前 )
9e55afbb pull image from registry.goharbor.io instead of dockerhub Update testcase to support Docker Image Can Be Pulled With Credential Change gitlab project name when user changed. Update permissions count and permission count total Change webhook_endpoint_ui Signed-off-by: stonezdj <stone.zhang@broadcom.com> Co-authored-by: Wang Yan <wangyan@vmware.com> 9 天前
3dbfd422 Signed-off-by: wang yan <wangyan@vmware.com> 10 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐