💯 作者: 俗世游子【谢先生】。 8年开发3年架构。专注于Java、云原生、大数据等领域技术。
💥 成就: 从CRUD入行,负责过亿级流量架构的设计和落地,解决了千万级数据治理问题。
📖 同名社区:51CTO、 github、掘金、gitee。
📂 清单: goku-framework、【更新中】享阅读II
DevOps系列
深入浅出DevOps:SonarQube提升代码质量
深入浅出DevOps:SonarQube提升代码质量【下】
前言
在《04.容器化:Docker入门》中,我们已经介绍了关于Docker的相关知识点,相信大家对于Docker中的镜像已经有了一个认识。不知道大家有没有这样的疑问:
- 在执行
docker search mysql
或者docker pull mysql
这样的命令的时候,这些镜像都是哪里来的? - 如果我想希望自己构建的镜像也能这样非常方便的执行在各大服务器上应该怎么做?
关于镜像仓库的介绍
那么,这里就需要着重介绍 镜像仓库。大家可以将它理解和代码仓库是一样的功能,不过镜像仓库实专门用来存放代码构建后镜像的存储空间。
而且将镜像上传到仓库以后,其他人可以直接通过pull方式,在自己的机器上运行。
镜像仓库按照部署方式可以分为三类,下面我们就具体来了解吧
Docker hub
默认情况下,我们所下载的镜像都是来自官方仓库,通过访问hub.docker.com进入到官网,以后可以通过搜索的方式找到自己想要的镜像
官方仓库很多情况下使用并不是非常方便,所以官方仓库并不适合很多公司
感兴趣的同学可以注册账号,尝试上传自己的基础镜像
第三方服务
俗话说,挖资本主义墙角,薅社会主羊毛。
现在各种云服务厂商都提供了非常完善的镜像管理的功能,比如
- 阿里云的容器镜像服务,个人版支持免费使用,不过容量有限
这里也不会过多介绍,自己可以进入到对应的云服务厂商上玩耍,操作方式还是比较详细的
Harbor私有仓库
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
DockerCompose
这里不做过多的介绍,只需要知道它能够管理容器即可。随后在K8s系列中完整介绍
安装
Harbor是一款开源软件,在Github上能够找到相关的程序和下载包,点击这里进入到Github的下载页面,选择对应的版本进行下载就好,我这里使用的是最新版本:2.5.0
建议准备环境:2C 4G,服务器需要安装Docker,Docker-Compose
- 解压文件
- 基础配置
进入到配置文件内容之后,如果没有其他特殊要求,其实我们只需要改动如下配置就可以正常的执行启动程序了
这里要注意:我们暂时没有设置https,所以在配置的时候需要先将443相关的配置注释掉
- 编译执行
如果查看过install.sh文件的话就会发现,当前文件内容最终还是会执行docker-compose up -d
来启动Harbor程序。这对我们来说整个安装就很简单了
当发现出现如下容器的时候,说明Harbor程序已经正常启动,那么我们通过http://ip:port来访问,通过admin/Harbor12345进入到控制台
等待出现如下界面,成功完成安装
停止服务
当执行完install.sh之后,在程序的目录下会生成docker-compose.yml
文件,我们只需要操作它就能操作Harbor所启动的容器了
https配置
默认情况下,Harbor 不附带证书,但是Harbor推荐在生产环境上使用https的方式,能够很大程度上保证请求的安全
在上面的启动容器内我们发现,我们所访问的请求其实是通过nginx接收请求的,抽根烟的功夫一想就能明白。这其实就是为nginx设置https的方式
非必须配置,但是建议设置
那接下来我们就来看看整个设置的流程吧,整个流程根据官网文档一步步进行验证并总结,点击进入官方说明
不想看官网的同学继续往下看吧
生成CA证书
生产环境中,您应该从 CA 获取证书。在测试或开发环境中,我们自己生成一个证书就行
- 生成私钥
- 生成证书
这里着重要注意-subj
下的CN=
,根据自己的条件选择填写域名还是IP
生成服务器证书
证书通常包含一个.crt
文件和一个.key
文件。我们这里就设置为192.168.10.201.crt
和192.168.10.201.key
- 生成私钥
- 生成证书签名请求
还是一句话,注意CN=
- 生成 x509 v3 扩展文件
着重关注DNS,这里可以设置多个
- 生成证书
文件归档
- 复制到Harbor挂载目录下,用于配置
然后去配置harbor.yml
- 生成客户端证书
- 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中
整体的目录必须是这样的
- /etc/docker/certs.d/192.168.10.201
如果不采用默认443的端口,那么你需要创建如下目录
- /etc/docker/certs.d/192.168.10.201:端口
然后复制文件
最后一步
重启docker服务,重新构建harbor容器
看到如下的图,说明整个配置已经全部配置完成
基本使用
整个Harbor到目前为止就已经全部完成,接下来我们就使用起来吧。
项目这个功能属于Harbor的核心功能。我们可以将这个功能理解为隔离资源,通过不同的项目我们可以管理不同的的镜像文件
接下来我们就先来创建一个项目,然后看看如何将本地镜像上传上来吧
创建项目
相信这个功能就不用多说了,大家都理解。这里多说一句:
- 将访问级别设置为公开,那么所有人都可访问公开的项目仓库
Docker配置
通过docker将本地镜像上传到Harbor主要分为三步:
- 登录到Harbor上
- 对本地镜像进行重命名
- 推送镜像
登录到Harbor
登录作为最重要的一步,我们还是先来看如何操作吧
通过docker login
的命令能够登录到对应的仓库上,但是我们如果直接这样登录Harbor的话,会出现如下的问题
还记得我们直接改过的daemon.json
文件么,我们需要加一条配置使Docker能够支持Harbor
随后重启docker
当我们启动之后再次登录,出现如下字样说明登录成功
这里要非常注意:
Harbor默认端口是443,如果没有https的话,在随后的操作中一定要带上http.port配置的端口,否则无法访问
镜像重命名
虽说是镜像重命名,但是我们可能不知道新的镜像名称如何配置,别慌。在Harbor项目下已经为我们说明了一切!!
这些知名开源产品还是非常贴心的,在很多地方都为我们给出了相关的说明。
那么我们就来看操作,在我本地的机器上有之前曾经构建过的项目,我来给大家查看一下。接下来我就将第一个项目上传到Harbor仓库中
直接将Harbor中的命令拷贝出来,我们调整一下
这里是可以直接通过镜像ID来操作的,展示结果看下图
别慌,他们就是属于同一个镜像文件,所以镜像ID是一样的
推送镜像
最终我们要推送的是我们重命名之后的镜像,那么我们接下来就通过push命令来操作吧
由于存在相同ID的镜像,所以这里采用名称来推送
完美收工,就这样已经推送完成了。
如果想要拉取下来的,直接通过docker pull 192.168.10.201/presentation/module01:v0.0.7
就能拉取然后直接使用
最后
Harbor中除了关于项目的功能之外,其他的功能并没有提到,相对比而言是比较简单的。大家下来自己玩一玩这个东西,相信很快就能上手。
随后我们继续回归到Jenkins上,下一节的目标是这样的:
- Jenkins通过docker将镜像push到Harbor中,测试服务器在Harbor上拉取镜像运行测试
敬请期待吧!!!