网上得来终觉浅

_φ(❐_❐✧ 人丑就要多读书

导航

Docker 私有仓库

docker私有仓库

registry

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

1.安装

使用官方提供的 registry 镜像来启动私有仓库,默认情况下,仓库会被创建在容器的/var/lib/registry 目录下。我们可以通过 -v 参数将镜像文件存放在本地的指定路径。

docker run -d \ 
-p 5000:5000 \ 
-v /opt/docker/data/registry:/var/lib/registry \ 
--restart=always \ 
registry

通过浏览器访问 http://ip:5000/v2/_catalog 查看仓库是否启动成功:curl http://192.168.10.30:5000/v2/_catalog

2.上传镜像

registry 上传镜像的命名规范是 仓库IP:5000/镜像名称:tag

# 使用docker tag命令给镜像改名
docker tag liggdocker/learn-docker-storage:0.0.3 192.168.10.30:5000/learn-docker-storage:0.0.3
# 推送镜像到registry仓库
docker push 192.168.10.30:5000/learn-docker-storage:0.0.3

执行上面命令发现推送报错了,这是因为docker推送默认使用的https的方式,而我们的registry只支持http的方式,

对于 Linux 系统,我们可以在 /etc/docker/daemon.json ( daemon.josn 文件不存在则新建该文件)

vi /etc/docker/daemon.json
# 添加下面的配置
{ "insecure-registries": ["仓库IP:5000"] }

# 完整配置如下:
{ 
"insecure-registries": ["192.168.10.30:5000"], 
"registry-mirrors": ["https://ffunzkst.mirror.aliyuncs.com"] 
}

#更新配置使其生效并重启docker
systemctl daemon-reload 
service docker restart
#再次推送
docker push 192.168.10.30:5000/learn-docker-storage:0.0.3
#查看仓库
curl http://192.168.10.30:5000/v2/_catalog | python -m json.tool
#通过以下URL访问下tag列表
curl http://192.168.10.30:5000/v2/learn-docker-storage/tags/list | python -m json.tool

harbor

harbor是一个由vm公司开源的企业级容器镜像仓库,有以下功能

  • 管理用户界面
  • 基于角色的访问控制
  • LDAP/AD 集成及日志审计等基本运维操作

harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库。

另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似 于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的 CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的 漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。

Harbor****的三种安装方式

本文使用离线安装

  1. 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
  2. 离线安装:安装包包含部署的相关镜像,因此安装包比较大
  3. OVA安装程序(第三方):当用户具有vCenter环境时,使用此安装程序,在部署 OVA后启动Harbor

1.harbor 的基本组件

组件 功能
harbor-adminserver 配置管理中心
harbor-db 数据库
harbor-jobservice 镜像复制
harbor-log 日志操作
harbor-ui Web管理页面和API
nginx 前端代理,负责前端页面和镜像上传/下载转发
redis 会话
registry 镜像存储

2.准备工作

3.离线安装

3.1 解压harbor的安装包

[root@linux30 docker]# wget https://github.com/goharbor/harbor/releases/download/v2.3.3/harbor-offline-installer-v2.3.3.tgz 
[root@linux30 docker]# tar -zxvf harbor-offline-installer-v2.3.3.tgz

3.2 复制配置文件并修改

# 进入目录 然后将 harbor.yml.tmp 复制一份并该命为 harbor.yml
cd harbor 
cp harbor.yml.tmpl harbor.yml

harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可!所以 把https相关的注释掉

image

3.3 加载本地镜像

使用 docker load 命令加载本地镜像(从barbor压缩包内提取安装所需镜像),不用再从dockerhub下载了

[root@linux30 harbor]# docker load -i harbor.v2.3.3.tar.gz
#加载完查看
docker images

3.4 执行安装命令

#先执行预处理命令,会创建一些文件夹,初始化一些文件
./prepare
#开始真正的安装过程,如果出现 -Harbor has been installed and started successfully 表示安装成功
./install.sh
#查看docker进程,可以看到很多服务已经起来了。
docker ps

4.启动和停止harbor

在harbor的安装目录执行以下命令就可以启动和停止了

# 启动 
docker-compose up -d 
# 停止 
docker-compose stop 
# 重新启动 
docker-compose restart

5.harbor的使用

5.1 登录harbor

访问****harbor:输入 http://harborIP 就可以直接访问,若未修改配置文件,默认用户名是:admin,密码:Harbor12345

Docker登录harbor:docker login -u admin -p Harbor12345 192.168.10.30

发现登录报错了,这和registry一样,docker模式使用https方式,而我们使用的是http的方式登录,需要修改配置文件:

vi /etc/docker/daemon.json
#添加配置 默认端口号是80 所以不需要加端口号
{ "insecure-reistries": ["harbor地址"] }
#修改完配置生效并重启
systemctl daemon-reload 
service docker restart 
[root@linux30 harbor]# docker-compose restart
#再次登录
docker login -u admin -p Harbor12345 192.168.10.30

5.2 推送镜像到harbor

#1. 修改镜像名称为符合规范的格式,这里有一个 library 路径,是harbor默认的项目名称
docker tag \ 
192.168.10.30:5000/learn-docker-storage:0.0.3 \ 
192.168.10.30/library/learn-docker-storage:0.0.3
#2. 推送镜像(注意需要登录状态才能推送)
docker push 192.168.10.30/library/learn-docker-storage:0.0.3

5.3 HarBor用户权限说明

HarBor用户角色在项目(项目-成员-新加成员)中为3类:项目管理员、开发人员、访客

  • 项目管理员:增删改查
  • 开发人员:上传和下载
  • 访客:只允许下载

5.4 harbor支持https

为了支持微服务推送我们需要将 HarBor 设置为https,可以让 HarBor 在任何地方使用以及推送

生成SSL证书

前面说了怎么搭建harbor仓库,这里讲一讲harbor实现https访问,因为只需要内网访问,没必要去申请一个ssl证书,所以我就用 openssl 颁发自签名证书,实现https访问。

# 0.创建证书目录
[root@linux30 docker]# mkdir -p /opt/docker/data/cert 
[root@linux30 docker]# cd /opt/docker/data/cert
# 1.创建 CA 根证书,这里subj是主题的意思含义如下:C=国家,S=省(市),L=区(县、市),O=组织机构,OU=组织单位,CN=通用名称
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=beijing/O=bgtest/CN=harbor-registry"
# 2.生成证书签名,生成一个证书签名, 设置访问域名为 bgtestharbor.com
openssl req -newkey rsa:4096 -nodes -sha256 -keyout bgtestharbor.com.key -out server.csr -subj "/C=CN/L=beijing/O=itcast/CN=bgtestharbor.com"
# 3.生成主机证书
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key - CAcreateserial -out bgtestharbor.com.crt

# 4.配置harbor.yml:进入harbor安装目录修改 harbor.yml,去掉https的注释,放开端口443
`hostname`,使用IP或域名,不要用回环地址localhost等;bgtestharbor.com
`certificate`,yourdomain.com.crt的路径 /opt/docker/data/cert/bgtestharbor.com.crt
`private_key`,yourdomainr.com.key的路径 /opt/docker/data/cert/bgtestharbor.com.key

# 5.停止harbor
docker-compose down
# 6.运行目录harbor下的prepare完成https的配置
./prepare
# 7.重新安装:在harbor目录下运行安装命令
./install.sh

# 8.修改Docker推送配置
vi /etc/docker/daemon.json
insecure-registries": ["bgtestharbor.com"],
# 9.执行以下命令重启重新加载配置并生效
systemctl daemon-reload 
service docker restart 
docker-compose restart
# 10.修改本地host文件 为了让本机能够正常访问到harbor的web环境需要配置本地的hosts文件增加如下配置
# windows环境下host路径在 C:\Windows\System32\drivers\etc
192.168.10.30 bgtestharbor.com

# 11.域名访问harbor 因为我们的证书是自签的,不是第三方认证的,所以有安全性提示,点击继续就可以访问,用户名:admin,密码Harbor12345
https://bgtestharbor.com

posted on 2022-08-10 11:08  bgtong  阅读(1230)  评论(0编辑  收藏  举报