Docker容器:本地私有仓库、harbor私有仓库部署与管理

文章目录

一.本地私有仓库

1.本地私有仓库概述

(1)docker本地仓库,存放镜像,本地的机器上传和下载,pull/push。

(2)私有仓库的优点:

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

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

2.搭建本地私有仓库

复制代码
docker pull registry 
#下载registry镜像
vim /etc/docker/daemon.json
#daemon.json中添加私有镜像仓库地址,内容如下 
{
 
	"insecure-registries":["192.168.198.11: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.198.11:5000/centos:v1  
#为镜像重新打私有仓库标签

docker  push  192.168.198.11:5000/centos:v1  
#将v1版本上传到私有仓库中

curl   192.168.198.11:5000/v2/_catalog    
#列出私有仓库的所有镜像

curl    192.168.198.11:5000/v2/centos/tags/list   
#李处私有仓库中centos的所有标签镜像

docker  rmi    192.168.198.11:5000/centos:v1  
#删除本地原有v1镜像

docker pull     192.168.198.11:5000/centos:v1  
#测试从私有仓库下载v1镜像

3.容器重启策略简介

--restart=always重启策略:

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

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

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

always:退出总是重启容器

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

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

1.什么是harbor

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

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

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

2.Harbor的特性

(1)基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。

(2)基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。

(3)支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。

(4)镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。

(5)图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。

(6)审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

(7)支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

(8)Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

3、Harbor的构成

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

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

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

认证方式有三种:

令牌------处于单向,如会限制几个用户登录

用户密码

SSL------双向认证(有密钥和令牌)

(3)Core services: Harbor的核心功能,主要提供以下3个服务:

  • UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。

  • WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。

  • Token 服务:负责根据用户权限 给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。

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

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

(6)Log collector(harbor-log): 负责收集其他组件的日志到一个地方。

4.Harbor私有仓库架构及数据流向

客户端通过nginx反向代理依次访问harbor的核心组件core services中的UI、签发token令牌同意之后再经过触发器对镜像仓库上传和下载,在经过

core services 验证的同时,database将用户信息权限、日志、镜像分组信息存入,上传下载出的镜像使用job services组件与远端harbor同步镜像,其中log collector是用来手机各组件上的所有操作记录日志整个过程

5.harbor部署及配置(192.168.198.11)

主机 操作系统 IP地址 主要软件
服务端 Centos 7 192.168.198.11 docker、docker-compose 、harbor-offline-v1.1.2
客户端 Centos 7 192.168.198.13 docker

提前部署好docker容器并下载好centos:7镜像

(1)部署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
#查看版本

(2)部署Harbor服务

复制代码
cd /opt
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
#将harbor压缩包传到/opt目录下,解压到/usr/local目录下

cp /usr/local/harbor/harbor.cfg harbor.cfg,bak
vim /usr/local/harbor/harbor.cfg
#修改harbor配置文件内容如下
hostname = 192.168.198.11
#第5行修改,设置为Harbor服务器的IP地址或者域名
harbor_admin_password = Harbor12345
第59行指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345可不修改,保存退出

cd /usr/local/harbor/
./prepare
./install.sh
#进入harbor目录执行脚本检查安装harbor

报错信息:此报错是由于之前的已经存在registry容器,需先把之前的容器删除,(根据企业现场环境判断是否删除)然后再进入harbor目录执行脚本检查安装harbor

ERROR: for registry Cannot create container for service registry: b'Conflict. The container name "/registry" is already in use by container "589c96a3b8907115fcffd78efea4ece3b037aff7a4bb0ebe644cd636fb609860". You have to remove (or rename) that container to be able to reuse that name.'

ERROR: Encountered errors while bringing up the project.

复制代码
docker-compose ps
#安装成功够在本目录查看

(3)登录创建项目

①浏览器访问http://192.168.198.11登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345

②登录成功后创建一个新项目

(4)登录仓库并上传镜像

复制代码
#192.168.198.11上操作即搭建私有仓库的服务端
docker login -u admin -p Harbor12345  http://127.0.0.1
#登录到私有仓库中
docker images
#查看本机有哪些镜像
docker push 127.0.0.1/myproect.sky/centos:v1
#nginx重新打标签为私有仓库项目下的nginx:v1版本
docker push 127.0.0.1/myproect.sky/centos:v1
#将此镜像上传到私有仓库的myproect.sky项目

在 Harbor WEB UI 界面上查看上传的镜像

6.客户端测试(192.168.198.13)

(1)客户端登录报错解决

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

docker login -u admin -p Harbor12345 http://192.168.198.11

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

Error response from daemon: Get "https://192.168.198.11/v2/": dial tcp 192.168.198.11:443: connect: connection refused

解决方法:

1)在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。

cp /usr/lib/systemd/system/docker.service docker.service.bak

vim /usr/lib/systemd/system/docker.service --13行--修改为

ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.198.11 --containerd=/run/containerd/containerd.sock

2)重新加载system并重启docker

