拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 将Docker 映像推送到自托管注册表

将Docker 映像推送到自托管注册表

白鹭 - 2022-07-22 2123 0 2

一、概述

本教程将演示如何将Docker 映像推送到自托管的Docker 注册表。首先,我们将探讨什么是自托管注册表以及它与公共注册表有何不同。然后,我们将学习如何标记我们想要推送到自托管注册表的图像。最后,我们将看到如何实际推送这些图像。

2. 自托管Docker 注册表

Docker 注册表是一种管理容器映像存储库的服务。它允许我们执行诸如创建存储库、推送和拉取图像以及管理存储库访问等操作。虽然许多注册表作为云服务提供,但注册表也可以是自托管的。

当通过云提供注册表时,我们不必关心它的托管和维护。我们只需要注册服务,然后使用提供的功能。云托管的** Docker 注册表也称为公共注册表。** Docker Hub 是一个众所周知的公共注册表示例。

但是,如果公司有特殊要求,则可能无法选择公共注册。不能使用公共注册的公司通常有自托管的,他们可以根据自己的要求进行定制。例如,一家公司可能有一项隐私政策,要求存储库只能通过公司的内部网络访问。或者公司可能需要对其图像运行特定的漏洞扫描。

3. 为自托管注册表标记图像

我们必须以特定方式标记图像,然后才能将它们推送到自托管注册表。让我们学习如何适当地标记图像。

3.1。图像名称模式

推送图像时,图像名称定义了图像将被推送到的位置这就是为什么为了将映像推送到自托管注册表,使用正确的命名模式至关重要。映像名称必须包含注册表主机、端口和存储库名称,并且可以选择后跟版本标记:

[registry host]:[registry port]/[repository name]:[tag name]

假设我们有一个在localhost上运行并侦听端口5000的注册表。以下是我们要推送到该注册表中my-fancy-app存储库的映像版本1.0.0的示例名称:

localhost:5000/my-fancy-app:1.0.0

我们将在本文的其余部分使用这个示例。

现在我们知道要应用什么命名模式,我们可以为我们的自托管注册表准备一个图像。首先,我们将了解如何使用正确的名称构建新映像。然后我们将学习如何通过重命名来准备现有图像。

3.2.标记新图像

如果我们正在构建一个新镜像并且已经准备好一个应用程序和Dockerfile,我们可以使用dockerdocker build命令的-t标志,以便使用适当的名称创建镜像。使用上一节中的示例,命令将是:

$ docker build -t localhost:5000/my-fancy-app:1.0.0 .

这将使用正确的名称标记新图像,后跟可选的版本标记。点“。”行尾表示我们正在与Dockerfile 相同的目录中执行命令。

3.3.重新标记现有图像

如果我们想将现有图像推送到我们的自托管注册表,我们首先需要使用与我们上面描述的命名模式匹配的新别名来标记图像。我们可以使用docker tag命令重新标记图像

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

例如,假设我们想要将一个名为my-fancy-app:1.0.0的现有图像推送到我们的自托管注册表。我们只需使用docker tag命令用与该注册表匹配的新别名对其进行标记:

$ docker tag my-fancy-app:1.0.0 localhost:5000/my-fancy-app:1.0.0

4.推送图片

一旦我们正确标记了图像,我们就可以将其推送到我们的自托管注册表。

公司通常需要身份验证来保护他们的自托管注册表。在这种情况下,我们首先需要使用docker login命令登录:

docker login [OPTIONS] [SERVER]

对于托管在localhost:5000上的自托管注册表,命令是:

$ docker login localhost:5000

登录后,我们使用docker push命令将镜像推送到我们的自托管注册表:

docker push [OPTIONS] NAME[:TAG]

让我们看一下推送我们在上面的部分中准备的图像的命令:

$ docker push localhost:5000/my-fancy-app:1.0.0

5. 验证推送

最后一步是验证映像现在是否在我们的自托管注册表中可用。为此,我们将从该注册表中提取图像,但我们必须首先通过运行docker image rm命令删除缓存的本地图像

$ docker image rm localhost:5000/my-fancy-app:1.0.0

让我们通过列出所有本地图像并检查我们的图像是否不存在来验证我们删除了图像:

$ docker images

接下来,让我们使用docker pull命令从我们的自托管注册表中拉取镜像:

$ docker pull localhost:5000/my-fancy-app:1.0.0

通过再次列出所有本地镜像,我们可以验证我们的镜像是否已成功从我们的自托管注册表中提取:

$ docker images
 REPOSITORY TAG IMAGE ID CREATED SIZE
 localhost:5000/my-fancy-app 1.0.0 d33a5b65c0f5 20 minutes ago 326MB

六,结论

在本文中,我们了解了自托管Docker 注册表是什么以及我们可能使用它们的原因。我们还探索了如何准备镜像——无论是预先存在的镜像还是我们正在构建的新镜像——以便我们可以将其推送到自托管注册表。最后,我们学习了如何将正确标记的图像推送到我们的示例注册表。



标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *