Docker Hub和Docker注册表:初学者指南

Docker Hub (Docker的官方容器注册表)的使用量一直在飙升。从2019年11月到2020年7月底,从Docker Hub的总拉取(拉取是一个Docker镜像的下载)从1300亿增长到2420亿。这是集装箱化(尤其是Docker)变得多么流行的另一个标志。

Docker无处不在已经不是什么秘密了。但了解生态系统的具体情况可能具有挑战性。容器注册表究竟是什么?使用Docker Hub有什么好处?在这里,我们将帮助您回答这些问题,并为您提供一个循序渐进的示例,说明如何开始使用Docker的官方注册表Docker Hub。

什么是Docker注册表?

Docker注册表是一个托管和分发服务码头工人的图片

在许多情况下,注册中心将由多个存储库组成,其中包含与特定项目相关的映像。在给定的存储库中,标签用于区分映像的版本(例如ubuntu/httpd:version2.4, ubuntu/httpd:version2.5, ubuntu/httpd:version2.6)。“X”是标签)。用户可以拉(下载)他们想要使用的图像或推送(上传)他们想要存储在注册表中的图像。

通过为映像提供集中的源,注册中心可以帮助实现更严格的版本控制,并使管理和分发映像更容易。此外,许多注册中心服务将提供额外的功能,帮助自动化构建和部署过程,并提高安全性。

Docker注册表可以托管在云中或本地。除了Docker Hub,其他流行的Docker注册表示例包括:

控件中启动自己的Docker注册表官方注册中心图像,但一般来说,在使用这个基本图像作为起点之前,值得探索其他选择。

Docker Hub是什么?

Docker Hub是Docker的官方网站基于云的Docker镜像注册表。

正如您所料,由于Docker Hub是Docker的官方注册表,因此它是安装Docker时的默认注册表。它拥有超过10万张图片,包括MongoDB、nginx、Apache、Ubuntu和MySQL的官方图片,这些图片的下载量都超过了10亿次。

除了任何人都可以从中提取的公共存储库之外,Docker Hub还提供了私有存储库,个人或团队可以在其中托管他们希望限制访问的映像。Docker Hub还提供了GitHub和Bitbucket集成等功能,这些功能可以帮助自动化开发构建过程,并支持webhook, webhook可以作为从自动测试到通知的所有触发器。

为什么要使用Docker Hub?

那么,有那么多不同的Docker注册表选项,你为什么要使用Docker Hub呢?以下是Docker Hub的几个主要优点:

  • 一个大型的可信图像库-Docker Certified images, Verified Publisher images(经过Docker认证并由发布者验证),以及Docker发布的Official images为用户增加了一层信任。对于许多常用映像,有数百万甚至数十亿的下载,因此在使用Docker hub时,您可以依赖可靠的基础映像。虽然从用户的角度来看,这很好,但它也有利于发布者,因为在Docker Hub上托管一个图像可以让你的项目更多地曝光。
  • 免费套餐-目前,Docker的免费计划提供了无限的公共存储库和一个私人存储库,最多有3个合作者。这对于基本测试非常有用,可以帮助您熟悉该平台。然而,最近对服务条款的修改使其不适合认真发展。
  • 内置安全功能—所有帐户都可以从本地图像漏洞扫描中受益。“团队”帐户还可以访问审计日志和多因素身份验证(MFA),以进一步保护存储库。
  • 支持CI/CD的集成和特性Docker Hub还支持GitHub和Bitbucket集成、自动化测试、构建触发器和webhook,以帮助自动化开发管道并启用CI/CD(持续集成/持续交付)。

当然,没有放之四海而皆准的解决方案,所以Docker Hub不会是每个用例的正确答案。例如,如果您需要在本地存储映像以减少延迟或出于数据主权原因。在这种情况下,像Docker Hub这样的云平台并不是正确的答案。或者,您可能需要在本地缓存映像以减少延迟或带宽消耗。

如何使用Docker Hub:速成班

