JFrog Container Registry(JCR)社区版(开源版)安装,并配置docker registry和yum repo

前言,由于目前公司在评估几种Docker registry的方案,所以最近也是一直在看好用而且开源免费的方案。目前调研了以下几种方案:

1 Harbor

Harbor是VMware开源的Docker registry解决方案,基于Docker registry和Postgresql数据库搭建。支持Helm部署在kubernetes上,也支持On-premises 部署,目前已支持镜像漏洞扫描,权限验证管控方面做得也很不错。目前是CNCF的一个项目,用的人很多,缺点是稍微有些重,目前架构已经经过了一些优化,执行效率比以前提升了许多。

2 Nexus OSS

Nexus OSS是属于sonatype公司的一款开源产品,支持的仓库类型也比较全,常用的Maven Docker npm yum helm等都支持,而且支持LDAP集成,目前官方支持Docker与二进制部署,Helm chart非官方支持,不过可以在helm官方stable里面找到sonatype-nexus的chart,在kubernetes上部署nexus。目前Nexus支持漏洞扫描,但是此功能为商业版的feature,需要购买订阅。

3 Artifactory

Artifactory是一个成熟的商业版产品,支持HA,分布式部署,并且商业版本对于高并发的处理上会更有效率。Artifactory在权限管理上做的颗粒度很细,可以满足对信息安全有严格要求的企业。在稳定性方面,经过了多家大公司的验证,以及JFrog在行业内的多年技术沉淀,是一款合格的商业级产品。

目前JFrog发布了社区版本的JCR (JFrog Container Registry),作为一款功能强大且丰富的Docker 镜像中心,JCR 已经能够在

jfrog.com/container-registry 进行免费下载和使用。

那么我们今天就JCR的部署进行一个抛砖引玉,来给大家提供一些思路。

下面我们正式开始部署:

首先我们要清楚Artifactory OSS和JCR是两个产品,我们这次要部署的是JCR,官网地址:https://www.jfrog.com/confluence/display/JCR/Overview

环境要求:

Java: JFrog Container Registry must run withJDK 8(JDK 8 update 45 and above preferred) or JDK 11.

JVM:  -server -Xms512m -Xmx4g -Xss256k -XX:+UseG1GC

浏览器: Google Chrome;Firefox;Internet Explorer;Safari

硬件配置:

部署方式:

目前JCR支持以下几种方式部署:
Installing with Docker

Installing on Kubernetes

Installing on Linux, Solaris or Mac OS

Installing on Windows

今天我们在CentOS7上用RPM的部署方式,进行All-In-One的部署,所以我们这里不会建立额外数据库。

1 JCR安装

在安装CentOS7的时候,我们不要选择最小化安装,我们要选择Server With Gui,这样装出来的系统,Java JDK都不需要额外配置了,否则系统装完还需要装很多额外的包。


系统安装完成后,我们做一些初始化工作:

# systemctl stop NetworkManager

# systemctl disable NetworkManager

# systemctl stop firewalld

# systemctl disable firewalld

# iptables -F

用root身份登录系统,直接运行以下命令,即可部署最小化安装JCR

# wget https://bintray.com/jfrog/artifactory-rpms/rpm -O bintray-jfrog-artifactory-rpms.repo

# sudo mv bintray-jfrog-artifactory-rpms.repo /etc/yum.repos.d/

# sudo yum install jfrog-artifactory-jcr

安装完成后,我们可以启动JCR:

# systectl start artifactory

# systemctl status artifactory

● artifactory.service - Setup Systemd script for Artifactory in Tomcat Servlet Engine

  Loaded: loaded (/usr/lib/systemd/system/artifactory.service; enabled; vendor preset: disabled)

  Active: active (running) since Tue 2019-11-26 21:37:10 EST; 13min ago

  Process: 3471 ExecStop=/opt/jfrog/artifactory/bin/artifactoryManage.sh stop (code=exited, status=0/SUCCESS)

  Process: 3560 ExecStart=/opt/jfrog/artifactory/bin/artifactoryManage.sh start (code=exited, status=0/SUCCESS)

Main PID: 3612 (java)

    Tasks: 0

  CGroup: /system.slice/artifactory.service

          ‣ 3612 /usr/bin/java -Djava.util.logging.config.file=/opt/jfrog/artifactory/tomcat/conf/logging.properties -Djava.util.loggin...

Nov 26 21:37:00 localhost.localdomain artifactoryManage.sh[3560]: /usr/bin/java

Nov 26 21:37:00 localhost.localdomain artifactoryManage.sh[3560]: Starting Artifactory tomcat as user artifactory...

Nov 26 21:37:00 localhost.localdomain su[3588]: (to artifactory) root on none

Nov 26 21:37:00 localhost.localdomain artifactoryManage.sh[3560]: Max number of open files: 32000

Nov 26 21:37:00 localhost.localdomain artifactoryManage.sh[3560]: Using ARTIFACTORY_HOME: /var/opt/jfrog/artifactory

Nov 26 21:37:00 localhost.localdomain artifactoryManage.sh[3560]: Using ARTIFACTORY_PID: /var/run/artifactory.pid

Nov 26 21:37:00 localhost.localdomain artifactoryManage.sh[3560]: Tomcat started.

