AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

把 JFrog Artifactory 作为 Docker 镜像仓库

  • 2020-04-23
  • 本文字数:3232 字

    阅读完需:约 11 分钟

把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=trueingress.hosts[0]=35.190.61.62.xip.ioartifactory.service.type=NodePortnginx.enabled=falseingress.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.ioUsername: adminPassword:Login Succeeded
复制代码


继续我们的测试,pull 一个公共的容器镜像,re-tag 它,接着把它 push 到新的私有仓库中。

Pull 一个公共的容器镜像

Pull a Public Container Image$ docker pull nginxUsing default tag: latestlatest: Pulling from library/nginxf17d81b4b692: Pull completed5c237920c39: Pull completea381f92f36de: Pull completeDigest: sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2eStatus: Downloaded newer image for nginx:latest
复制代码

Re-tag 镜像

你可以在系统中看到当前的镜像 id 和信息了:


$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx               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:latestThe push refers to repository [docker-demo.35.190.61.62.xip.io:80/nginx]86df2a1b653b: Pushedbc5b41ec0cfa: Pushed237472299760: Pushedlatest: 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 资源,把这两者结合起来,就能把你从繁琐的工序中解放出来,专注于你工作的中心,这种自由才是最重要的!


2020-04-23 17:213391

评论

发布
暂无评论
发现更多内容

react源码解析8.render阶段

buchila11

React React Hooks

业务请求量膨胀的扩容技术实践

博文视点Broadview

AI 收藏夹 Vol.003:AI 能听懂阴阳怪气吗?

Zilliz

神经网络 AI 计算机视觉

Rust 元宇宙 10 —— 接入和协议

Miracle

rust 元宇宙

Git进阶(一):git 管理文件之后文件颜色的含义

No Silver Bullet

git 学习 git revert 12月日更

【Flutter 专题】01 图解 Windows 环境下安装配置环境

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 12月日更

【Pandas学习笔记02】-数据处理高阶用法

恒生LIGHT云社区

Python 数据分析 pandas 数据可视化

如何在 Vue 中使用 防抖 和 节流

编程江湖

前端开发面试之框架react的相关问题及答案

@零度

大前端 React

技术管理哲学随笔:面对大量事业部需求与产研团队资源之间的矛盾

dclar

团队管理 管理 CTO

老铁久等了,尚硅谷Vue大型电商项目:尚品汇教程发布!

编程江湖

Vue 大前端

Java难吗?Java基础知识最强总结(2021版)

XiaoLin_Java

Java

技术驱动未来,保险极客凭借数字团险领跑

科技热闻

面试官:Java 线程如何启动的?

华为云开发者联盟

Java 线程 JVM 时序图 Java 线程

一文带你读懂数字管家

HarmonyOS开发者

HarmonyOS OpenHarmony

全程干货,用 python 下载某站全部【免抠图片】,图片背景透明,格式PNG

梦想橡皮擦

12月日更

react源码解析7.Fiber架构

buchila11

React React Hooks React Diff

在 Flutter 中如何使用TabBar和TabBarView创建选项卡布局【Flutter 专题 13】

坚果

flutter 28天写作 签约计划第二季 12月日更

华为云企业级Redis评测第一期:稳定性与扩容表现

华为云开发者联盟

redis 测评 GaussDB(for Redis) NoSQL数据库 企业级Redis

大厂算法面试之leetcode精讲14.排序算法

全栈潇晨

LeetCode 算法面试

2021年马上要结束了,这5款Java框架你都了解吗

@零度

Java spring

模块5-课后作业

21°Char

你知道什么时候用Vue计算属性吗?

华为云开发者联盟

Vue 字符串 逻辑 模板 计算属性

使用 HTML、CSS、JavaScript 创建一个简单的井字游戏

海拥(haiyong.site)

大前端 js 28天写作 签约计划第二季 12月日更

Java中抽象类和接口的区别

编程江湖

JAVA开发 java编程

使用HTML,CSS 和 JS 创建 Chrome 扩展程序

海拥(haiyong.site)

json chrome扩展 28天写作 签约计划第二季 12月日更

大数据开发开源平台之Spark SQL的基础

@零度

大数据 spark SQL

Groovy热更新Java实践

FunTester

Java 测试开发 热更新 Groovy FunTester

12.7直播预告|「淼懂·观测云实践学堂」全新栏目上线!带你走进观测云的精彩世界!

观测云

可观测性 直播 可观测

尚硅谷Vue大型电商项目:尚品汇教程发布!

@零度

Vue 大前端

你该不会拿 CSAPP 垫显示器吧

Zilliz

把JFrog Artifactory作为Docker镜像仓库_文化 & 方法_Rancher_InfoQ精选文章