Docker私有镜像仓库是什么?
Docker镜像仓库概述
镜像仓库作为Docker技术的核心组件之一,其主要作用就是负责镜像内容的存储和分发。Docker镜像仓库从使用范围来说分为“公有镜像仓库”和“私有镜像仓库”,公有镜像仓库是可以被任何人使用的,例如Docker公司维护的在线存储库Docker Hub以及部分云服务厂商(如阿里云)提供的在线Docker镜像库等,都属于公有镜像仓库的范畴。
而私有镜像仓库则是指部署在公司或组织内部,用于自身应用Docker镜像存储、分发的镜像仓库。在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应用的打包镜像一般情况下只会被存储在私有镜像仓库中,CI/CD流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的。
在现阶段主流的企业级私有镜像仓库构建方案中,比较流行的是:开源的企业级Docker镜像仓库——Harbor、以及商业镜像仓库——JFrog Artifactory。
这两种Docker镜像仓库各自都有一定的市场,就作者所工作过的公司来说使用Harbor和JFrog Artifactory作为私有镜像仓库的都有,但就成熟度和功能性完整性来说JFrog Artifactory作为商业级解决方案会更具优势,所以目前国内有钱的互联网公司选择JFrog Artifactory作为企业级私有仓库的比较多,本文的主要内容是演示如何通过Docker的方式来快速部署JFrog Artifactory并将其作为Devops自动发布系统的私有镜像仓库。
JFrog Artifactory镜像仓库部署
根据官方介绍JFrogArtifactory是目前全球唯一一个支持所有开发语言,任意维度的元数据检索、跨语言正反向解析,并拥有深度递归、支持多活异地灾备的企业级、高可用二进制制品管理仓库。这里的二进制制品是指构建过程的输出物,包括软件包、测试报告,应用配置文件等可在服务器上直接运行或可查看的二进制软件制品。
JFrog Artifactory支持多种仓库类型,除了Docker镜像仓库外还支持Maven、Npm等其他类型的仓库。在正式企业级环境中镜像仓库的部署要考虑高可用、扩展性等要求,关于这方面的部署方式可以参考其他官方文档,本环节为了方便演示将采用Docker的方式进行部署,具体步骤如下:
1)、获取*新JFrog Artifactory社区版Docker镜像,命令如下:
$ docker pulldocker.bintray.io/jfrog/artifactory-jcr:latest
由于网络原因上述下载过程可能会比较慢,有条件的读者可以借助科学上网方式进行镜像获取。完成后可通过命令查看具体的镜像信息,如下:
$ docker images
2)、创建数据卷。考虑到镜像仓库作为持久化存储服务,这里为其创建单独的数据卷,命令如下:
-
#创建数据目录
-
$ mkdir -p ~/docker/volume/artifactory
-
-
#切换到上述目录后执行数据卷创建命令
-
$ docker volume create data_artifactory
3)、运行Docker容器,命令如下:
$ docker run --name jfrog-artifactory -d-v data_artifactory:/var/opt/jfrog/artifactory -p 8081:8081 -p 8082:8082docker.bintray.io/jfrog/artifactory-jcr:latest
完成上述操作后,如果容器运行成功,此时浏览器输入访问地址:http://127.0.0.1:8082,将会显示如图所示界面:
输入初始密码(admin/password)后,会继续跳转到管理员密码重置界面,如图所示:
依据步骤设置好管理员密码。之后会继续要求设置如订阅邮箱、访问网站域名、代理配置等信息,这里可以暂时忽略直接跳到仓库创建的页面,如图所示:
从上图可以看到JFrogArtifactory支持多种类型的仓库,例如Maven私有仓库也可以通过JFrog Artifactory来进行配置,由于是社区版所以很多其他类型的仓库并未免费开放!这里我们只选择创建Docker镜像仓库,创建后效果如图所示:
如上图所示,默认创建了一个RepositoryKey为docker-local的本地仓库。在实际工作场景中为了便于Docker镜像的管理,可以分别为同一代码空间的项目创建单独的镜像仓库,例如我们本书中所有的Spring Cloud实战项目创建一个单独镜像仓库,点击右上角“New LocalRepository”,如图所示:
到这里JFrog Repository容器镜像仓库的基本部署工作就完成了,后面自动化发布系统中的CI/CD流程将以此为基础实现Docker镜像的存储、分发!关注我后续的内容将向你介绍如何构建一套完整的CI/CD自动发布系统!