「伸手摘星,即使一无所获,亦不致满手污泥」。
「请关注公众号:星河之码」
在使用maven管理jar包依赖的时候,为了避免每次都从中央仓库拉取依赖包,使用了nexus做了代理仓库。docker镜像仓库与nexus私服仓库作用类似,「用于将打包好的镜像保存在仓库中方便开发、测试、生产环境镜像拉取存储,减轻环境部署需要的相应操作」。
一、什么是Docker私服
「Docker 官方的 Docker Hub 是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像 到本地,也可以把我们自己的镜像推送上去」。
但是,如果我们的服务器无法访问互联网,或者需要使用自己的自己私有镜像,此时我们就需要搭建自己的私有仓库,来存储和管理自己的镜像。
docker私服分为两种:
-
「官方私服」 -
「企业私服」
一般我们个人用不到这个,而在企业应用中官方显得不是很友好,没有界面,所以一般都是使用的企业私服
二、官方私服
docker官方给我们提供了一个私服registry用于管理自己的私有镜像,官网地址如下:
https://hub.docker.com/_/registry
下面来看看docker官方私服的搭建过程
-
「拉取基础私服镜像」
#可以不指定版本,拉取最新的
docker pull registry:2.7.1 -
「备份镜像」
docker save registry:2.7.1 -o registry.2.7.1.tar
-
「导入镜像」
docker load -i registry.2.7.1.tar
这里的备份和导入,只是为了将在这的镜像做一个备份,以后要用就不用重新去拉取了,如果不需要备份,可以不用执行,直接运行镜像即可
-
「启动私有仓库容器」
docker run -itd -p 5000:5000 --name registry --restart=always registry:2.7.1
registry的端口是5000
-
「访问私服」
打开浏览器 输入地址:http://私有仓库服务器ip:5000/v2/_catalog
若看到 {"repositories":[]} 则表示私有仓库搭建成功这里私服虽然构建成功,但是我们还要配置docker跟私服的关联,不然docker不会去我们搭建私服拉取镜像
-
「添加私服仓库地址」
#编辑配置文件
vi /etc/docker/daemon.json
#增加仓库配置信息
# 在daemon.json中添加以下 key,保存退出。此步用于让 docker 信任私有仓库地址
{"insecure-registries":["192.168.242.128:5000"]}配置了私有仓库服务器之后,拉取镜像就会先去私服中拉取,找不到则去中央仓库拉取,跟Maven的工作方式一样的,这里之所有要配置,主要是因为我们用的是HTTP的方式,而docker现在要求用HTTPS
-
「重启docker」
#重新加载docker配置
systemctl daemon-reload
#重启docker
systemctl restart docker -
「查看docker信息确认仓库是否添加」
docker info
-
「上传镜像」
# 1、标记镜像打一个tag
docker tag nginx:1.19.3-alpine 192.168.242.128:5000/nginx:v1
# 2、上传标记的镜像
docker push 192.168.242.128:5000/nginx:v1
# 记得将Ip改为自己的Ip
#在上传一个tomcat的镜像
docker tag tomcat:9.0.20-jre8-alpine 192.168.242.128:5000/tomcat:v1
docker push 192.168.242.128:5000/tomcat:v1 -
「浏览器查看上传的镜像」
http://192.168.242.128:5000/v2/tomcat/tags/list
-
「从私服拉取镜像」
docker pull 192.168.242.128:5000/nginx:v1
到这里,docker的私服搭建就完成了,我们可以将自己镜像上传到私服中,留待以后使用,但是我们通过浏览器访问的时候,会发现docker私服其实没有界面,只是访问的API,返回一个json,很不方便。所以接下来搭建以下有UI的企业私服。
三、企业私服
前面安装搭建了docker官方私服Registry,接下来企业级镜像库Harbor
3.1 Harbor介绍
「Harbor作为一个企业级私有Registry服务器,提供了更好的性能和安全,提升了用户使用Registry构建和运行环境传输镜像的效率」。
虽然Harbor和Registry都是私有镜像仓库的选择,但是Harbor的企业级特性更强,因此也是更多企业级用户的选择。
「Harbor实现了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制,也常常和K8S中的namespace结合使用」。
Harbor还提供了图形化的管理界面,我们可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
「harbor官网地址」
harbor官网地址:
https://goharbor.io/
github官网地址:
https://github.com/goharbor/harbor
官方帮助文档:
https://github.com/goharbor/harbor/blob/v1.9.4/docs/installation_guide.md
在官方帮助文档中有指明了安装harbor的一个硬件要求
硬件资源 | 最小配置 | 推荐配置 |
---|---|---|
CPU | 2 CPU | 4 CPU |
内存 | 4 GB | 8 GB |
硬盘 | 40 GB | 160 GB |

