docker私有仓库

  harbor概念

Docker-harbor私有仓库

Docker的核心组件镜像,容器,仓库

仓库:仓库保存镜像

私有,自定义用户的形式登录仓库,拉取或者上传镜像

Harbor:是VMware公司开发的,开源的企业级的dockerregistry项目

帮助用户快速的搭建一个企业级的docker仓库的服务

支持中文

Harbor的特性

1基于角色进行控制,用户和仓库都是基于项目进行的,用户在每个项目中可以拥有不同的权限
2基于镜像在不同的harbor实例之间进行复制
3Harbor自带一个数据库(AD/LDAP(类似于数据库中的表)),用于对已存在的用户进行认证和管理
4镜像删除和垃圾回收,仓库中的镜像可以被删除(基于权限控制),也可以回收镜像占用的空间
5图形化界面,用户可以直接通过浏览器对镜像仓库进行管理
6审计管理,所有对镜像仓库的操作都可以被记录溯源
7支持API操作:API的程序接口,端口:主机和主机之间的通信,API是应用和应用直接的接口,管理员可以基于API调用接口,和更多的其他程序进行集成

Harbor的组件

proxy安装完harbor之后,会自动生产一个nginx的容器,而且会自动对外映射,默认80端口,nginx容器作为前端代理,在harbor整个组件当中,registry,UI,TOKEN,都在nginx的反向代理后面,通过nginx的代理可以把请求转发到后端不同的应用
registry负责存储镜像,所有的docker pull/push的命令都由其负责处理,这其中涉及到不同用户的权限,要对用户进行访问控制,不同的用户对dokcer镜像有不同的读写权限,Registry每次都会指向一个不同的Token,强制用户每次的pull/push,都必须带一个合法的token(公钥对),Registry会通过公钥对,进行解密验证,身份合法才能指定操作
CORE servicesHarbor的核心功能:提供3个服务
  1. UI:提供图形化界面
  2. Webhook:仓库上所有镜像的变化(指增删改查),都会传送给webhook,用以显示在UI界面上
  3. Token:签发每一次push和pull的公钥对,用来和仓库之间进行权限认证
  4. Database:harbor-db,为核心组件core services 提供数据库存储服务,用户权限,审计日志 docker镜像的分组和项目信息
  5. Job service:主要用于镜像的复制,本地镜像可以同步到远程harbor上
  6. Logcollector(harbor-log):用以日志收集工具
Harbor都是基于docker容器化部署的,docker-compose一键编排,安装。

安装docker-harbor

[root@docker1 ~]# systemctl stop firewalld.service
[root@docker1 ~]# setenforce 0
[root@docker1 opt]# ls
compose-nginx  harbor-offline-installer-v2.8.1.tgz rh
[root@docker1 opt]# tar -xf harbor-offline-installer-v2.8.1.tgz -C /usr/local
[root@docker1 opt]# cd /usr/local/harbor/
[root@docker1 harbor]# ls
common.sh  harbor.v2.8.1.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@docker1 harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker1 harbor]# vim harbor.yml

 5 hostname: 192.168.233.12
#要么使用本机ip地址,要么使用本机主机名(不能是localhost)
 34 harbor_admin_password: 123456
#密码自定义
[root@docker1 harbor]# ./prepare
#编译环境,https:docker-harbor默认的通信协议是https,如果没有注释可能会报错
[root@docker1 harbor]# ./install.sh
#报错重启一下docker
[root@docker1 harbor]# docker-compose ps

访问192.168.233.11

Harbor DB的默认密码

可同时打开数据库的线程

 镜像默认保存的地址

镜像复制限制的线程为10个

https:docker-harbor默认的通信协议是https,需要注释掉

本地主机往上传

[root@docker1 harbor]# docker pull nginx:1.22.0
[root@docker1 harbor]# docker tag nginx:1.22.0 127.0.0.1/library/nginx:dn1
#改名,127.0.0.1 本地使用这个ip就足够,先改标签才能上传
[root@docker1 harbor]# docker images
[root@docker1 harbor]# docker login -u admin -p 123456 http://127.0.0.1
#先登录后再上传 http://127.0.0.1 为镜像地址这里指本地,先登录
#无法登陆需要修改配置文件

[root@docker2 system]# cd /usr/lib/systemd/system
[root@docker2 system]# vim docker.service
 13 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.233.11
#要先去网页的用户里创建用户,再去项目里再创建一个用户


[root@docker1 harbor]# docker push 127.0.0.1/library/nginx:dn1
回到页面刷新后查看,上传

建立私有仓库

创建用户

上传私有仓库

[root@docker1 harbor]# docker login -u c1 -p Chen123456 http://127.0.0.1
#先登录
[root@docker1 harbor]# docker tag nginx:1.22.0 127.0.0.1/c1/nginx:c1
#c1指定项目名称
[root@docker1 harbor]# docker push 127.0.0.1/c1/nginx:c1
要先去网页添加用户组成员后再上传

