JFrog容器注册:在城里有一个新的容器注册
DevOps世界的新成员是新的社区工具,JFrog容器注册中心!获取关于市场上最新的容器注册表的演示和讨论,它如何与您现有的工具堆栈集成,以及如何开始。想试驾一下JFrog容器注册表吗?
免费试用在这里
会议议程:
- 什么是JFrog容器注册?
- JFrog容器注册表是如何不同的元数据,元数据,元数据安全?
- 是的!JFrog容器注册表,由JFrog Xray多重注册表提供安全支持,一次无缝升级
- 演示
- 常见问题
会议记录
今天的主题显然是JFrog容器注册。
那么,这是我们今天的议程。我们要讲的是,什么是JFrog容器注册?为什么你需要JFrog容器注册?我们将讨论容器寄存器支持哪些技术。它支持什么类型的存储库。我们将讨论多存储库升级,这是一个非常非常重要的方面。我们将讨论元数据的重要性。我们将讨论构建集成和JFrog CLI。关于Artifactory查询语言。关于安全。 I’m going to show you a demo. And we are going to talk a little bit about how JFrog Container Registry stack against competition. And then, we will have time for questions.
那就是我。我叫Baruch Sadogursky。我是JFrog开发ops宣传部门的负责人。但我们可以在推特上继续聊。抱歉,我的推特账号是@jbaruch。
所以,JFrog容器注册。首先,你需要知道的最重要的事情是JFrog Container Registry是基于JFrog Artifactory的。所以它是JFrog Artifactory引子下,这意味着你得到同样的质量。您有10年的二进制文件管理经验。你已经证明了惊人的可扩展性。所有这些都是内置的,在JFrog Artifactory,在JFrog Container Registry。
它支持容器生态系统的两种主要技术,即容器映像,即Docker和Helm存储库。我们加入的另一个非常重要的特性,我们会看到它有多有用,就是对通用存储库的支持,抱歉,通用存储库基本上意味着你可以用它做任何你喜欢的事情,做任何需要在那里做的工作。
它旨在帮助团队开始进行工件管理和容器化。显然,它是完全可操作的,您可以将其用于团队的任何状态。但主要目的是在开始时寻找一个容器注册表,这是一个很棒的免费选项。这是混合动力车。这意味着你可以在本地使用,也可以在云端使用。由你决定。你可以把两者结合起来。如果你需要安装多个容器注册表,你可以在云中进行组合,使用on-prem进行设置,这就是混合的意思。
下一个问题是为什么JFrog容器注册比其他所有容器注册都重要?所以,首先,它是免费的。你可以下载,也可以使用。用户数量,服务器数量,硬件,基本上都没有限制。它是完全免费的,没有任何限制。
它简化了流程……它适合简单的流程,不需要管理中间二进制文件。所以,如果你只在你生成的图像中使用一个版本,如果你不需要保存和管理中间的二进制文件,那么JFrog容器注册表就完全覆盖了你的场景。
对于不需要工件复制的位于同一位置的团队来说,这很好。所以,如果你有一个组织,在一个地方工作,这是很好的。如果你不需要任何复杂的分销场景,或者类似的东西。基本上,如果你只需要一个容器注册表,我们相信,JFrog容器注册表实际上是你最好的选择。而且,正如我已经提到的,它是免费的。
正如我提到的,它支持Docker Registry。很快我们就会完全支持容器注册表规范(听不清00:05:09),目前完全支持Docker。这就是开箱即用的方法。它还支持Helm,正如它在Helm 2和Helm 3中定义的那样,在没有扩展容器注册表的情况下构建Helm图表存储库,Helm存储库。而且,正如我提到的,它支持通用存储库。通用存储库对于管理其他类型的工件非常有帮助。
对于存储库类型,它支持本地存储库。我们所说的本地存储库是指部署自己的Docker映像和Helm图表的地方。这就像Artifactory本身的一个物理存储。
远程存储库。远程存储库是远程注册中心和存储库的代理。所以,你可以代理Docker Hub,你可以代理世界上任何其他Docker注册表,Artifactory将很容易地存储来自JFrog容器注册表的工件。因此,通过这个远程存储库解析的所有内容都将被保存并保存在那里。在演示过程中您将看到它是如何工作的。很明显,这让你的生活变得更简单在解析时间方面,也可以防止停机,等等。
仓库的第三部分是虚拟仓库。虚拟存储库在为多个注册中心或存储库提供单一URL、单一注册中心视图方面非常有用。因此,您可以定义任意数量的本地、远程或虚拟注册中心。然后,你可以有一个虚拟注册表,它会给Docker一个URL来连接。再说一次,这是非常重要和独特的。它们三个的组合在不同的容器注册中心中是唯一的。在接下来的演示中,你们会再次看到,它们每一个的重要性。
多存储库设置带来的另一个非常重要的特性是多存储库提升。你需要权衡如何在Docker映像中建立推广。您可以提升Docker文件,然后从头开始重建。很明显,这是非常危险的,因为您可能最终使用的Docker容器与您在生产环境中希望使用的容器不同。另一种选择是安装多个注册服务。然后,如何在这些多个注册中心之间进行推广?通常你需要做一些事情,比如拉,或者重新标记,和推,这些在Docker图像中都不会做,因为Docker图像又大又慢,所以这不能很好地工作。
有了JFrog Container Registry,所有这些问题都解决了,因为你实际上从同一个后端,从同一个存储中设置了多个注册表。它看起来像是Docker的不同注册表,Docker提供了严格的安全性和质量门槛。而且这个促销活动实际上是免费的。即时,甚至不是快速,但是即时,因为这些文件不仅它们不是从网络上下载和上传的在推送,重标记,拉取的情况下。它们甚至不会在本地文件系统中移动,因为文件系统保持不变。因此,您可以获得拥有多个注册中心的所有好处,严格的门,但没有任何成本,而且推广实际上是免费的。我们在演示中也会讲到。
元数据。JFrog Container Registry在元数据方面表现出色,很明显,JFrog Container Registry继承了元数据。这三种类型的元数据都存在。隐式元数据,如文件名或Docker映像。层的路径,校验和,大小,这些信息。显式元数据,例如,它是如何创建的,构建名称是什么,构建号是什么?以及您想要添加的任何自定义元数据。像QA状态、目标体系结构或任何其他类型的元数据都是可用的。然后,一旦你有了这些元数据,你就可以通过构建集成、JFrog CLI、REST API和矩阵参数,甚至UI来设置它。显然,你可能不会通过UI来做,但这也是存在的。
然后,当你使用元数据时,你可以通过矩阵参数进行过滤。因此,您可以构造一个查询,该查询将只引用处于特定状态或特定成熟度的图像。显然,另一个选择是使用JFrog CLI。这也是一种很好的方式,但是你甚至可以用REST API来实现。另一个非常非常强大的选项是使用Artifactory查询语言。给你们一个例子,Artifactory查询语言是什么样的,这是一个JSON查询,你可以看到它是如何查询一个特定的文件这个文件来自于一个特定的构建号。你可以想象它是如何处理其他元数据的。例如,您可以查询已下载的文件,或文件的数量,或由某个用户创建的文件,或具有某种目标架构,或显然,这些的任何组合。
容器注册表的另一个非常重要的方面是安全映像扫描。你需要它来防止下一次心脏出血[听不清00:12:37]。有两个方面。首先是控制。显然,这是内置的,有一个通用的存储库可以提供更多的控制因为它不仅允许你控制图像,还允许你控制依赖项。我将向您展示一个示例,如何确保您拉入Docker映像的内容也在您的控制之下。
实际上,JFrog Container Registry提供了来自JFrog Xray的信息,这是JFrog的安全工具,具有世界上最好的安全可更新数据库[听不清00:13:32]。您的JFrog容器注册表将能够向您显示Docker映像上来自此来源的漏洞,来自[听不清00:13:46]。它马上就要来了。我有一个演示的预览。但是,在一天结束的时候,你也会得到它,而且是免费的。
有了这些,让我们开始演示。我想展示给你们的是,假设,我有一个Docker映像,它行为不正确,我需要排除故障,有些东西不能工作。问题是我对这个Docker形象了解不多。名字是最新的,对我没什么帮助。我不知道发生了什么。我可以尝试做的是,我可以在这个图像上运行docker inspect,看它是否能给我更多信息。
我在这里看到了什么?我看到层,它是一堆校验和,然后是更多的校验和,然后是一些标志。这是环境变量,都是Java写的。其实没什么用。这里唯一有用的信息是该图像的sha256。所以,我要把它,我要去JFrog容器注册表。看看能不能查到相关信息。我在这里有一个校验和搜索,我可以看到发生了什么。这里,这一层,实际上是一堆Docker图像。所以我有最新的,但我也知道同样的图像实际上是一堆其他的。 So, for example, 21 and 19, 23 and 26. It was rebuilt multiple times. And this actually is already very, very important information from which I know what’s going on.
所以,我可以去任何一个。以26为例。我可以看到,Docker图像发生了什么。我可以看到这里,Docker信息,我可以看到图层,每一张幻灯片上实际发生了什么。我也可以在不同的视图中得到相同的信息。有一个包视图可以显示所有的包。这是我的JFrog Docker应用程序。我可以看到这里,最新的,这是我拥有的,但也是26,真实的版本号。再一次,我可以看到图层,我可以看到发生了什么。
所以,回到我们正在看的东西。我们看到的Docker图像在这里。它位于一个名为docker-prod-local的存储库中。Docker-prod-local26,这就是我们要找的。现在,让我们看看我们是怎么做到的。我们可以看元数据,这里的属性看到一些有用的东西,比如构建名称,构建号,还有构建URL。构建URL,这是一个链接到创建这个Docker映像的CI服务器。我们去看看。
我们使用的CI服务器是一个不同的管道,那是JFrog的CI和CD2,它是预览版,但我认识一个人,他认识一个人,他给了我访问权限,所以我可以向你展示它的样子。但我们真正感兴趣的是这个管道。让我们看看它,试着理解发生了什么,以及这个Docker图像是如何结束的。
我们可以看到一些步骤。第一个是buildDockerApp。我们可以看到,我们做了什么。我们只需要运行DockerBuild,然后构建我们的映像。没什么有趣的。pushDockerApp。这一步更有趣。你可以看到这里我们执行DockerPush,我们可以把DockerPush形成一个存储库,一个叫做docker的注册表,就在这里。它叫做docker。这个码头是什么? docker, if we look at the list of our repositories is this one. This repository is a Docker registry and it’s called docker. And it’s actually where our CI actually pushed our image. And what we can see here, that we have a list of included repositories. That means that docker is a virtual repository. So, if you are going to list of virtual repositories, we can see our docker registry right here. That’s our repository and that’s our registry. And you can see here that it includes four other Docker repositories, Docker registries, docker-prod-local, docker-dev-local, and then docker-remote and bintray-docker-remote, two local store remotes.
现在,virtual意味着它实际上在单个URL下隐藏了多个注册中心。当管道将图像推送到这个注册表时,问题是,它到底去了哪里?为此,我们有一个设置,它是默认部署存储库。默认部署存储库,这是推送到此存储库的文件的最终位置。我们可以看到它们最终会在docker-dev-local中结束。
现在回到我们的存储库列表,这是docker-dev-local。我们可以看到它是空的。这里只有一个,26不是这里,本地不是这里。那么,问题是,到底发生了什么?为什么不在这里?因为,正如你们所记得的,我们看到它被推到了这里,而且推得很成功。答案是,在这个过程中还有另外两个步骤。下一个是publishBuildInfo。publishBuildInfo是关于这个构建的元数据的发布。所以,如果我们可以进入Docker注册表,我们会看到CI服务器创建的构建实际上被记录在JFrog容器注册表的构建浏览器中。
你可以看到这里,我们有demo_kubecon构建,这里有很多构建。你可以看到它们是如何登记的。你可以看到哪些模块发布了,哪些环境变量可用。例如,我们可以看到我们使用的Java版本。我想是的。这里还有什么。所有这些信息实际上都是一个被推送的JSON文件,这就是publishBuildInfo步骤所做的。
下一步是推广构建。在这里,没有测试,但在您的环境中,您显然会有测试。您可以使用REST API、JFrog CLI或CI服务器的本地功能将这个构建从docker-dev-local升级到docker-prod-local。这是一个使用REST API的例子,我们只用curl。
你可以看到这里我们运行的是promote,我们将它从docker-dev-local提升到docker- prodd -local,我们提升我们的构建。这就是为什么当我们查看容器注册表时,我们实际上不会在docker-dev-local中看到我们的映像,而是在docker-prod-local中。这是26号。
为什么这很重要?这很关键,因为从Docker客户端角度来看,Artifactory中的每个Docker存储库,比如Docker -dev-local或Docker -prod-local,实际上都是一个完整的Docker注册表。如果您在Artifactory中构建了将文件从一个存储库移动到另一个存储库的推广管道,那么您将从Docker客户端的角度构建这些质量和安全大门。因此,例如,使用这种升级,您可以保证运行时环境在升级到生产环境之前甚至不会看到任何东西,因为它只会看到Docker -prod-local作为Docker注册表。在映像最终出现在docker-prod-local中之前,您的生产环境甚至无法看到它们。把它们移到那里只是一个CPI的问题,这很简单,就是真正地移动它们。
这里还有两个REST api。所以,我们先来看它们。这个实际上也做了一些非常有趣的事情。您可以看到,它再次调用了相同的促销API。但这一次,它实际上将映像保存在同一个存储库中,从docker-prod-local到docker-prod-local,但它将映像从构建号重命名为最新的,并进行复制。这就是为什么我们这里有,相同的图像下面有两个不同的[听不清00:24:28]。这是第26张,最近的一张实际上指的是同一个图像。这是非常强大的,因为尽管我们都知道latest的问题这个latest可能根本不是指latest,有能力使用latest实际上是非常方便的因为你只需要做docker pull,你就会得到一个,它是目前最新的。如何确保最新指的是当前的最新?和你看到的一模一样。 We are going to retag every new build as latest.
但现在,又有一个问题,如何知道最新指的是什么?我们提供这些信息作为额外的元数据,正如我告诉你们的,我们所说的自定义元数据。这是我们如何做到的一个例子。我们添加属性,这个属性叫做docker。refersTo,我把它放到了最新的版本号。你可以看到,如果我看最新的,我看它的属性,我可以看到这里有一个条目,docker。refersTo 26,这就是我如何知道它实际上指的是图像编号26。我知道最新的是这个。这显然是非常非常强大的。
好的,现在,在您展示了它是如何工作的之后,让我们来看看我们创建它的Docker文件。所以,你可以看到这里,它在哪里?我可以在GitHub上给你看。这是Docker文件,Docker -app。你可以看看Docker文件。这就是它所做的。它基本上取一些WAR文件并将其添加到Docker映像中。然后,我们就可以开始了。
现在,有趣的部分是from。来自Docker镜像是我们镜像的基本依赖项,也是来自JFrog容器注册表的镜像。这是一个叫做JFrog Docker Framework的图片。你可以很明显地看到。这就是jfrog-docker-framework,我们依赖于第5条。这是最新的一种,经过检验证明是可靠的。这个JFrog -docker-框架也是使用JFrog管道构建的。也经历了同样的晋升之类的事情。
如果你看这里可用的管道,我们可以看到这里我们有buildDockerFramework。最后一个是,让我们看看,这是Docker应用程序,让我们找到第五个。好了,开始吧。buildDockerFramework。这就是我们提到的第5个框架。你可以看到这里所发生的是,它被建造,然后被推进,然后被推广,非常相似。我想在这里展示的是如何从和构建另一个,这里。好了,这已经在复制了。
我想告诉你们依赖关系是怎么来的。这里是artifactory_configure, docker_login。好的。我看不见它。获取管道。好了,这就是我们建造容器的地方。所以这里,所有这些文件,Tomcats和JDK,它们也来自JFrog容器行业。它们来自我们拥有的一个通用存储库。这里我们有一个通用文件,里面有框架需要的依赖项。你可以看到这里有我们使用的Java JDK和Apache Tomcat。 And they also come from JFrog Container Registry, they also come from a controlled resource. This is how you can guarantee that you don’t download a bunch of unknown files from unknown resources over the internet. But instead, you have everything controlled in one repository.
说到控制以及如何控制一切,你实际上可以看到与安全部分的集成。如果我们回头看看docker-prod-local,看看我们的应用,我们可以看到这里。抱歉,[听不清00:30:23]。你可以在这里看到一个x射线标签。这是一个关于如何与JFrog Xray集成的预览。你可以看到这里有很多漏洞。您可以单击其中任何一个,并查看有关错误的所有信息。所以,你可以看到我们在Tar中有漏洞。这个漏洞实际上就在这一层。这一层在Docker图像中。然后,你可以看到组件,总结,描述。 And comes from us information about the CVE, the CVE it contains, and then all the information you need in order to see, and understand what’s the issue with this image. And, obviously, you will see all the vulnerabilities for all those files.
所以只是回顾一下,JFrog容器注册表,你可以在prem上免费安装它。你可以在任何主要的云提供商的免费层下免费获取它,亚马逊网络服务,谷歌云平台和微软Azure。这都是免费的。您可以在JFrog容器注册表中创建无限数量的注册表,它们可以是本地的,用于存储您部署的映像。或者远程存储库的代理。我没给你看遥控器。Docker -remote,你可以看到它实际上从Docker Hub缓存了三个不同的图像。这是我们用在基像上的。它们也被缓存了,你也可以控制它们。或者virtual,它允许你定义一个统一的URL,或者为多个Docker存储库定义一个统一的视图,这意味着Docker Registry在下面。然后,一旦你这样做了,你可以建立从一个注册中心到另一个注册中心的即时和免费的推广。
还有,很明显,元数据的重要性。你看到了Docker image上的属性是如何给你任何关于它的信息的。您可以在这里添加自定义属性,然后使用REST API或Artifactory query Language查询它们。它对Docker和Helm都是一样的。你可以看到这里我们有一个Helm包,在Artifactory JFrog容器注册中心。这是一个Helm存储库,你可以看到所有的图表,并深入到任何图表中,查看任何细节。
好了,让我们回到幻灯片,谈谈竞争。所以,你可以看到JFrog的竞争是如何不同的。这和我给你们看的演示有关。所以,我谈到了它是如何混合的。它是在预置和在云中,支持Docker Registry, Helm Repository,通用存储库,远程和虚拟,并支持元数据。如果你将它与亚马逊的ECR进行比较,那么它显然是在AWS的云中。它们具有一些预置功能,但非常有限。基本上,它只支持Docker注册表。可以在图像上应用某种元数据,但没有像JFrog CLI或附带的Artifactory查询语言那样强大。
谷歌Container Registry,完全一样。它在云端,仅此而已。而且它只支持Docker,除此之外什么都不支持。与Azure容器注册表一样,它也支持Helm存储库,但这是唯一的事情。其他的几乎都不存在。GitLab容器注册。它们在本地和云计算中,所以它们是混合的。但是,同样,它们只支持Docker,而不支持其他选项。而Harbor拥有最先进的技术。安装在预置,但实际上没有任何好的云解决方案。 It supports Docker. It supports Helm. There is some kind of remote repositories, but they are not integrated. And they are no promotion. Obviously no virtual repositories. And the metadata capabilities are very limited and nothing that can compare to Artifactory Query Language. So, I hope I convinced you that JFrog Container Registry is the best container registry out there at the moment.
现在,我们有10分钟的时间来回答你们的问题。所以现在,如果你还没问过他们的话,是时候问了。哇,问题真多。这太棒了。那么,让我们开始吧,把这些问题都解决了。
好了,第一个问题是,“JFrog容器注册表和Artifactory开源之间的关系?”所以,我会说这些是不同版本的JFrog Artifactory,它们支持不同的JFrog Artifactory完整版本所支持的技术子集。开源版本支持、Java存储库和通用存储库。并且JFrog容器注册表支持Docker, Helm和generic。显然,无论如何都没有办法把它们结合起来。如果你想要全面的支持,我建议你使用JFrog Artifactory。如果您仍然在寻找一个免费的解决方案,那么您最好安装其中的两个。这样做没有许可证限制。我个人认为,在某些时候,管理越来越多的工具所带来的麻烦将比只拥有一个支持所有工具的Artifactory实例更加昂贵。我希望你们能理解。
另一个问题是,“我可以代理需要许可证认证的Docker容器注册表来访问吗?”答案是肯定的。在设置远程存储库时,有一种方法可以提供身份验证。这就是你连接到其他容器注册表的方式,它需要认证[听不清00:38:14]。
另一个问题。“上次我看到推广Docker映像存储库需要API调用,这对[听不清00:38:27]很好,但一个小项目可能喜欢手动处理。UI中有按钮吗?”UI中没有按钮。这是一个API调用。对于不想处理curl上所有这些标记的小型团队,我的建议是编写一行shell脚本,接受两个参数并简化工作。UI中没有按钮。据我所知,这也不是计划好的。
“我没听错吧,JFrog容器注册中心将免费提供Xray服务。”是的,你说了。你没听错。来自Xray的信息将在JFrog容器注册中心免费提供。你会有一个视图,让你看到所有的漏洞在JFrog容器注册表内JFrog Xray,是的。很高兴,真令人兴奋。这对我们来说也是令人兴奋的。
“请展示如何使用Docker构建来使用通用代表”啊,好的。我想我理解你的问题了。问题是,“如何在构建信息中提供关于我所做的事情的信息?”我该如何提供。"对不起"我该如何处理我的通用回购?我如何在构建信息中提供这些信息?”为此,我将再次分享我的屏幕,因为我想告诉你们在文档中哪里可以找到它。这非常简单直接。
所以,如果你只是谷歌为JFrog CLI你将能够找到文档。在JFrog CLI Core Artifactory中,你会看到所有的构建集成部分。你可以看到这里,例如,[听不清00:40:53]文件规格。你可以看到,如何提供文件规范,这是一组文件。然后,您可以将构建名称和构建号添加到下载和上传这些文件规范的命令中。然后,这些文件将作为依赖项或工件记录在构建信息中。您下载的文件将成为依赖项。您上传的文件将成为工件。这就是它的工作原理。
基本上,当你运行命令,比如,让我快速找到它,下载文件和上传文件。这里,上传文件。因此,当您运行上载命令时,您可以提供一个文件规范,然后是构建名称和构建号。一旦您这样做了,您下载的这些文件将成为构建的依赖项。所以,我希望这能有所帮助。
“数据是如何存储的?我们正在寻找一种跨地区共享注册表的方法,我们可以通过JFrog实现吗?”所以JFrog Artifactory有许多不同的数据提供者,从本地文件系统到NFS,一直到S3数据提供者。它们在不同的订阅之间是不同的。JFrog Container Registry提供了一个本地文件存储,这意味着文件将保存在本地磁盘上。
如果你需要更多可扩展的解决方案,比如一直到S3,那么寻找不同的订阅,不同的JFrog Artifactory许可证(如Pro和Enterprise,甚至Enterprise+)可能是有意义的。此外,跨区域共享注册中心的功能是复制,在Artifactory Pro、Enterprise和Enterprise+中也可以使用。复制可以让你在JFrog Artifactory的其他实例中使用Docker镜像。目前,它们被推送到JFrog Artifactory的本地实例中。
“您能否在推送映像之后或仅在构建期间向映像添加元数据?”显然,我们可以随时添加元数据。我们在管道中看到的是一个单独的步骤。所以,这与构造无关。我们首先建造了它。然后,我们添加元数据,但可能要晚得多。我们希望在推送期间添加一些元数据,这些元数据将是构建期间的构建名称、构建号和环境变量。所有这些信息都与构建本身相关,但是我们可以很容易地在之后添加更多的元数据,实际上在任何时间点。
另一个问题是免费对于云商业模式意味着什么。这意味着我们有一个免费层,就像云中容器寄存器的任何其他提供者一样。您可以在一定的存储空间和流量限制范围内免费使用它。所以,答案是肯定的,即使在云中也是免费的。
另一个问题是,“如果我已经在使用Artifactory,我还需要使用JFrog容器注册表吗?”这是什么关系?”所以,好消息是,如果你已经在使用Artifactory,除非它是其他免费版本,比如开源版本、柯南版、社区版,完整的JFrog Artifactory已经包含了JFrog容器注册表的所有功能。所以,你不需要做任何事情。你已经把你的JFrog容器注册表内置到任何JFrog Artifactory Docker Artifactory实例中了。
我想差不多就这些了。如果你还有其他问题,我可能还有几分钟。如果没有,非常感谢你们的到来。我希望这次网络研讨会对你有用。请继续使用JFrog容器注册表,我们将非常高兴,如果你只是获取它,安装它,开始使用它。没有问题。这是我们给你的免费和无限的使用。
好的,非常感谢。
