共计 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.json
(daemon.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.json
(daemon.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
域名访
因为咱们的证书是自签的,不是第三方认证的,素以有安全性提醒,点击持续就能够拜访
到这里登录后就能够拜访了
本文由
传智教育博学谷
教研团队公布。如果本文对您有帮忙,欢送
关注
和点赞
;如果您有任何倡议也可留言评论
或私信
,您的反对是我保持创作的能源。转载请注明出处!