目录
一、搭建本地私有仓库
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 -s
和uname -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