前言
在我们日常工作中,基于Docker技术进行开发、测试环境的快速部署和管理已经非常普遍,而对于我们自己的产品研发来说,必然就离不开很多私有的docker镜像管理,更加上docker官方镜像仓库的访问困难,在我们的研发环境中的搭建私有docker镜像仓库就成为一个普遍需求。
搭建私有docker镜像仓库的基本方法 - http
搭建docker私有镜像仓库的基础方法,其实非常简便,也是大家网上搜索最容易找到的方案。
直接通过 docker 启动它的仓库镜像 registry 即可
|
|
–restart 设置在仓库异常时自动重启仓库,保证可用性 –name 设置仓库名称 –p 内部仓库服务端口5000映射到宿主机5100端口 –v 仓库存储持久化到数据卷
镜像启动完成以后,通过浏览器访问一下这台宿主机5100端口的 v2
接口,可以正常显示一个空的 json 字串,表示仓库已经可以正常提供服务
但这时,如果我们通过 docker push
命令向这个私有仓库上传镜像,会得到一个提示默认协议https不匹配的提示。
这里我们还需要通过docker配置使其接受http协议,Linux 系统下通常在 /etc/docker/daemon.json
这个docker守护进程配置文件中。
在其中添加私有镜像服务器地址:
|
|
如果是在windows中使用docker desktop,在docker engine中进行配置
重启docker引擎后,就可以正常对刚搭建的私有参考进行push和pull操作了。
但是,虽然基于http协议的基础镜像仓库能满足我们日常的基本使用要求,但如果我们的产品项目不是个小型项目,牵涉多个docker镜像联动和多个节点的话,一般会需要使用docker集群。
docker官方的集群系统docker swarm使用也非常简便,但docker swarm中对于私有镜像仓库,出于安全考虑,是需要强制通过 https
协议访问的,因此,我们本文的重点,还是介绍下如何搭建一个基于https
协议的私有镜像仓库
https协议镜像仓库的要求
https
协议相对于 http
协议,主要就是提供了传输安全性上的保护。关于 https协议原理的详细说明,可以参看我前面的文章
因此,我们要搭建基于 https 协议的镜像仓库,复杂的地方主要是解决https协议要求的相关认证和鉴权上的要求。主要包括:
- 生成证书和访问密钥,非生产环境一般使用自签名证书。
- 配置镜像仓库启动时挂载证书
- 配置访问节点对证书的信任
- 加入集群,推送、拉取docker镜像
集群中部署私有镜像仓库
下面,我们逐步详细说明部署过程
自签名证书生成
生成根证书私钥和证书
|
|
生成服务器私钥和 CSR
|
|
使用根证书签发服务器证书
|
|
通过以上操作,会生成我们需要的证书清单
ca.crt
:根证书registry.crt
:服务器证书registry.key
:服务器私钥
配置镜像Registry
在swarm集群中启用Registry仓库,可以通过docker compose
, 先配置compose启动文件
docker-compose.yml
|
|
然后通过 docker stack
在集群中启用仓库
|
|
这样,我们就启用了支持认证的仓库
配置访问节点信任证书
但仓库支持认证,要在访问时能正常对服务进行认证,在客户节点上,还有一个操作,也就是需要信任仓库的自签名证书
|
|
重启本地docker服务,以加载信任证书
验证仓库镜像拉取
然后,在客户机上,我们就可以通过私有仓库来完成镜像的拉取了
这里还有一个步骤,就是我们配置的仓库地址是 qiucao.com
,并不是一个实际存在的公共网络域名,所以这里我们还应该在本地的 /etc/hosts
中添加对域名的解析
|
|
然后执行命令 docker pull
拉取仓库中的镜像,可以成功完成镜像的拉取
更多关于docker使用和体系化的测试技能提升,可了解我的测试课程,回复 大纲
了解课程详细内容。