学会Docker私有仓库Harbor仓库一篇就够了!!!

文章目录

  • 一、Harbor简介
  • 一:Harbor 的主要功能
  • 二:harbor的优势
  • 三:harbor的简易架构
  • 四:Harbor 部署
    • 4.1:环境准备
    • 4.2:安装compose 和 harbor
    • 4.4:客户端远程访问管理 harbor
    • 4.5:客户端下载、上传镜像到私有仓库
  • 五:Harbor 管理维护
    • 5.1:修改 Harbor.cfg 配置文件
    • 5.2:UI 界面操作

一、Harbor简介

  • 虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
  • Harbor是由VMware公司开源的企业级的Docker
    Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。
  • 它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP
    集成,日志审核等功能,完全的支持中文。

学会Docker私有仓库Harbor仓库一篇就够了!!!_第1张图片

一:Harbor 的主要功能

基于角色的访问控制

  • 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
    基于镜像的复制策略
Harbor是VMware公司的开源级的企业级DockerRegistry(仓库)项目,项目地址为 https://github.com/vmware/harbor.
Harbor的目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。
Harbor以docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成,以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以Docker容器的形式构建的,使用docker-compose来对它进行部署。用于部署Harbor的docker-compose模板位于/usr/local/bin/harbor/docker-compose.yml(自定义)
Docker harbor有可视化的web管理界面,可以方便管理Docker镜像,又提供了多个项目的镜像权限管理及控制功能

二:harbor的优势

基于角色控制:用户与Docker镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在统一命名空间(projec)里有不同的权限
图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
审计管理:所有这怒地镜像仓库的错都可以被记录追溯,用于审计管理
基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制。
支持LDAP认证:Harbor的用户授权可以使用已经存在的用户。
镜像删除和垃圾回收:image可以被删除并且回收image占用的空间。
简单的部署功能:harbor提供了online、offline安装,此外还提供了virtualappliance安装
harbor和docker registry的关系:harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

三:harbor的简易架构

学会Docker私有仓库Harbor仓库一篇就够了!!!_第2张图片

  • Proxy:反向代理工具
  • Registry:负责存储docker镜像,处理上传/下载命令。对用户进行访问控制,它指向一个token服务,强制用户的每次docker
    pull/push请求都要携带一个合法的token,registry会通过公钥对token进行解密验证。
  • Core service:Harbor的核心功能:

UI:图形界面
Webhook:及时获取registry上image状态变化情况,在registry上配置 webhook,把状态变化传递给UI模块。
Token服务:复杂根据用户权限给每个docker push/p/ull命令签发token。Docker客户端向registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向registry进行请求。

  • Database:提供数据库服务,存储用户权限,审计日志,docker image分组信息等数据
  • Log collector:为了帮助监控harbor运行,复责收集其他组件的log,供日后进行分析

四:Harbor 部署

4.1:环境准备

两台虚拟机:

harbor (harbor服务端,用于搭建私有仓库)
192.168.158.10 docker-ce、docker-compose(必须安装)、Harbor

client(客户端,用于远程访问私有仓库) 192.168.158.20 docker-ce

4.2:安装compose 和 harbor

1.确保docker-compose已能使用
[root@server1 harbor]# mv docker-compose /usr/local/bin/
[root@server1 harbor]# chmod +x /usr/local/bin/docker-compose
[root@server1 harbor]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
2.将harbor-offline-installer-v1.2.2.tgz软件包上传到/root目录下,解压到/usr/local/目录下
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
3. 配置 Harbor 参数文件
vim /usr/local/harbor/harbor.cfg
//5 hostname = 192.168.158.10
4.启动 Harbor
[root@server1 harbor]# cd /usr/local/harbor/
[root@server1 harbor]# ls
common                     docker-compose.yml     harbor.v1.2.2.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade
[root@server1 harbor]# sh install.sh  
5. 查看 Harbor 启动镜像
//查看镜像 docker images
//查看容器 docker ps -a
//查看compose编排的容器 docker-compose ps
6.打开浏览器访问 http://192.168.158.10的管理页面
默认的管理员用户名和密码是 admin/Harbor12345
配置文件59行默认的#harbor_admin_password = Harbor12345

学会Docker私有仓库Harbor仓库一篇就够了!!!_第3张图片
学会Docker私有仓库Harbor仓库一篇就够了!!!_第4张图片
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,
Register 服务器在端口 80 上侦听。

#登录harbor的字符界面
docker login -u admin -p Harbor12345 http://127.0.0.1


#先从官方公有仓库下载一个镜像
docker pull nginx

#添加标签,这个标签不能改,127.0.0.1代表本地地址,myimage指定项目,nginx:v1指定具体镜像名称和版本
docker tag nginx 127.0.0.1/myimage/nginx:v1

#上传镜像到私有仓库
docker push 127.0.0.1/myimage/nginx

