【RancherLab】把JFrog Artifactory作为Docker镜像仓库
把JFrog Artifactory作为Docker镜像仓库
本文是使用Rancher部署JFrog Artifactory的续集。本文中我们将演示如何把JFrog Artifctory作为你Docker镜像的私有仓库。
注意:使用JFrog Artifactory的功能前需要获得证书,不过你可以先选择试用30天,然后继续按照下文的流程操作。
为部署工作准备GCP
如果你想在本地网络以外的地方使用Artifactory,首先要有一个公有IP地址。在这一系列文章的上篇中,我们将集群部署到谷歌云,本文中我们将继续使用GCP资源。当然,你要使用其他公有云都是一样的。
你可以通过谷歌云Shell或者gcloud命令在本地环境中运行下面的命令,申请公共IP:
gcloud compute addresses create artifactory-demo --global
输入名称用于取回IP地址(此次教程中我们取的名字是artifactory-demo)
gcloud compute addresses describe artifactory-demo --global
在output中查找address标签
address: 35.190.61.62
为了给我们的部署服务获得满足需求的域名,我们将使用Basecamp的xip.io服务,在本教程中它的地址是35.190.61.62.xip.io。
部署Artifactory
你可以按照上一篇文章中的步骤来部署Rancher和Artifactory,但是当你进入到应用程序部署页面中的配置部分时,还需要添加及修改下面的变量:
ingress.enabled=true ingress.hosts[0]=35.190.61.62.xip.io artifactory.service.type=NodePort nginx.enabled=false ingress.annotations."kubernetes\.io/ingress\.global-static-ip-name"=artifactory-demo
(可以复制/粘贴这块的文本到输入框里,Rancher会自动转换)
一切完成后,应该会看到下面的样子:

点击Launch开始部署资源。
变量的概念解释
新Artifactory实例启动起来了,现在来看看刚刚我们都配置了什么。
ingress.enable=true
该变量允许创建一个ingress资源,它将作为Artifactory的代理,在我们的例子中,Ingresss是带有GCP的负载均衡器。
ingress.hosts[0]=35.190.61.62.xip.io
这设置了Artifactory的主机名。xip.io的一个神奇之处在于,我们可以创建任何子域并将其解析成IP地址,因此当我们使用docker-demo.35.190.61.62.xip.io时,在后面它都会被解析成35.190.61.62。
artifactory.service.type=NodePort
在Kubernetes节点上的随机端口公开Artifactory的服务。Ingress资源将向该端口发送流量。
nginx.enabled=false
我们是通过Service资源,利用Ingress和Artifactory进行通信的,因此我们希望禁止掉nginx代理,因为Artifactory在某些情况下会启动它。
ingress.annotations…
这就好比是将Kubernetes绑定到静态公共IP地址的粘合剂。我们将它设置成你保留的地址的名称,便于Ingress查找和使用正确的IP。我们必须避免使用长长的内容,因为那是标注(annotations)的name。如果不是这样的话,Kubernetes可能会误解我们想要做什么。
检查部署
当部署完成后,查看Workloads选项卡。这里你会看到两个工作负载,一个是应用程序(artifactory-artifactory),另一个是artifactory使用的PostgreSQL数据库(artifactory-postgresql)
下一步查看Load Balancing选项卡,你会看到Ingress对象已经有了我们提供的主机名。

如果选择View/Edit YAML并滚动到下面,你可以看到指向GCP中地址名的标注(图片中的第10行)

在Ingress定义的下面你还可以看到spec.rules.host中的主机名匹配到了status.loadBalancer.ingress.ip的IP地址。
配置Artifactory
关闭View/Edit YAML窗口,会返回Load Balancing选项卡,这里你可以看到一个带xip.io地址的链接。点开它打开Artifactory,或者在浏览器中输入主机名。
单击wizard,首先添加证书密钥,接着设置管理员密码。点击其余部分一直到wizard完成。
在左侧的菜单中,选择Admin,然后在Repositories下选择Local。