systemctl daemon-reload

systemctl restart docker.service

(2)客户端私有仓库pull镜像

复制代码
#查看客户端的镜像
docker images
#登录私有仓库,将自动保存凭据到/root/.docker/config.json,下次登录时可直接使用凭据登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.198.11
#从harbor私有仓库下载镜像
docker pull 192.168.198.11/myproect.sky/centos:v1
#查看下载下来的镜像
docker images

(3)客户端私有仓库push镜像

复制代码
docker pull tomcat
#下载一个tomcat镜像
docker tag tomcat:latest 192.168.198.11/myproect.sky/tomcat:v2
#重新给tomcat进行打标签为私有仓库myproject-kgc项目中的镜像
docker push 192.168.198.11/myproect.sky/tomcat:v2 
#将重新打标签的镜像上传到私有仓库中

在服务端的界面查看

7.harbor维护及普通用户管理

(1)创建用户

(2)添加项目成员

(3)普通用户操作私有仓库

复制代码
#客户端操作192.168.198.13客户端执行
docker logout
#退出之前的登录用户
docker login -u summer -p Harbor12345 http://192.168.198.11
#使用创建的用户登录私有仓库,若为公开库下载镜像时不需要登录
docker images
docker rmi 192.168.198.11/myproect.skycentos:v1
#查看有哪些镜像,删除本地的v1镜像
docker pull 192.168.198.11/myproect.sky/centos:v1
#创建的用户从私有仓库pull下载v1镜像
docker tag 192.168.198.11/myproect.sky/centos:v1192.168.198.11/myproect.sky/centos:v10
#重新打标签给v1
docker push 192.168.30.11/myproject-kgc/nginx:v10
#创建的用户上传镜像到私有仓库push

(4)日志查看操作记录

8.Harbor.cfg的所需参数和可选参数

(1)所需参数

所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:

1)hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.10.23 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名

2)ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https

3)max_job_workers:镜像复制作业线程。

4)db_password:用于db_auth 的MySQL数据库root 用户的密码。

5)customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。

6)ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。

7)secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

(2)可选参数

可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。

注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbor 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。 具体参数如下:

1)Email:Harbor 需要该参数才能向用户发送"密码重置"电子邮件,并且只有在需要该功能时才启用。请注意,在默认情况下 SSL 连接时没有启用。如果 SMTP 服务器需要 SSL,但不支持 STARTTLS,那么应该通过设置启用 SSL email_ssl = TRUE。

2)harbor_admin_password:管理员的初始密码,只在 Harbor 第一次启动时生效。之后, 此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。

3)auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。

4)self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbor 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。

5)Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。

6)project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。 如果将其值设置为"adminonly",那么只有 admin 可以创建项目。

7)verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。

总结及扩展

1.docker harbor私有仓库操作过程

(1)所有请求或认为的操作都会首先交给proxy(反向代理)

(2)proxy会将请求转发给后端core services

(3)UI、token(身份验证服务)、wehook(网站的一些服务功能)

(4)转发给registry(镜像存储),若需下载镜像等权限操作,需通过token令牌的身份验证服务才可以

(5)每一次下载和上传都产生操作记录,生成日志,保存在database中

(6)database记录保存镜像的元信息以及用户与组的信息,通过验证授权才能允许相关操作

2.使用堡垒机的方式流程

相关推荐
白白白飘7 分钟前
在 Windows 上安装 Docker 及验证
windows·docker·容器
自在极意功。21 分钟前
k8s实战
云原生·容器·kubernetes
邓草33 分钟前
phpStudy v8.1 离线版一键安装包(小皮面板)
运维·服务器·mysql
ego.iblacat1 小时前
Web 技术与 Nginx 网站环境部署
运维·前端·nginx
野生工程师1 小时前
【Linux基础】CentOS Stream10详细安装教程
linux·运维·centos
j200103221 小时前
K8s——安全机制
安全·容器·kubernetes
无效的名字1 小时前
最快速在服务器上搭建代理
运维·服务器
liurunlin8881 小时前
Linux系统安装部署Tomcat
linux·运维·tomcat
wanhengidc1 小时前
服务器 数据安全稳定
运维·服务器·数据库·游戏·智能手机
JZC_xiaozhong1 小时前
BPM如何打通“请款→审批→付款”全链路?构建企业资金流转闭环
大数据·运维·数据库·数据分析·数据集成与应用集成·业务流程管理·流程监控