现在您已经了解了Docker Hub是什么,让我们来了解一下它的基本用法。在这里,我们将演示如何将镜像从Docker Hub拉到您的本地机器,然后将带有标记的版本推回您自己的存储库。

如果您想继续学习,您将需要一个Docker Hub帐户。如果你没有账户,你可以注册在这里。你还需要安装Docker。

步骤1:创建存储库

拥有Docker Hub帐户后,只需单击几下即可创建存储库https://hub.docker.com/repositories

首先,单击创建存储库

用户添加图片

给您的存储库一个名称和描述,选择您希望它是公共的还是私有的,然后单击Create。

步骤2:从Docker Hub提取Docker镜像

如果您愿意,您可以创建自己的图像,但为了本教程的目的,我们将拉出“Hello World”图像。

我们将首先从终端登录到我们的Docker帐户Sudo docker login -u 命令:

johnnyo@LAPTOP-5V55HON5:~$ sudo docker login -u username

密码:

警告!您的密码将未加密存储在/home/johnnyo/.docker/config.json中。

配置凭据帮助器以删除此警告。看到

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

登录成功

johnnyo@LAPTOP-5V55HON5: ~ $

注意我们收到的凭据警告。为了演示,我们将忽略它,但我们建议保护您的凭据以供生产使用!

接下来,我们将使用码头拉你好,世界命令。

johnnyo@LAPTOP-5V55HON5:~$ sudo docker pull hello-world

使用默认标签:latest

latest:从library/hello-world中提取

0e03bdcc26d7: Pull complete Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0

状态:为hello-world:latest下载了较新的图像

docker.io /图书馆/ hello world:最新

johnnyo@LAPTOP-5V55HON5: ~ $

步骤3:将映像推送到私有存储库

现在我们有了“Hello World”映像,在将其发送到私有存储库之前,让我们用一个新名称复制它。我们将用命令来做Docker标签<当前图像名称> <我们的用户名>/<新图像名称>[:tag]。我们将使用码头工人的图片命令列出前后的图像,以便我们可以看到更改。

johnnyo@LAPTOP-5V55HON5:~$ sudo docker镜像

存储库标记图像id创建的大小

你好,世界最新的bf756fb1ae65 9个月前13.3kB

johnnyo@LAPTOP-5V55HON5:~$ sudo docker tag hello-world我们的用户名/johnnyodemo:v1.1.1.1

johnnyo@LAPTOP-5V55HON5:~$ sudo docker镜像

存储库标记图像id创建的大小

你好,世界最新的bf756fb1ae65 9个月前13.3kB

我们的用户名/johnnyodemo v1.1.1.1 bf756fb1ae65 9个月前13.3kB

johnnyo@LAPTOP-5V55HON5: ~ $ johnnyo@LAPTOP-5V55HON5: ~ $

修改镜像名称不会改变镜像的内容。虽然这个特殊的更改是任意的,但关键是我们可以将本地映像推送到Docker Hub。这适用于任何本地Docker映像。

现在,我们可以使用命令docker push <我们的用户名>/<新映像名>[:tag]将映像推送到我们的私有存储库。

johnnyo@LAPTOP-5V55HON5:~$ sudo docker push我们的用户名/johnnyodemo:v1.1.1.1

push指的是repository [docker]。Io / ourusername /johnnyodemo]

9c27e219663c:层已经存在v1.1.1.1: digest: sha256: 90659bf80b44ce6be8234e6ff90a1ac34acbe826903b02cfa0da11c82cbc042 size: 525

johnnyo@LAPTOP-5V55HON5: ~ $

回到我们的Docker Hub帐户,我们可以看到新标签存储在我们的私有存储库中。

用户添加图片

如何代理Docker Hub与JFrog容器注册表

我们之前提到过码头工人中心免费层会限制开发。其中一个主要原因是对推拉的速率限制。在Docker Hub之外缓存图像可以让您克服这些限制。因此,找到合适的Docker Hub代理和缓存解决方案——无论是在本地还是在云中——都有很长的路要走。您将能够获得Docker Hub(丰富的可信映像)的优点,同时避免可能阻碍CI/CD工作流程的速率限制。

