Docker--harbor

目录

一、搭建本地私有仓库

Docker容器的重启策略如下:

二、Harbor 简介

2.1Harbor是什么

2.2Harbor的特性

2.3Harbor的构成

2.4架构的数据流向

三、harbor部署以及配置文件

环境准备

部署Docker-Compose服务

下载或上传Docker-Compose:

赋予执行权限:

验证安装:

部署 Harbor 服务

下载或上传Harbor安装程序:

解压安装程序:

修改Harbor安装的配置文件:

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

启动Harbor

切换到Harbor安装目录:

执行prepare命令:

执行install.sh命令:

切换到Harbor安装目录:

执行docker-compose ps命令:

创建一个新项目并上传镜像到Harbor

在其他客户端上传镜像

四、维护管理harbor的项目

通过Harbor Web创建项目

要通过Harbor Web创建项目,可以按照以下步骤进行操作:

创建 Harbor 用户

创建Harbor用户并分配权限

添加项目成员

在客户端上使用普通账户操作镜像

查看日志

修改 Harbor.cfg 配置文件

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

迁移Harbor服务:

一、搭建本地私有仓库

#首先下载 registry 镜像

docker pull registry

#配置 daemon.json 文件: 在 /etc/docker/daemon.json 文件中添加私有镜像仓库地址,同时配置其他参数

vim /etc/docker/daemon.json

{

"insecure-registries": ["192.168.86.20:5000"], #添加,注意用逗号结尾

"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]

}

重启 Docker 服务:

systemctl restart docker.service

#运行 registry 容器

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

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行

-v:把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;

-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了

--restart=always:这是重启的策略,在容器退出时总是重启容器

--name registry:创建容器命名为registry

registry:latest:这个是刚才pull下来的镜像

Docker容器的重启策略如下:

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

on-failure:在容器非正常退出时(退出状态非0),才会重启容器

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

always:在容器退出时总是重启容器

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

#为镜像打标签

docker tag centos:7 192.168.86.20:5000/centos:v1

#上传到私有仓库

docker push 192.168.86.20:5000/centos:v1

#列出私有仓库的所有镜像

curl http://192.168.86.20:5000/v2/_catalog

#出私有仓库的 centos 镜像有哪些tag

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

#先删除原有的 centos 的镜像,再测试私有仓库下载

docker rmi -f 8652b9f0cb4c

docker pull 192.168.86.20:5000/centos:v1

二、Harbor 简介
2.1Harbor是什么

harbor是一个开源的云原生镜像仓库, 它允许仓库用户存储,签名和分发docker镜像。 你可以将harbor看做是私有的docker hub,它提供了更新安全性和控制性, 让组织能够安全的存储和管理镜像。 harbor RBAC (基于角色访问控制),可以对不同的用户和用户组进行灵活全向控制,并且提供灵活的复制和同步策略,可以实现多个harbor实例的镜像复制和同步。

2.2Harbor的特性

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做了封装,扩展了自己的业务模板。

2.3Harbor的构成

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

① proxy :通过一个前置的反向代理统一接收浏览器 docker 客户端请求的,并且请求转发给后端不同的服务,这是一个方向代理组件

② registry: 负责存储 docker镜像 处理docker pull/push 命令来上传和下载

③ core services:harbor核心功能,包括 UI、webhook、token 服务

webhook: 负责网站的一些服务功能

token:令牌 提供身份认证服务

UI: 显示可视化界面

④ database :为core service 提供数据的服务 数据库记录镜像的元信息及用户的身份信息

⑤ log collector: 负责收集其他组件一些日志,以供我们进行分析以及健康检查等

⑥ job services:主要做镜像复制,本地镜像可以同步到其他harbor私有仓库中

⑦ adminserver: 主要是做一个后端配置个数据管理者 ,没有太多功能

2.4架构的数据流向

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

② proxy 会先请求转发给后端 core services

③ core services包含 UI token(身份认证) webhook(网站的一些服务功能)

