0
点赞
收藏
分享

微信扫一扫

Docker之 Harbor概述及构建

绣文字 2022-03-31 阅读 78

Docker之 Harbor概述及构建

先搭建本地私有仓库

1、下载registry镜像

docker pull registry
docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       7         eeb6ee3f44bd   4 weeks ago   204MB
registry     latest    b2cb11db9d3d   6 weeks ago   26.2MB

2、在daemon.json文件中添加私有仓库地址

vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://3c7tpzyf.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.118.18:5000"]
}

[root@docker ~]# systemctl restart docker.service 

3、运行容器

docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latestea1409afd42194b23d2633e244f87a4a0beb97aac989fc0b49ef773a3fbcb546

docker ps -a
-itd 在容器中打开一个伪终端进行交互操作,并在后台运行
-v 把宿主机的/data/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化
-p 映射端口,访问宿主机的5000端口就访问到registry容器的服务了
–restart=always 这是重启的策略,在容器退出时总是重启容器
–name registry 创建容器命名为registry
registry:latest 这个是刚才pull下来的镜像
docker容器重启策略
no 默认策略。在容器退出时不重启容器
no-failure 在容器非正常退出时(退出状态非0),才会重启容器
no-failure:3 在容器非正常退出时重启容器,最多重启3次
always 在容器退出时总是重启容器
unless-stopped 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

4、给镜像打标签

docker tag centos:7 192.168.118.18:5000/centos:test1
docker images

5、上传到私有仓库

docker push 192.168.118.18:5000/centos:test1 

6、列出私有仓库所以镜像

curl http://192.168.118.18:5000/v2/_catalog

7、看私有仓库centos镜像有哪些tag

 curl http://192.168.118.18:5000/v2/centos/tags/list

8、删除原有的centos镜像在测试私有仓库下载

docker rmi -f 192.168.118.18:5000/centos:test1 centos:7 

docker pull 192.168.118.18:5000/centos:test1
docker images

一、概述 Harbor

1、简介

Harbor 是VMware公司开源的云本地 registry 仓库,有可视化的Web管理界面,可以方便的管理和储存 Docker 镜像。Harbor 支持在多个仓库直接进行复制镜像,提供用户管理和访问控制和活动审计。

2、优势
  • 基于角色控制
  • 基于镜像的复制策略
  • 支持LDAP/AD域,通过VPN连接域使用
  • 图像删除和垃圾收集
  • 图像UI,方便
  • 审计,此功能使用较少,一般企业中用ELK收集、分析日志
  • RESTful API(用URL定位资源\、用HTTP动词(GET、POST、PUT、DELETE)描述操作
3、架构

h1.png

Proxy 通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务
Registry 责存储Docker镜像,并处理docker push/pull命令
Coreservices Harbor的核心功能,包括UI、webhook、token服务
Database 为coreservices提供数据库服务
Log collector 负责收集其他组件的log,供日后进行分析

==过程==:所有的请求都经过proxy代理,proxy代理转发给Core services和Registry,其中Core services包括UI界面、token令牌和webhook网页服务功能,Registry主要提供镜像存储功能。如果要进行下载上传镜像,要经过token令牌验证然后从Registry获取或上传镜像,每一次下载或上传都会生成日志记录,会记入Log collector,而用户身份权限及一些镜像语言信息会被存储在Database中。

二、相关参数

配置文件:/usr/local/harbor/harbor.cfg
1、所需参数
所需参数 (修改此参数后,需要运行 install.sh脚本重新安装 Harbour,参数才会生效。)
hostname 用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN)例如192.168.118100 或test.com。
ui_url_protocol(参数选项:http 或 https,默认为 http) 用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。
max_job_workers 镜像复制作业线程。
db_password 用于db_auth 的MySQL数据库root 用户的密码。
customize_crt 该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。
ssl_cert SSL 证书的路径,仅当协议设置为 https 时才应用。
secretkey_path 用于在复制策略中加密或解密远程register 密码的密钥路径。不建议配置,有很大的安全隐患
2、可选参数

这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。 如果进入Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数 的更新,Harbor.cfg 将被忽略。
==注意==:如果选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须在注册或在 Harbor中创建任何新用户之前设置所需的