3.2 Harbor搭建
开发环境大部分采用http方式进行安装;生产环境必须采用https方式安装。
-
「下载」
https://github.com/goharbor/harbor
进入官网后,找到自己要下载的版本进行下载
「下载时,选择全安装包,因为是国外的网络,所以在线安装的话可能会下不下来,所以下载全安装包」
-
「上传」
将下载的harbor压缩包上传到服务器
-
「解压harbor压缩包」
cd /data
tar zxf harbor-offline-installer-v2.4.1.tgz -
「进入安装目录」
cd harbor
ls「可以看到harbor有几个文件,其中harbor.yml.tmpl是一个harbor的配置文件的模板」
-
「创建配置文件harbor.yml」
「harbor.yml 为harbor的配置文件」
cp harbor.yml.tmpl harbor.yml
-
「修改配置文件harbor.yml」
vi harbor.yml
-
「拉取私服镜像」
#修改私服镜像地址
hostname: 192.168.242.128
#修改镜像地址访问端口号
port: 5000
#harbor管理员登录系统密码
harbor_admin_password: Harbor12345
#修改harbor映射卷目录
data_volume: /data/harbor/harborVolume -
「安装harbor并启动」
# 在harbor目录下执行,执行前,先把docker 在运行的容器先全部删除
# docker rm $(docker stop $(docker ps -aq))
./install.sh -
「查看是否启动」
docker ps -a
「如果Nginx没有启动成功,需要修改一下Nginx的配置」
执行完./install.sh命令之后在harbor 目录 会新增几个文件
common 目录下是上面 docker 启动的所有容器,在common 的config目录下有一个nginx ,进入Nginx,修改 nginx.conf 配置文件
-
「访问harbor」
http://192.168.242.128:5000
username: admin
password: Harbor12345
3.3 添加私服仓库地址
这一步骤跟registry是一样的
-
「添加私服仓库地址」
#编辑配置文件
vi /etc/docker/daemon.json
#增加仓库配置信息
# 在daemon.json中添加以下 key,保存退出。此步用于让 docker 信任私有仓库地址
{"insecure-registries":["私有仓库服务器IP:5000"]}配置了私有仓库服务器之后,拉取镜像就会先去私服中拉取,找不到则去中央仓库拉取,跟Maven的工作方式一样的
-
「重启docker」
#重新加载docker配置
systemctl daemon-reload
#重启docker
systemctl restart docker -
「查看docker信息确认仓库是否添加」
docker info
2.4 Harbor 的使用
-
「新建项目」
在harbor中新建项目,镜像是以项目隔离开的,harbor支持可以给不同的角色分配不同的权限,使用不同项目下面的镜像
这里我创建一个edwinedu的项目
-
「容器中登录私服」
docker login -u admin -p Harbor12345 192.168.242.128:5000
-
「上传镜像」
以上传nginx镜像为例
#先根据edwinedu项目打一个tag
docker tag nginx:1.19.3-alpine 192.168.242.128:5000/edwinedu/nginx:v2
#将tag推送到Harbor 私服中
docker push 192.168.242.128:5000/edwinedu/nginx:v2 -
「下载镜像」
在Harbor 私服中选择自己要使用的镜像,点击复制按钮就可以获取该镜像的拉取命令,在docker中执行即可
docker pull 192.168.242.128:5000/edwinedu/nginx:v2
-
「容器中退出私服」
docker logout 192.168.242.128:5000

原文始发于微信公众号(星河之码):Docker的中央仓库,Docker私服搭建
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/60800.html