④ 转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过core services中token令牌的身份验证服务才行

⑤ 每一次下载和上传都会产生操作记录,生成日志,保存database 中

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

三、harbor部署以及配置文件
环境准备

Harbor服务器 192.168.86.20 docker-ce、docker-compose、harbor-offline-v1.2.2 client服务器 192.168.86.30 docker-ce

Harbor服务器是一个用于管理和存储Docker镜像的私有仓库。它安装了docker-ce(Docker的社区版)、docker-compose(用于管理多个Docker容器的工具)和harbor-offline-v1.2.2(Harbor的离线版本1.2.2)。

客户端服务器是一个使用Docker的服务器,它安装了docker-ce。它可以通过网络连接到Harbor服务器,并使用Harbor提供的功能来管理和获取Docker镜像。

这个架构允许在Harbor服务器上集中管理和存储Docker镜像,并通过客户端服务器来访问和使用这些镜像。

部署Docker-Compose服务
下载或上传Docker-Compose:

使用curl命令下载Docker-Compose二进制文件。该命令会从GitHub上的docker/compose仓库下载特定版本的Docker-Compose。请注意,uname -suname -m是用于获取操作系统和机器架构的命令。

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

赋予执行权限:

使用chmod命令为下载的Docker-Compose二进制文件赋予执行权限。

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

验证安装:

使用docker-compose命令验证Docker-Compose的安装是否成功。

docker-compose --version

部署 Harbor 服务
下载或上传Harbor安装程序:

使用wget命令下载Harbor离线安装程序。该命令会从指定的URL下载Harbor离线安装程序的压缩包。

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

解压安装程序:

使用tar命令解压下载的Harbor离线安装程序压缩包,并将其解压到/usr/local/目录下。

tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

修改Harbor安装的配置文件:

使用vim或其他文本编辑器打开Harbor的配置文件harbor.cfg。根据需要修改以下两个配置项:

vim /usr/local/harbor/harbor.cfg

第5行:将"hostname"设置为Harbor服务器的IP地址或域名。 hostname = 192.168.86.20

第59行:将"harboradminpassword"设置为管理员的初始密码。默认的用户名/密码是admin/Harbor12345。

harbor_admin_password = Harbor12345

保存并关闭文件

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下: ●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.86.20 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。

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

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

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

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

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

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

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

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

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

Harbor的默认镜像存储路径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。

这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运行之前修改。

如果希望将 Docker 镜像存储到其他的磁盘路径,可以修改这个参数。

启动Harbor

在配置好了harbor.cfg文件之后,可以按照以下步骤启动Harbor:

切换到Harbor安装目录:

使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor/

执行prepare命令:

运行./prepare命令,为Harbor启动的容器生成必要的文件和环境。

./prepare

执行install.sh命令:

运行./install.sh命令,它将拉取Harbor镜像并启动容器。

./install.sh

查看 Harbor 启动镜像

要查看Harbor启动的镜像,可以按照以下步骤进行:

切换到Harbor安装目录:

使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor/

执行docker-compose ps命令:

运行docker-compose ps命令,它将显示Harbor启动的容器及其相关信息,包括容器的名称、状态和所使用的镜像。

docker-compose ps

创建一个新项目并上传镜像到Harbor

在浏览器中访问Harbor的WEB UI界面: 使用http://192.168.86.20访问Harbor的WEB UI界面。默认的管理员用户名和密码是admin/Harbor12345。

登录并创建新项目: 在登录界面输入管理员用户名和密码后,点击登录按钮。然后点击"+项目"按钮创建一个新项目。

填写项目信息: 在创建新项目的界面中,填写项目名称为"myproject-kgc",然后点击"确定"按钮创建新项目。

使用Docker命令登录并推送镜像: 使用以下Docker命令在本地登录Harbor并推送镜像。默认情况下,Registry服务器在端口80上监听。

登录Harbor:

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