Nov 26 21:37:10 localhost.localdomain artifactoryManage.sh[3560]: Artifactory Tomcat started in normal mode

Nov 26 21:37:10 localhost.localdomain artifactoryManage.sh[3560]: Artifactory running with PID 3612

Nov 26 21:37:10 localhost.localdomain systemd[1]: Started Setup Systemd script for Artifactory in Tomcat Servlet Engine.

然后我们打开本地浏览器,访问serverIP:8081

用户名:admin

密码:password

由于默认安装没有开启https proxy,所以需要自行装nginx定在JCR前边,由于我们只想测试功能,所以我们这里直接加docker insecure,就不安装代理了。

2 系统配置

首先我们需要设置docker的http配置,

然后docker访问方式选择Path,proxy选择tomcat

这样我们便完成了系统设置工作,下一步我们建立一个本地的docker仓库

3 建立一个local类型的Docker仓库

首先我们选择admin->Repositories->local->new->Docker,然后在Repository Key填入你需要建立的仓库名字,然后Save

然后我们就可以在Artifacts里面看到我们新建立的仓库,截图里面有我建立的其他测试仓库,还有系统初始化自带的俩个仓库

接下来我们拉取一个hello-world镜像,打tag并尝试上传(这里注意,tag需要打成你服务器ip或者域名加端口8081,然后跟你仓库的名字):

[root@localhost ~]# docker pull hello-world

Using default tag: latest

Trying to pull repository docker.io/library/hello-world ...

latest: Pulling from docker.io/library/hello-world

1b930d010525: Pull complete

Digest: sha256:4df8ca8a7e309c256d60d7971ea14c27672fc0d10c5f303856d7bc48f8cc17ff

Status: Downloaded newer image for docker.io/hello-world:latest

[root@localhost ~]# docker images

REPOSITORY                      TAG                IMAGE ID            CREATED            SIZE

docker.io/nginx                latest              231d40e811cd        4 days ago          126 MB

192.168.26.130:8081/ubr/nginx  latest              231d40e811cd        4 days ago          126 MB

192.168.26.130:8081/ubr/nginx  v1                  231d40e811cd        4 days ago          126 MB

docker.io/hello-world          latest              fce289e99eb9        11 months ago      1.84 kB

[root@localhost ~]# docker tag docker.io/hello-world:latest 192.168.26.130:8081/test/hello-world:latest

[root@localhost ~]# docker push 192.168.26.130:8081/test/hello-world:latest

The push refers to a repository [192.168.26.130:8081/test/hello-world]

af0b15c8625b: Pushed

latest: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524

这里我们可以看到,我们的镜像已经push成功了,下面我们可以在test仓库是右键点击刷新,或者刷新浏览器,这里我们看到hello-world已经成功上传。

4 配置一个yum仓库

由于JCR默认不支持yum,所以我们需要利用Generic类型仓库,山寨一个yum仓库。

首先我们建立一个Generic的Repo,还是local类型的。根据官方文档,generic类型的仓库可以上传任何类型的package,但是不会为建立索引。所以我们在建立yum仓库的时候,需要提前建立好yum仓库的那些metadata文件,如果直接拷贝rpm包是不行的。我们提前需要通过reposync和createrepo来同步一个仓库,这里我拿之前同步的Redhat的几个官方仓库来做此次测试。

第一次用api的方式测试上传,命令如下:curl -u admin:password -X POST "http://192.168.26.130:8081/artifactory/api/import/repositories?repo=yum&path=/repo" 但是此种方式,只支持一级目录,不能包含子目录,所以放弃

第二次用官方的cli工具测试上传,首先下载cli工具:curl -fL https://getcli.jfrog.io | sh 然后运行 ./jfrog rt u "(*).(*)" repo --recursive=true --include-dirs --flat=false --url http://192.168.26.130:8081/artifactory/yum/ --user admin --password password 特别注意这里--flat=false这个参数必须加上,否则包含子文件夹的目录不会按照目录结构递归传输,导致所有东西全放在一级目录。

上传完毕之后,我们可以看到4个repo仓库都被同步到repo文件夹中了

最后,我们手动添加一个yum repo文件到系统中进行测试:

# vim /etc/yum.repos.d/arti.repo

[arti]

name=arti

baseurl=http://192.168.26.130:8081/artifactory/yum/repo/rhel-7-server-rpms/

gpgcheck=0

# yum repolist

Loaded plugins: langpacks

repo id                                repo name                                                              status

arti                                  arti                                                                    5,463

base/x86_64                            CentOS-7 - Base - mirrors.aliyun.com                                  10,097

*epel/x86_64                          Extra Packages for Enterprise Linux 7 - x86_64                        13,473

extras/x86_64                          CentOS-7 - Extras - mirrors.aliyun.com                                    305

updates/x86_64                        CentOS-7 - Updates - mirrors.aliyun.com                                  738

repolist: 30,076

这里我们看到,我们的arti仓库已经可用了

至此,我们已经配置好了Docker仓库和Yum仓库。JCR同样支持HELM仓库,但是比如Mavean NPM PHP Python Ruby的仓库,就得买商业版的Artifactory了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270