在这里,我们将介绍如何设置JFrog容器注册表来代理Docker Hub,从而允许您缓存经常访问的映像。我们将在本例中使用云平台,但是您也可以在本地免费启动JFrog。

专业提示:要深入了解JFrog容器注册表的配置或任何其他JFrog平台主题,我们建议阅读文档

步骤1:创建免费试用版

导航到这里链接并创建您的免费试用版,无需信用卡:

输入您的用户名、密码等。您将收到一封电子邮件来验证您的帐户,点击链接完成您的注册。

注意:我们建议选择一个地理位置接近您所在位置的服务器位置。

到达确认屏幕后,登录并继续步骤2。

步骤2:导航到远程存储库部分

一旦你登录到你的新账户,点击管理→知识库→知识库

用户添加图片

步骤3:创建一个新的远程存储库

点击Remote→+ New Remote Repository

用户添加图片

中的Docker图标选择包类型弹出。

用户添加图片

基本选项卡输入库的关键对于URL使用Docker Hub:https://registry-1.docker.io/

用户添加图片

对于这个基本示例,我们可以将其他所有内容保留为默认值。如果您想关联您的Docker Hub帐户,以便您对Docker Hub的推送/拉取请求将被认证,您可以在先进的选项卡。

当你完成后,点击保存并完成。

步骤4:登录到新创建的帐户并提取图像

在你的Docker命令行中,执行命令Docker login .jfrog。输入你的密码。下面是一个使用账号“johnnyo”的例子:

johnnyo@LAPTOP-5V55HON5:~$ sudo docker login johnnyo.jfrog.io

用户名:johnnyo@example.com

密码:

警告!您的密码将未加密存储在/root/.docker/config.json中。

配置凭据帮助器以删除此警告。看到

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

登录成功

johnnyo@LAPTOP-5V55HON5: ~ $

接下来,像从Docker hub中那样提取一个图像,但在其前面加上格式为的URL< your_server > .jfrog.io / your_repository /。我们将把当前的Ubuntu镜像拉到这里,所以我们将使用:< your_server > .jfrog.io / your_repository / ubuntu。例如,要使用我们的“johnnyo”服务器和“johnnyo”存储库获取最新的Ubuntu映像:

johnnyo@LAPTOP-5V55HON5:~$ sudo docker pull johnnyo.jfrog.io/johnnyo/ubuntu

使用默认标签:latest

最新的:从johnnyo/ubuntu

文摘:sha256: fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1

状态:下载了johnnyo.jfrog.io/johnnyo/ubuntu:latest的新映像

techchicago6400.jfrog.io techchicago6400 / ubuntu:最新

johnnyo@LAPTOP-5V55HON5: ~ $

我们现在可以看到,图像是在本地下载的:

johnnyo@LAPTOP-5V55HON5:~$ sudo docker镜像

[sudo]密码:

存储库标记图像id创建的大小

johnnyo.jfrog。io/johnnyo/ubuntu latest d70eaf7277ea 2 days ago 72.9MB

你好,世界最新的bf756fb1ae65 9个月前13.3kB

johnnyo@LAPTOP-5V55HON5: ~ $

更重要的是,我们还可以回头看看我们的JFrog帐户,看到图像也缓存在那里!我们已经成功缓存了图像以备将来使用。

用户添加图片

最后的想法:Docker Hub的下一步

总结一下我们所讨论的内容:

  • Docker注册表用于托管和分发Docker镜像
  • Docker Hub是Docker的官方基于云的注册表
  • 要开始使用Docker Hub,你可以拉(下载)一个镜像或推送(上传)一个本地镜像
  • 找到合适的本地或基于云的Docker注册表JFrog容器注册-可以帮助优化Docker Hub如何适合你的开发管道

当然,这些只是基本的。容器化的有趣之处在于您构建的项目和为支持它们而创建的开发管道。有了Docker Hub,您就有了一个很好的资源,可以帮助您获取有用的基础映像来构建,还可以使用各种工具来简化协作、测试和CI/CD过程。