下载镜像进行测试:

docker pull nginx

打标签:

docker tag nginx:latest 127.0.0.1/myproject-kgc/nginx:v1

上传镜像到Harbor:

docker push 127.0.0.1/myproject-kgc/nginx:v1

在Harbor界面查看镜像: 在Harbor的WEB UI界面中,导航到"myproject-kgc"目录下,将看到上传的镜像及其相关信息。

在其他客户端上传镜像

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

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

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

要在其他客户端上传镜像到Harbor,解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。

在Docker客户端配置操作: 使用vim或其他文本编辑器打开Docker服务的配置文件docker.service。

vim /usr/lib/systemd/system/docker.service

在第13行修改ExecStart参数,添加--insecure-registry选项并指定Harbor服务器的IP地址。

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

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.86.20

保存并关闭文件。

重启Docker服务: 使用systemctl命令重新加载配置文件并重启Docker服务。

systemctl daemon-reload

systemctl restart docker

再次登录Harbor: 使用docker login命令登录Harbor。可以使用用户名和密码进行登录,但请注意使用--password-stdin选项更安全。

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

登录成功后,凭据将被保存在/root/.docker/config.json文件中,以便下次登录时可以直接使用凭据登录Harbor。

下载和上传镜像: 使用docker pull命令下载镜像,并使用docker tag和docker push命令将镜像打标签并上传到Harbor。

docker pull 192.168.86.20/myproject-kgc/nginx:v1

docker pull cirros

docker tag cirros:latest 192.168.86.20/myproject-kgc/cirros:v2

docker push 192.168.86.20/myproject-kgc/cirros:v2

刷新Harbor的Web管理界面: 在Harbor的WEB UI界面中,导航到"myproject-kgc"项目下,将看到上传的镜像及其相关信息。

四、维护管理harbor的项目
通过Harbor Web创建项目
要通过Harbor Web创建项目,可以按照以下步骤进行操作:

打开Harbor Web界面并登录。

导航到仓库页面,通常位于导航栏的顶部或侧边栏中。

在仓库页面上,将看到一个项目列表。单击列表上方的"+项目"按钮。

在弹出的对话框中,填写项目的名称。

如果你希望项目是私有的(只有特定用户或团队可以访问),请确保项目级别设置为"私有",并取消勾选相关选项。

如果你希望项目是公共的(任何人都可以访问),请将项目级别设置为"公共仓库",并保持相关选项处于选中状态。

单击"创建"按钮以创建项目。

现在,就可以将镜像推送到该项目中。在推送之前,请确保已经在本地配置了正确的Docker客户端,并且已经登录到Harbor仓库(如果项目是私有的)。

推送镜像后,其他用户将能够通过Harbor Web界面或命令行下载该项目下的镜像。

创建 Harbor 用户
创建Harbor用户并分配权限

在Harbor的Web管理界面中,单击"系统管理",然后选择"用户管理"。

在用户管理页面上,单击"+用户"按钮。

填写用户名为"test-zhangsan",邮箱为"test-zhangsan@qq.com",全名为"zhangsan",密码为"Abc123456",并在注释中添加"管理员"(可选)。

单击"创建"按钮以创建用户。如果需要将该用户设置为管理员角色或进行其他操作,可以单击左侧的"…"按钮进行相应设置。

添加项目成员

导航到项目页面,找到你的项目(例如"myproject-test")并单击进入。

在项目页面上,找到"成员"选项卡并单击。

单击"+成员"按钮。

填写之前创建的用户"test-zhangsan",并将角色设置为"开发人员"。

单击"创建"按钮以添加项目成员。如果需要更改成员角色或进行其他操作,可以单击左侧的"…"按钮进行相应设置。

在客户端上使用普通账户操作镜像

首先,删除本地已经打标签的镜像

docker rmi 192.168.86.20/myproject-test/cirros:v2

退出当前用户,并使用之前创建的账户"test-zhangsan"进行登录:

