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

44次阅读

共计 9419 个字符,预计需要花费 24 分钟才能阅读完成。

镜像仓库治理

docker 仓库, 用来治理镜像。次要分为公共仓库和私人仓库。上面介绍了公共仓库 Docker Hub、私人仓库 Registry 和 harbor。

DockerHUb 仓库治理

什么是 DockerHUb

保留和散发镜像的最间接办法就是应用 Docker Hub。

​ Docker Hub 是 Docker 公司保护的公共 Registry。用户能够将本人的镜像保留到 Docker Hub 收费的 repository 中,如果不心愿他人拜访本人的镜像,也能够购买公有 repository。

账号注册和登陆

个别,你须要先在 docker 核心创立一个账户(如果您尚未有)。你能够间接在 Docker Hub 创立你的账户。

如果有已有账号能够点击 sign in 进行登录,登陆后是这个样子

Docker 客户端登录

应用 docker login 登录 dockerhub

​ 这将提醒您输出用户名,这个用户名将成为你的公共存储库的命名空间名称。如果你的名字可用,docker 会提醒您输出一个明码和你的邮箱,而后会主动登录到 Docker Hub,你当初能够提交和推送镜像到 Docker Hub 的你的存储库。

docker login

呈现 Login Succeeded就阐明咱们登录胜利

注:你的身份验证凭证将被存储在你本地目录的 .dockercfg 文件中

治理镜像

通过 docker images 能够看到咱们所有的镜像列表

docker images

删除镜像

咱们当初的 learn-docker-storage 有三个版本,当初咱们把前两个有问题的版本删除,docker rmi 镜像 ID能够删除镜像

docker rmi learn-docker-storage:0.0.1 learn-docker-storage:0.0.2

这样咱们就删除了咱们没有用的镜像了,能够节俭内存空间

批改镜像命名

批改镜像的 repository 使之与 Docker Hub 账号匹配。

​ Docker Hub 为了辨别不同用户的同名镜像,镜像的 registry 中要蕴含用户名,残缺格局为:[用户名]/ 镜像名:tag

咱们通过 docker tag 命令重命名镜像

docker tag learn-docker-storage:0.0.3 baiyp/learn-docker-storage:0.0.3

这样就将咱们的镜像改名了,这个就合乎咱们的 dockerhub 的标准了

推送镜像
推送镜像

当初咱们要将咱们的镜像推送到docker hub

推送镜像的标准是docker push 注册用户名 / 镜像名:tag, 因为咱们下面曾经把镜像名字改正确了,所以能够间接推送。

docker push baiyp/learn-docker-storage:0.0.3

这样咱们就将咱们的数据推送到 docker hub,咱们发现只有最顶层的镜像推送了,openjdk 的镜像并没有推送,间接复用了仓库的,这就是分层的益处

查看镜像

咱们能够到 docker hub 查看咱们的镜像

能够看到咱们的镜像曾经推送过去了,点开详情能够看到咱们镜像的内容以及 tag 号

仓库镜像测试
删除本地镜像

能够通过 docker rmi 镜像 ID 删除本地镜像

docker rmi baiyp/learn-docker-storage:0.0.3 learn-docker-storage:0.0.3

再次查看本地镜像,曾经没有了咱们的微服务的镜像

docker images

从仓库拉取镜像

这个时候能够从 docker hub 拉取镜像

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

到这里咱们就实现 dockerhub 仓库的公布与拉取

间接运行测试

在实在环境中,咱们个别不会拉取在运行,个别都是间接运行,如果 docker 查看镜像不存在会主动拉取

进行服务并删除镜像

 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

这一个 run 命令就解决了容器的拉取以及容器运行的问题

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 镜像来运行。

​ 这将应用官网提供的 registry 镜像来启动公有仓库,默认状况下,仓库会被创立在容器的 /var/lib/registry 目录下。咱们能够通过 -v 参数将镜像文件寄存在本地的指定门路。

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

这样咱们的 registry 曾经启动起来了

拜访测试

这时咱们能够通过浏览器拜访 http://ip:5000/v2/_catalog 查看仓库是否启动胜利。

curl http://192.168.64.152:5000/v2/_catalog

上传镜像

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

批改镜像名称

将咱们的镜像改成服务标准的名字

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 推送默认应用的 https 的形式,而咱们的 registry 只反对 http 的形式

批改 Docker 推送配置

对于 Linux 零碎,咱们能够在 /etc/docker/daemon.jsondaemon.josn 文件不存在则新建该文件)

 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

咱们发现咱们的镜像曾经推送到了 registry,咱们通过以下 URL 拜访下 tag 列表

curl http://192.168.64.153:5000/v2/learn-docker-storage/tags/list | python -m json.tool

registry 镜像测试
删除本地镜像

能够通过 docker rmi 镜像 ID 删除本地镜像

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

咱们发现自己的 registry 很快就拉取并且运行起来了

拜访微服务测试
 curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool

应用 Harbor 治理仓库

什么是 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
为什么应用私用仓库

公司的我的项目个别不予许咱们上传到 Docker Hub 这类的公共仓库中,所有学会创立一个公有仓库也是十分必要的

​ 尽管 hub.docker.com 上能够保留镜像,然而网速绝对较慢,在外部环境中搭建一个公有的公共仓库是个更好的计划。

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

Harbor 官网地址:https://github.com/goharbor/harbor/releases 下载最新版安装包