#注意:在harbor服务器上登录、定制tag、上传镜像都需要使用127.0.0.1,若想要通过ip192.168.158.10,需要在配置文件中添加字段

学会Docker私有仓库Harbor仓库一篇就够了!!!_第5张图片
学会Docker私有仓库Harbor仓库一篇就够了!!!_第6张图片
学会Docker私有仓库Harbor仓库一篇就够了!!!_第7张图片

4.4:客户端远程访问管理 harbor

[root@server1 harbor]# vi /usr/lib/systemd/system/docker.service 
#合适位置添加,末尾
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.158.10

[root@server1 harbor]# vi /usr/lib/systemd/system/docker.service 
[root@server1 harbor]# systemctl restart docker
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
^C
[root@server1 harbor]# systemctl daemon-reload 
[root@server1 harbor]# systemctl restart docker
[root@server1 harbor]# docker login  -u admin -p Harbor12345 http://192.168.158.10
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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私有仓库Harbor仓库一篇就够了!!!_第8张图片

4.5:客户端下载、上传镜像到私有仓库

  • 下载私有仓库的镜像
#先删除
[root@server1 harbor]# docker rmi 127.0.0.1/myimage/nginx:v1 
Untagged: 127.0.0.1/myimage/nginx:v1
Untagged: 127.0.0.1/myimage/nginx@sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49

学会Docker私有仓库Harbor仓库一篇就够了!!!_第9张图片

[root@server1 harbor]# docker pull 192.168.158.10/myimage/nginx:v1
v1: Pulling from myimage/nginx
852e50cd189d: Pull complete 
571d7e852307: Pull complete 
addb10abd9cb: Pull complete 
d20aa7ccdb77: Pull complete 
8b03f1e11359: Pull complete 
Digest: sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49
Status: Downloaded newer image for 192.168.158.10/myimage/nginx:v1
192.168.158.10/myimage/nginx:v1
  • 上传镜像到私有仓库
[root@server1 harbor]# docker push 192.168.158.10/myimage/nginx:v2
The push refers to repository [192.168.158.10/myimage/nginx]
7e914612e366: Layer already exists 
f790aed835ee: Layer already exists 
850c2400ea4d: Layer already exists 
7ccabd267c9f: Layer already exists 
f5600c6330da: Layer already exists 
v2: digest: sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49 size: 1362

学会Docker私有仓库Harbor仓库一篇就够了!!!_第10张图片

五:Harbor 管理维护

5.1:修改 Harbor.cfg 配置文件

  • 修改harbor.cfg配置文件,先停止现有的Harbor实例并更新harbor.cfg中的配置,然后再运行prepare脚重新加载配置,最后重新创建并且启动harbor的实例。

详细步骤如下:
1、关闭所有容器

[root@server1 harbor]# pwd
/usr/local/harbor
[root@server1 harbor]# docker-compose down -v

学会Docker私有仓库Harbor仓库一篇就够了!!!_第11张图片

[root@server1 harbor]# pwd
/usr/local/harbor
[root@server1 harbor]# ls
common                     docker-compose.yml     harbor.v1.2.2.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade
[root@server1 harbor]# vi harbor.cfg 
[root@server1 harbor]# ./prepare 
[root@server1 harbor]# systemctl restart docker
[root@server1 harbor]# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-adminserver ... done
Creating harbor-db          ... done
Creating registry           ... done
Creating harbor-ui          ... done
Creating nginx              ... done
Creating harbor-jobservice  ... done

5.2:UI 界面操作

创建新用户 test-lisi,记住创建的密码,稍后使用 。
学会Docker私有仓库Harbor仓库一篇就够了!!!_第12张图片

在项目里添加新的用户成员。学会Docker私有仓库Harbor仓库一篇就够了!!!_第13张图片

#首先退出已登陆的账号
[root@server1 harbor]# docker logout http://192.168.158.10
Removing login credentials for 192.168.158.10

#使用新的账户登录
[root@server1 ~]# docker login http://192.168.158.10

学会Docker私有仓库Harbor仓库一篇就够了!!!_第14张图片

#改tag
[root@server1 harbor]#  docker tag nginx:latest 192.168.158.10/myimage/nginx:v3

#tom上传镜像到私有仓库
[root@server1 harbor]# docker push 192.168.158.10/myimage/nginx:v3
The push refers to repository [192.168.158.10/myimage/nginx]
7e914612e366: Layer already exists 
f790aed835ee: Layer already exists 
850c2400ea4d: Layer already exists 
7ccabd267c9f: Layer already exists 
f5600c6330da: Layer already exists 
v3: digest: sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49 size: 1362

学会Docker私有仓库Harbor仓库一篇就够了!!!_第15张图片

你可能感兴趣的:(容器Docker,运维,docker,linux,云计算,经验分享)