docker logout 192.168.86.20

docker login 192.168.86.20

或者

docker login -u test-zhangsan -p Abc123456 http://192.168.86.20

下载和上传镜像进行测试(示例中的命令是下载名为"192.168.86.20/myproject-test/cirros:v2"的镜像,然后将其重新打标签为"192.168.86.20/myproject-test/cirros:v3"并上传):

docker pull 192.168.86.20/myproject-test/cirros:v2

docker tag cirros:latest 192.168.86.20/myproject-test/cirros:v3

docker push 192.168.86.20/myproject-test/cirros:v3

查看日志

登录到Harbor的Web管理界面。

导航到"系统管理"或"管理"选项卡,通常位于导航栏的顶部或侧边栏中。

在系统管理页面上,会找到一个名为"日志"、"日志管理"或类似的选项。单击该选项以进入日志管理页面。

在日志管理页面上,可以选择查看不同类型的日志,例如系统日志、访问日志、操作日志等。选择"操作日志"选项以查看用户相关操作的日志。

根据你的需求,可以按时间顺序浏览日志,也可以使用搜索功能来筛选特定的操作日志。

如果需要导出日志,通常会有一个"导出"或"下载"按钮,可以使用该按钮将日志保存到本地。

修改 Harbor.cfg 配置文件

要修改Harbor的配置文件harbor.cfg中的可选参数

停止现有的Harbor实例: 在Harbor安装目录中运行以下命令,停止并删除现有的Harbor容器和相关卷。

cd /usr/local/harbor

docker-compose down -v

编辑harbor.cfg文件: 使用vim或其他文本编辑器打开harbor.cfg文件,对其中的可选参数进行修改。

vim harbor.cfg

注意:只能修改harbor.cfg文件中的可选参数,不要修改其他部分。

运行prepare脚本: 运行./prepare命令,它将根据新的配置文件填充配置。

./prepare

重新创建并启动Harbor实例: 运行docker-compose up -d命令,它将重新创建并启动Harbor容器。

docker-compose up -d

如果遇到防火墙相关的报错,请确保firewalld服务已启动,并执行以下命令重启防火墙服务:

systemctl restart firewalld.service

docker-compose up -d

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

在Harbor服务器上操作:

切换到Harbor安装目录: 使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor

移除Harbor服务容器: 运行docker-compose down -v命令,它将停止并删除Harbor服务容器,并删除相关的卷。

docker-compose down -v

打包镜像数据: 如果你希望保留镜像数据,可以将镜像数据目录打包为一个压缩文件。

ls /data/registry/docker/registry/v2/repositories/myproject-test

cd /data/registry/docker/registry/v2/repositories/myproject-test

tar zcvf test-registry.tar.gz ./*

这将在当前目录下创建一个名为test-registry.tar.gz的压缩文件,其中包含myproject-test项目的镜像数据。

迁移Harbor服务:

如果需要重新部署Harbor并移除所有Harbor服务容器的数据,可以按照以下步骤进行操作:

切换到Harbor安装目录: 使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor

移除Harbor服务容器和数据: 运行docker-compose down -v命令,它将停止并删除Harbor服务容器,并删除相关的卷和数据。

docker-compose down -v

删除数据库和镜像数据: 运行rm -r命令,删除Harbor的数据库和镜像数据目录。

rm -r /data/database

rm -r /data/registry

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-20 12:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-20 12:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-20 12:22:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-20 12:22:02       20 阅读

热门阅读

  1. git format-patch怎么用

    2024-01-20 12:22:02       30 阅读
  2. js事件循环以及promise

    2024-01-20 12:22:02       30 阅读
  3. 【QT】QThread 成员函数

    2024-01-20 12:22:02       24 阅读
  4. 十种较流行的网络安全框架及特点分析

    2024-01-20 12:22:02       42 阅读
  5. Curl- go的自带包 net/http实现

    2024-01-20 12:22:02       31 阅读