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的主要内容,如果未能解决你的问题,请参考以下文章

05-Docker仓库

Docker仓库管理镜像 -- 公共仓库Docker Hub和私人仓库Registry和harbor

Docker数据管理与网络通信之私有仓库建立

docker镜像-运行

Docker: 仓库管理

Docker第四篇 Docker仓库管理