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****的三种安装方式
本文使用离线安装
- 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
- 离线安装:安装包包含部署的相关镜像,因此安装包比较大
- OVA安装程序(第三方):当用户具有vCenter环境时,使用此安装程序,在部署 OVA后启动Harbor
1.harbor 的基本组件
组件 | 功能 |
---|---|
harbor-adminserver | 配置管理中心 |
harbor-db | 数据库 |
harbor-jobservice | 镜像复制 |
harbor-log | 日志操作 |
harbor-ui | Web管理页面和API |
nginx | 前端代理,负责前端页面和镜像上传/下载转发 |
redis | 会话 |
registry | 镜像存储 |
2.准备工作
- 下载安装包:Harbor官方地址:https://github.com/goharbor/harbor/releases 下载最新版安装包
- 准备环境:安装docker以及docker-compose的环境
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相关的注释掉
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
本文来自博客园,作者:bgtong,转载请注明原文链接:https://www.cnblogs.com/bgtong/p/16571638.html