实例
[root@docker2 system]# docker login -u chen1 -p Chen123456 https://192.168.233.11
#登录网页里的用户名与密码
[root@docker2 system]# docker tag lnmp-nginx:latest 192.168.233.11/ky32/lnmp-nginx:c1
[root@docker2 system]# docker images
REPOSITORY                       TAG       IMAGE ID       CREATED       SIZE
lnmp-mysql                       latest    406d18a25450   4 hours ago   10.1GB
lnmp-php                         latest    37a36877cb5b   4 hours ago   1.38GB
192.168.233.11/ky32/lnmp-nginx   c1        790ac09c8266   4 hours ago   705MB
lnmp-nginx                       latest    790ac09c8266   4 hours ago   705MB
centos                           7         eeb6ee3f44bd   2 years ago   204MB
[root@docker2 system]# docker push 192.168.233.11/ky32/lnmp-nginx:c1            
The push refers to repository [192.168.233.11/ky32/lnmp-nginx]
d769a3077650: Pushed
54966509c792: Pushed
5c703ca879ae: Pushed
2e3982123172: Pushed
5f70bf18a086: Pushed
a862d57eed71: Pushed
5f4580131bfd: Pushed
174f56854903: Pushed
c1: digest: sha256:8b762b536faa484ab945213215f24c9f8223fae61cd9361ccce15b6e8cd468b7 size: 2001
[root@docker2 system]# docker tag lnmp-mysql:latest 192.168.233.11/ky32/lnmp-mysql:c2
[root@docker2 system]# docker push 192.168.233.11/ky32/lnmp-mysql:c2
[root@docker2 system]# docker tag lnmp-php:latest 192.168.233.11/ky32/lnmp-php:c3
[root@docker2 system]# docker push 192.168.233.11/ky32/lnmp-php:c3
#去网站上刷新看看

 角色权限管理

访客只能看,只有读权限
开发者可以有读写权限,但是没有删除权限
维护人员读写权限,修改其他配置的权限
项目管理员对该项目拥有所有权限

https 

安装 部署与k8s集群对接的Harbor仓库
//上传 harbor-offline-installer-v2.8.1.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
 
tar zxvf harbor-offline-installer-v2.8.1.tgz
cd harbor/
vim harbor.yml
hostname = hub.test.com
   https:
     # https port for harbor, default is 443
  port: 443
     # The path of cert and key files for nginx
     certificate: /data/cert/server.crt
     private_key: /data/cert/server.key

harbor_admin_password = 123456
 
 
//生成证书
mkdir -p /data/cert
cd /data/cert
#生成私钥
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456

openssl genrsa: 用于生成 RSA 密钥。
-des3: 使用 Triple DES 加密算法对生成的私钥进行加密。
-out server.key: 指定生成的私钥文件的名称为 server.key。
2048: 指定 RSA 密钥的位数为 2048 位。
 
#生成证书签名请求文件
openssl req -new -key server.key -out server.csr
输入私钥密码:123456
输入国家名:CN
输入省名:BJ
输入市名:BJ
输入组织名:TEST
输入机构名:TEST
输入域名:hub.kgc.com
输入管理员邮箱:admin@test.com
其它全部直接回车
 
#备份私钥
cp server.key server.key.org
 
#清除私钥密码
openssl rsa -in server.key.org -out server.key
输入私钥密码:123456
 
#签名证书
openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
 
chmod +x /data/cert/*
 
cd /opt/harbor/
./prepare

./install.sh
 
在本地使用火狐浏览器访问:https://192.168.233.94
添加例外 -> 确认安全例外
用户名:admin
密码:123456



node1节点:
mkdir -p /etc/docker/certs.d/hub.test.com/

在harbor节点把密钥验证目录整个转给node节点:
scp -r data/ root@192.168.233.92:/

把刚才的生成的密钥文件放入:
cd /etc/docker/certs.d/hub.test.com/
[root@node01 hub.test.com]# ls
server.crt  server.csr  server.key

vim /etc/hosts
192.168.233.94 hub.test.com

vim /lib/systemd/system/docker.service

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

systemctl daemon-reload

systemctl restart docker

[root@node01 system]# docker login -u admin -p 123456 https://hub.test.com
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 tag nginx:latest hub.test.com/library/nginx:v1

docker push hub.test.com/library/nginx:v1


//在master节点上删除之前创建的nginx资源
kubectl delete deployment nginx
 
kubectl create deployment myapp-test  --image=hub.test.com/library/nginx:v1 --port=80 --replicas=3
kubectl expose deployment myapp-test  --port=30000 --target-port=80
 
kubectl get svc,pods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值