可选参数
auth_mode 当系统中有用户时(除了默认的 admin 用户),auth_mode 不能被修改。
Email Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。
harbour_admin_password 管理员的初始密码,只在Harbour第一次启动时生效。默认的用户名/密码是 admin/Harbor12345。
auth_mode 使用的认证类型默认情况下,它是 db_auth
self_registration 启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在Harbour中创建新用户。
Token_expiration 由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。
project_creation_restriction 用于控制哪些用户有权创建项目的标志,表示哪些用户可以创建项目。默认情况下,每个人都可以创建一个项目。
verify_remote_cert 打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。

默认情况下,Harbour 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如S3、Openstack Swif、Ceph 等。但需要更新common/templates/registry/config.yml 文件。

三、harbor构建

1、构建harbor

Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版上。
服务端主机需要安装Docker 和 Docker Compose。

安装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
cp -p docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
  1. 下载harbor安装程序
在线下载
wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
  1. 配置harbor参数文件
vim /usr/local/harbor/harbor.cfg

//第5行
hostname = 192.168.118.18

h2.png

  1. 启动harbor
sh /usr/local/harbor/install.sh
  1. 查看启动镜像和容器
docker images

h3.png
h4.png

检查服务是否开启

cd /usr/local/harbor/
docker-compose ps

h5.png

  1. 去界面创建项目

此时可以打开浏览器访问 http://192.168.118.18的管理页面,默认的管理员用户名和密码是
admin/Harbor12345。

h6.png
h7.png
h8.png
h9.png

  1. 去测试(去另一台虚拟机上)
登录

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

h10.png

  1. 上传镜像
docker login  -u admin -p Harbor12345 http://192.168.118.18
#-------------------输出内容------------------------------------------
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.118.18/v2/: dial tcp 192.168.118.18:443: connect: connection refused

h11.png

docker pull tomcat

docker images

docker tag tomcat 192.168.118.18/jichao/tomcat:v2

docker push 192.168.118.18/liuyan/tomcat:v2

然后再回去查看是否成功

2、维护和管理

1、创建harbor用户

h12.png
h13.png
h14.png
h15.png

再去输入你刚刚创建的姓名

2、在客户端上操作

删除之前打标签的镜像

docker rmi 192.168.118.18/jichao/tomcat:v2
#----------------------输出内容-----------------------------
Untagged: 192.168.118.18/testproject/tomcat:v2
Untagged: 192.168.118.18/jichao/tomcat@sha256:a960c08c4beb67e2c2513805cf3e95a4d09f8585a948dd09e04d4245d59c5a91

测试创建的新用户可用不

//注销登录
docker logout 192.168.118.18
#------------------输出内容--------------------------------
Removing login credentials for 192.168.118.18
#--------------------------------------------------------

//使用新创建的用户和密码登录私有仓库
docker login 192.168.118.18
#------------------输出内容-------------------------
Username: liuyan
Password:    //输入密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
#--------------------------------------------------

//从私有仓库下载镜像
docker pull 192.168.118.18/liuyan/nginx:v1
#-----------------------输出内容-----------------------------
v1: Pulling from testproject/nginx
a076a628af6f: Pull complete 
0732ab25fa22: Pull complete 
d7f36f6fe38f: Pull complete 
f72584a26f32: Pull complete 
7125e4df9063: Pull complete 
Digest: sha256:0b159cd1ee1203dad901967ac55eee18c24da84ba3be384690304be93538bea8
Status: Downloaded newer image for 192.168.118.18/testproject/nginx:v1
192.168.118.18/testproject/nginx:v1

//查看镜像
docker images
#-------------------输出内容---------------------------------
REPOSITORY                          TAG       IMAGE ID       CREATED        SIZE
tomcat                              latest    040bdb29ab37   2 months ago   649MB
192.168.163.100/testproject/nginx   v1        f6d0b4767a6c   2 months ago   133MB

h16.png

3、移除harbor服务容器

在harbor服务器上操作

docker-compose down -v
Stopping nginx              ... done
Stopping harbor-jobservice  ... done
Stopping harbor-ui          ... done
Stopping registry           ... done
Stopping harbor-db          ... done
Stopping harbor-adminserver ... done
Stopping harbor-log         ... done
Removing nginx              ... done
Removing harbor-jobservice  ... done
Removing harbor-ui          ... done
Removing registry           ... done
Removing harbor-db          ... done
Removing harbor-adminserver ... done
Removing harbor-log         ... done
Removing network harbor_harbor

如需重新部署,需要移除 Harbor 服务容器全部数据
持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的
/var/log/Harbor/目录下。

rm -rf /data/database/
rm -rf /data/registry/

h17.png
h18.png

举报

相关推荐

0 条评论