筹备环境

须要装置 docker 以及 docker-compose 的环境下面咱们已提前装置了

  • 装置 Docker 环境
  • 装置 docker-compose 环境
离线装置
解压安装包

解压 harbor 的安装包

tar -zxf harbor-offline-installer-v2.1.4.tgz

进入目录 而后将 harbor.yml.tmp 复制一份并该命为harbor.yml

cd harbor
cp harbor.yml.tmpl harbor.yml

留神: 这里跟老版本不一样,没有了 harbor.cfg 文件,咱们须要手动复制 harbor.yml.tmpl 在做批改即可

批改 harbor.yml

harbor 作为公有仓库作用在公司内网,个别都是信赖关系,没多大必要做 https, 应用 http 即可!
所以 把 https 相干的曾经正文掉

并留神配置文件的用户名明码配置,默认是 用户名是:admin, 明码是:Harbor12345,如果批改须要装置前批改

加载本地镜像

应用 docker load 命令加载本地镜像,不必再从 dockerhub 下载了

docker load -i harbor.v2.1.4.tar.gz

这样容器镜像就被加载到了本地,咱们能够通过 docker images 命令查看导入的镜像

docker images

执行装置命令

先执行预处理命令,会创立一些文件夹,初始化一些文件

./prepare

而后开始真正的装置过程

./install.sh

如果呈现 -Harbor has been installed and started successfully 示意装置胜利,并查看 docker 过程

docker ps

能够看到很多服务曾经起来了。

启动和进行 harbor

在 harbor 的装置目录执行以下命令就能够启动和进行了

# 启动
docker-compose up -d 
# 进行
docker-compose stop 
# 重新启动
docker-compose restart 
harbor 应用
拜访 harbor

输出 http://harborIP就能够间接拜访了, 这里拜访咱们的地址http://192.168.64.153/

输出用户名明码就能够登录了,如果没有批改配置文件 默认是 用户名是:admin, 明码是:Harbor12345

登录后就能够进行操作了

Docker 登录 harbor

应用 docker login 命令就能够登录 harbor 了

docker login -u admin -p Harbor12345 192.168.64.153

咱们发现登录报错了,这和 registry 一样,docker 模式应用 https 形式,而咱们应用的是 http 的形式登录

批改 Docker 配置

对于 Linux 零碎,咱们能够在 /etc/docker/daemon.jsondaemon.josn 文件不存在则新建该文件)

 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

这里有一个 library 门路, 是 harbor 默认的项目名称

推送镜像

能够通过 docker push 进行推送镜像, 留神须要先登录在进行推送

docker push 192.168.64.153/library/learn-docker-storage:0.0.3

到这里咱们曾经推送到了 harbor,咱们能够登录 library 页面查看

harbor 测试
删除本地镜像

能够通过 docker rmi 镜像 ID 删除本地镜像

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 用户角色在我的项目(我的项目 - 成员 - 新加成员)中为 3 类:我的项目管理员、开发人员、访客

  • 我的项目管理员:增删改查
  • 开发人员:上传和下载
  • 访客:只容许下载
HarBor 权限配置
新建用户

点击创立用户能够创立一个用户

咱们创立一个 itcast 的用户

用户受权

创立用户后进入我的项目模块增加成员

抉择成员后并抉择权限

访客只能进行拉取不能推送和治理

用户登录测试

咱们用 itcast 用户通过 web 端登录测试下,咱们发现用户是没有批改权限的

docker 登录测试

登录 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(扩大)

为了反对微服务推送咱们须要将 HarBor 设置为 https,能够让 HarBor 在任何中央应用以及推送

生成 SSL 证书

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

创立证书目录
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"

这里 subj 是主题的意思含意如下

C= 国家,S= 省(市),L= 区(县、市),O= 组织机构,OU= 组织单位,CN= 通用名称
生成证书签名

生成一个证书签名, 设置拜访域名为itcastharbor.com

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

而后进入 harbor 装置目录批改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

运行目录 harbor 下的 prepare 实现 https 的配置

./prepare

重新安装

在 harbor 目录下运行装置命令

./install.sh

批改 Docker 推送配置

咱们须要将推送的 IP 改成域名

vi /etc/docker/daemon.json

上文中咱们对 registry 曾经操作了,这里须要改用 harbor,须要重新配置

# 因为默认端口号是 80 所以不须要加端口号
{"insecure-registries": ["仓库 IP 或域名"] }

残缺的配置如下

{"insecure-registries": ["itcastharbor.com"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}

执行以下命令重启从新加载配置并失效

systemctl daemon-reload
service docker restart
批改本地 host 文件

为了让本机可能失常拜访到 harbor 的 web 环境须要配置本地的 hosts 文件减少如下配置

192.168.64.153 itcastharbor.com

windows 环境下 host 门路在C:\Windows\System32\drivers\etc

域名拜访 harbor

通过域名拜访 harbor,域名就是咱们方才配置的 itcastharbor.com 域名访

因为咱们的证书是自签的,不是第三方认证的,素以有安全性提醒,点击持续就能够拜访

到这里登录后就能够拜访了

本文由 传智教育博学谷 教研团队公布。

如果本文对您有帮忙,欢送 关注 点赞 ;如果您有任何倡议也可 留言评论 私信,您的反对是我保持创作的能源。

转载请注明出处!

正文完
 0