在这你可以看到经设置wizard后创建的默认仓库。在右上角选择+New创建一个新的仓库,用Docker作为package类型,输入仓库的名称。在本例中,我们选择了docker-demo,其余内容都使用的是默认值,然后选择Save & Finish来创建新的仓库。

这样一来,你选择的名称(即我们这里的docker-demo)就成为了xip.io域名的子域。在我们此次的安装中,我们使用的是docker-demo.35.190.61.62.xip.io。当然你配置的会和我不同,不过格式是相同的。
对镜像仓库进行测试
拥有了私有的Docker镜像仓库后,如果不使用它,那还有什么意义?
对生产部署,你将通过SSL证书来保护仓库的安全,这需要真实域名中的一个真实主机名。在本教程中,你可以直接使用新创建的仓库,不过要告诉Docker这是一个不安全的仓库。
按照文档创建或编辑daemon.json:https://docs.docker.com/registry/insecure/。然后按照下面我的例子这样添加你的主机:
{ "insecure-registries": ["docker-demo.35.190.61.62.xip.io:80"] }
如果你使用的是Windows或者Mac的Docker,在应用的偏好中进行设置:

重启Docker应用更改的内容,在启动之后,你就可以使用仓库:
docker login docker-demo.35.190.61.62.xip.io Username: admin Password: Login Succeeded
继续我们的测试,pull一个公共的容器镜像,re-tag它,接着把它push到新的私有仓库中。
Pull一个公共的容器镜像
Pull a Public Container Image $ docker pull nginx Using default tag: latest latest: Pulling from library/nginx f17d81b4b692: Pull complete d5c237920c39: Pull complete a381f92f36de: Pull complete Digest: sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2e Status: Downloaded newer image for nginx:latest
Re-tag镜像
你可以在系统中看到当前的镜像id和信息了:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest dbfc48660aeb 2 days ago 109MB
Re-tag它,这样Docker就知道要把它push到你的私有仓库了:
$ docker tag nginx docker-demo.35.190.61.62.xip.io:80/nginx:latest
Push镜像到私有仓库
当镜像有了re-tag,使用docker push传到私有仓库:
$ docker push docker-demo.35.190.61.62.xip.io:80/nginx:latest The push refers to repository [docker-demo.35.190.61.62.xip.io:80/nginx] 86df2a1b653b: Pushed bc5b41ec0cfa: Pushed 237472299760: Pushed latest: digest: sha256:d98b66402922eccdbee49ef093edb2d2c5001637bd291ae0a8cd21bb4c36bebe size: 948
在Artifactory中验证Push
返回到Artifactory UI,在菜单中选择Artifacts:

这里就可以看到nginx镜像以及它的信息了。

下一步可以做什么
如果你有Artifactory的证书并且希望运行私有仓库,只需使用你自己的域名以及ingress上的SSL证书重复上面的教程即可。完成这些附加项之后,你就可以在任何Docker或者Kubernetes安装中使用私有仓库,而无需告诉主机它可能会出现和不安全仓库的通信。
清 理
要想清理掉文中出现的资源,先从Rancher中删除Kubernetes集群,并且从GCP中删除Rancher服务器:
gcloud compute --project=rancher-20 instances delete \ rancher-instance --zone=europe-west2-c
你还需要删除公共IP地址的分配:
gcloud compute addresses delete artifactory-demo --global
结 语
JFrog Artifactory提供了用于开发生命周期核心部分的服务,你几乎可以存储和检索到开发团队产生的任何类型的工件,并把这些工件存在一个集中的、受管理的地方,这样对于任何IP基础设施,Artifactory都是它重要的部分。
Rancher可以轻松地将Artifactory部署到Kubernetes安装中。短短几分钟内,我们就创建并运行了Artifactory,这安装所花费的时间甚至可能比实际上配置Artifactory本身所需的时间还短!
Rancher的出现让Kubernetes更容易上手,Artifactory更容易管理binary资源,把这两者结合起来,就能把你从繁琐的工序中解放出来,专注于你工作的中心,这种自由才是最重要的!
拓展阅读
在Kubernetes集群上部署和管理JFrog Artifactory
Refer: 把JFrog Artifactory作为Docker镜像仓库
浙公网安备 33010602011771号