前言:在上篇一起讨论dokcer(1)的博客中提到了docker的内部三大核心,而利用registry搭建私有仓库就是三大核心之一。本文主要介绍的是利用registry搭建私有仓库,关于harbo的知识了解即可,关于搭建方法日后有机会再一起讨论介绍。
上篇博客链接:
一起讨论docker(1)之介绍与安装 - LIU-GC - 自由互联 (cnblogs.com)
一、私有仓库介绍:
1、Docker的内部三大核心概念:
1)镜像docker images:docker镜像是docker容器运行时的只读模板,镜像可以用来创建docker容器。
2)仓库docker repository:类似代码仓库,他是docker集中存放镜像文件的地方。
3)容器docker contains:利用容器运行,一个docker容器包含了所有的某个应用运行所需要的环境。
注意:镜像是只读的,容器在启动的时候,创建一层壳写作为最上层。
2、公共仓库vs私有仓库
2.1公共仓库
所有人都可以访问的一个远程docker仓库,该仓库中的所有镜像都是公开的,供下载使用
docker官方维护的公共仓库:docker hub,国内的一些docker公共仓库:DaoCloud、阿里云
2.2 私有仓库
只有个人或团队内部的docker仓库,只有本地局域网的主机或通过授权的用户可以访问该仓库
3、为什么要搭建私有仓库
1)公共仓库的镜像虽然多,但是没有针对于自己生产环境的镜像,不同生产环境对于镜像有不同需求
2)上传自己生产环境的镜像至公共仓库,任何人都可以下载,没有私密性、安全性,虽然可以在docker hub上申请私有repository,但是需要付费。
3)docker hub公共仓库毕竟是远程服务器,在下载连接速度会受到很大影响,影响工作效率,需要互联网、性能低。
4、搭建私有仓库的方案
docker官方提供的搭建私有仓库工具registry
harbor私有仓库
5、registry和harbor介绍
5.1 registry搭建私有仓库介绍
Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。
以下内容了解即可:
5.2 harbor私有仓库
1)Harbor是VMware公司的开源级的企业级Docker Registry(仓库)项目
2)Harbor的目标是帮助用户迅速搭建一个企业级的Docker Registry服务。
3)Harbor以docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access
Control),AD/LDAP集成,以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。
4)Harbor的每个组件都是以Docker容器的形式构建的,使用docker-compose来对它进行部署。
5)Docker harbor有可视化的web管理界面,可以方便管理Docker镜像,又提供了多个项目的镜像权限管理及控制功能
即通俗理解为:
Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。
注意:Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。 5.3 harbor私有仓库优点:(1)基于角色控制
(2)基于镜像的复制策略
(3)支持LDAP/AD,通过VPN连接域使用
(4)图像删除和垃圾收集
(5)图像UI
(6)审计
(7)RESTful API
二、利用registry搭建私有仓库
1、环境搭建
两台都装有dokcer-ce的centos7.9虚拟机
ip规划:
主机一(registry)172.17.8.11
主机二 (test)172.17.8.22
2、过程:
安全配置(两台主机都操作)
关闭防火强,selinux设置为宽松模式
systemctl stop firewalld.service && systemctl disable firewalld.service
setenforce 0
主机一:
1)开启路由转发
sysctl -p
net.ipv4.ip_forward = 1
2)下载私有仓库镜像
docker pull registry:2
3)重启docker服务
4)创建私有仓库目录
mkdir -p /opt/data/registry
5)运行容器,开启5000端口(端口映射)
docker run -itd -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry:2
补充:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p 容器内用什么端口 5000本地端口
Restart always 容器遇到错误是自动重启
Never 不重启 Failure 只有报错才重启
-v 容器目录和物理机的目录相通,目录映射 /opt/data/registry 和容器内 /var/lib/registry (内存放的镜像)是一样的
6)检验容器内/仓库内镜像;
curl 172.17.8.11:5000/v2/_catalog
以下操作两个主机都需
配置私有仓库安全性
修改配置文件(不安全的镜像私有仓库)
vim /usr/lib/systemd/system/docker.service
13行
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 172.20.10.32:5000
注:ip地址为私有仓库镜像所在虚拟机的ip地址
重启服务
systemctl daemon-reload
systemctl restart docker
主机一:下载镜像在主机二做拉取测试
docker pull centos:7
镜像改名
docker tag centos:7 172.17.8.11:5000/centos-7
将本地镜像上传到镜像仓库
docker push 172.17.8.11:5000/centos-7
检验
curl 172.17.8.11:5000/v2/_catalog
主机二:从私有仓库中下载镜像测试
docker pull 172.17.8.11:5000/centos-7
docker images 查看