【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

原创干货|私有镜像库构建攻略

在Kubernetes中部署Elasticsearch

 

 

Refer: 把JFrog Artifactory作为Docker镜像仓库

 

 
posted @ 2020-01-10 15:32  TonyBen2018  阅读(491)  评论(0)    收藏  举报