Docker仓库管理镜像 -- 公共仓库Docker Hub和私人仓库Registry和harbor
Posted 博学谷狂野架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker仓库管理镜像 -- 公共仓库Docker Hub和私人仓库Registry和harbor相关的知识,希望对你有一定的参考价值。
镜像仓库管理
DockerHUb仓库管理
什么是DockerHUb
Docker Hub 是 Docker 公司维护的公共 Registry。用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中,如果不希望别人访问自己的镜像,也可以购买私有 repository。
账号注册和登陆
Docker客户端登录
这将提示您输入用户名,这个用户名将成为你的公共存储库的命名空间名称。如果你的名字可用,docker会提示您输入一个密码和你的邮箱,然后会自动登录到Docker Hub,你现在可以提交和推送镜像到Docker Hub的你的存储库。
docker login
管理镜像
docker images
删除镜像
docker rmi learn-docker-storage:0.0.1 learn-docker-storage:0.0.2
修改镜像命名
Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[用户名]/镜像名:tag
docker tag learn-docker-storage:0.0.3 baiyp/learn-docker-storage:0.0.3
推送镜像
推送镜像
docker push baiyp/learn-docker-storage:0.0.3
检查镜像
仓库镜像测试
删除本地镜像
docker rmi baiyp/learn-docker-storage:0.0.3 learn-docker-storage:0.0.3
docker images
从仓库拉取镜像
docker pull baiyp/learn-docker-storage:0.0.3
运行镜像
docker run -d \\
-v /tmp/data/logs:/logs \\
-p 8003:8003 \\
--name learn-docker-storage \\
--network=learn-docker-network \\
baiyp/learn-docker-storage:0.0.3
访问测试
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
直接运行测试
docker rm -f learn-docker-storage
docker rmi baiyp/learn-docker-storage:0.0.3
docker run -d \\
-v /tmp/data/logs:/logs \\
-p 8003:8003 \\
--name learn-docker-storage \\
--network=learn-docker-network \\
baiyp/learn-docker-storage:0.0.3
registry仓库管理
registry简介
官方提供了Docker Hub网站来作为一个公开的集中仓库。然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。
Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。
docker registry 就是管理 docker 镜像的服务, Docker 公司维护的 registry 就是 http://hub.docker.com ,它可以让我们方便的下载预先做好的镜像。
安装registry
这将使用官方提供的 registry
镜像来启动私有仓库,默认情况下,仓库会被创建在容器的 /var/lib/registry
目录下。我们可以通过 -v
参数将镜像文件存放在本地的指定路径。
docker run -d \\
-p 5000:5000 \\
-v /tmp/data/registry:/var/lib/registry \\
--restart=always \\
registry
访问测试
curl http://192.168.64.152:5000/v2/_catalog
上传镜像
修改镜像名称
docker tag baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3
推送镜像
docker push 192.168.64.153:5000/learn-docker-storage:0.0.3
修改Docker推送配置
vi /etc/docker/daemon.json
"insecure-registries": ["仓库IP:5000"]
"insecure-registries": ["192.168.64.153:5000"],
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
systemctl daemon-reload
service docker restart
再次进行推送
docker push 192.168.64.153:5000/learn-docker-storage:0.0.3
再次访问registry
curl http://192.168.64.153:5000/v2/_catalog | python -m json.tool
curl http://192.168.64.153:5000/v2/learn-docker-storage/tags/list | python -m json.tool
registry镜像测试
删除本地镜像
docker rmi baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3
运行registry中的镜像
docker run -d \\
-v /tmp/data/logs:/logs \\
-p 8003:8003 \\
--name learn-docker-storage \\
--network=learn-docker-network \\
192.168.64.153:5000/learn-docker-storage:0.0.3
访问微服务测试
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
使用Harbor管理仓库
什么是Harbor
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
为什么使用私用仓库
虽然hub.docker.com
上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案。
harbor 的基本组件
组件 | 功能 |
---|---|
harbor-adminserver | 配置管理中心 |
harbor-db | 数据库 |
harbor-jobservice | 镜像复制 |
harbor-log | 日志操作 |
harbor-ui | Web管理页面和API |
nginx | 前端代理,负责前端页面和镜像上传/下载转发 |
redis | 会话 |
registry | 镜像存储 |
前置工作
下载安装包
准备环境
- 安装Docker环境
- 安装docker-compose环境
离线安装
解压安装包
tar -zxf harbor-offline-installer-v2.1.4.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
注意: 这里跟老版本不一样,没有了harbor.cfg文件,我们需要手动复制harbor.yml.tmpl在做修改即可
修改harbor.yml
加载本地镜像
docker load -i harbor.v2.1.4.tar.gz
docker images
执行安装命令
./prepare
./install.sh
docker ps
启动和停止harbor
# 启动
docker-compose up -d
# 停止
docker-compose stop
# 重新启动
docker-compose restart
harbor使用
访问harbor
Docker登录harbor
docker login -u admin -p Harbor12345 192.168.64.153
修改Docker配置
vi /etc/docker/daemon.json
"insecure-registries": ["harbor地址"]
#因为默认端口号是80 所以不需要加端口号
"insecure-registries": ["192.168.64.153"],
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
systemctl daemon-reload
service docker restart
再次进行登录
docker login -u admin -p Harbor12345 192.168.64.153
修改镜像tag
docker tag \\
192.168.64.153:5000/learn-docker-storage:0.0.3 \\
192.168.64.153/library/learn-docker-storage:0.0.3
推送镜像
docker push 192.168.64.153/library/learn-docker-storage:0.0.3
harbor 测试
删除本地镜像
docker rmi \\
192.168.64.153:5000/learn-docker-storage:0.0.3 \\
192.168.64.153/library/learn-docker-storage:0.0.3
运行harbor 中的镜像
docker run -d \\
-v /tmp/data/logs:/logs \\
-p 8003:8003 \\
--name learn-docker-storage \\
--network=learn-docker-network \\
192.168.64.153/library/learn-docker-storage:0.0.3
访问微服务测试
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
查看harbor详情
HarBor用户权限说明
- 项目管理员:增删改查
- 开发人员:上传和下载
- 访客:只允许下载
HarBor权限配置
新建用户
用户授权
用户登录测试
docker登录测试
docker login -u itcast -p Qwert123 192.168.64.153
docker push 192.168.64.153/library/learn-docker-storage:0.0.3
拉取镜像测试
docker rm -f learn-docker-storage
docker rmi 192.168.64.153/library/learn-docker-storage:0.0.3
docker run -d \\
-v /tmp/data/logs:/logs \\
-p 8003:8003 \\
--name learn-docker-storage \\
--network=learn-docker-network \\
192.168.64.153/library/learn-docker-storage:0.0.3
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
Harbor支持Https(扩展)
生成SSL证书
创建证书目录
mkdir -p /tmp/data/cert && cd /tmp/data/cert && ll
创建 CA 根证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=beijing/O=itcast/CN=harbor-registry"
C=国家,S=省(市),L=区(县、市),O=组织机构,OU=组织单位,CN=通用名称
生成证书签名
openssl req -newkey rsa:4096 -nodes -sha256 -keyout itcastharbor.com.key -out server.csr -subj "/C=CN/L=beijing/O=itcast/CN=itcastharbor.com"
生成主机证书
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out itcastharbor.com.crt
操作步骤如下
配置harbor.yml
- hostname,使用IP或域名,不要用回环地址,localhost等
- certificate,yourdomain.com.crt的路径
/tmp/data/cert/itcastharbor.com.crt
- private_key,yourdomainr.com.key的路径
/tmp/data/cert/itcastharbor.com.key
重新安装harbor服务
停止harbor
docker-compose down
./prepare
重新安装
./install.sh
修改Docker推送配置
vi /etc/docker/daemon.json
#因为默认端口号是80 所以不需要加端口号
"insecure-registries": ["仓库IP或域名"]
"insecure-registries": ["itcastharbor.com"],
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
systemctl daemon-reload
service docker restart
修改本地host文件
192.168.64.153 itcastharbor.com
域名访问harbor
以上是关于Docker仓库管理镜像 -- 公共仓库Docker Hub和私人仓库Registry和harbor的主要内容,如果未能解决你的问题,请参考以下文章