Docker中心和Docker注册中心:初学者指南

JFrog支持
2021-10-25 15:06

2020年,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,其中“version2。X "是标签)。用户可以提取(下载)他们想要使用的图像,也可以推送(上传)他们想要存储在注册表中的图像。

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

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

您甚至可以从正式注册表图片,但一般来说,在使用这个基本图像作为起点之前,值得探索其他选项。

Docker Hub是什么?

Docker Hub是Docker官方的基于云的Docker镜像注册中心。

如你所料,自从码头工人中心是Docker的官方注册表,它是安装Docker时的默认注册表。它拥有超过10万个镜像,包括MongoDB、nginx、Apache、Ubuntu和MySQL的官方镜像,每个镜像的下载次数都超过10亿次。

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

为什么使用Docker Hub?

那么,有了这么多不同的Docker注册表选项,为什么还要使用Docker Hub呢?以下是Docker Hub的一些关键优点:

  • 一个大型可信图像库-Docker认证图片、经过认证的发布者图片(Docker认证并经过发布者认证)和Docker发布的官方图片为用户增加了一层信任。由于许多常用映像的下载量达到数百万(有时甚至数十亿),因此在使用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

首先,单击创建存储库

用户添加图片

为存储库指定名称和描述,选择是公共的还是私有的,然后单击创建
用户添加图片

步骤2:从Docker Hub中提取Docker映像

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

首先,我们将从终端使用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: ~ $

请注意我们收到的凭据警告。对于这个演示,我们将忽略它,但是我们建议保护您的凭证以供生产使用!

接下来,我们将使用Docker拉hello-world命令。

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

使用默认标签: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 images

存储库标记映像id创建大小

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

johnnyo@LAPTOP-5V55HON5:~$ sudo docker tag hello-world ourusername/johnnyodemo:v1.1.1.1

johnnyo@LAPTOP-5V55HON5:~$ sudo docker images

存储库标记映像id创建大小

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

我们的用户名/ johnnyyodemo v1.1.1.1 bf756fb1ae65 9 months ago 13.3kB

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

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

现在,我们可以使用命令将映像推到我们的私有存储库码头工人推<我们的用户名>/<新图像名>[:tag]

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

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

9c27e219663c: Layer already exists v1.1.1.1: digest: sha256: 90659bf80b44ce6be8234e6ff90a1ac34acbe826903b02cfa0da11c82cbc042 size: 525

johnnyo@LAPTOP-5V55HON5: ~ $

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

用户添加图片

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

我们在前面提到过,Docker Hub的免费层可能会限制开发。其中一个主要原因是推和拉的速率限制。在Docker Hub之外缓存映像可以克服这些限制。因此,找到合适的Docker Hub代理和缓存解决方案(在本地或在云中)将大有帮助。您将能够获得Docker Hub的优势(大量可信映像),同时避免可能阻碍CI/CD工作流程的速率限制。

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

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

步骤1:创建免费帐户

导航到此链接并创建您的帐户,不需要信用卡:

//m.si-fil.com/container-registry/cloud-registration/

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

注意:我们建议选择地理上与您的位置接近的服务器位置。

进入确认屏幕后,登录并继续步骤2。

用户添加图片

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

登录到新帐户后,单击政府存储库存储库

用户添加图片

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

点击远程+新的远程存储库

用户添加图片

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

用户添加图片

基本TAB输入你的库的关键对于URLDocker Hub:https://registry-1.docker.io/

用户添加图片

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

完成后,单击保存并完成。

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

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

johnnyo@LAPTOP-5V55HON5:~$ sudo docker登录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拉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 images

[sudo] johnnyo密码:

存储库标记映像id创建大小

johnnyo.jfrog。d70eaf7277ea 2 days ago

你好,世界最新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过程。