你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 容器注册表是用于生成、存储和管理容器映像和相关项目的专用注册表服务。 在本快速入门中,你将在本地使用 Azure PowerShell 创建 Azure 容器注册表实例。 然后使用 Docker CLI 拉取 hello-world 容器映像,标记 hello-world 容器映像以创建新的容器映像,将新容器映像推送到容器注册表,删除本地容器映像,最后从注册表拉取并运行映像。
Prerequisites
注意
建议使用 Azure Az PowerShell 模块与 Azure 交互。 要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅将 Azure PowerShell 从 AzureRM 迁移到 Az。
本快速入门需要 Azure PowerShell 模块。 运行 Get-Module -ListAvailable Az 即可确定已安装的版本。 如果需要进行安装或升级,请参阅安装 Azure PowerShell 模块。
还必须在本地安装 Docker。 Docker 提供的包适用于 macOS、Windows 和 Linux 系统。
由于 Azure Cloud Shell 并不包括所有必需的 Docker 组件(dockerd 守护程序),因此不能将 Cloud Shell 用于本快速入门。
登录 Azure
使用 Connect-AzAccount 命令登录到 Azure 订阅,然后按屏幕说明操作。
Connect-AzAccount
创建资源组
通过 Azure 进行身份验证以后,请使用 New-AzResourceGroup 创建资源组。 资源组是在其中部署和管理 Azure 资源的逻辑容器。
New-AzResourceGroup -Name myResourceGroup -Location EastUS
创建容器注册表
接下来,请使用 New-AzContainerRegistry 命令在新的资源组中创建容器注册表。
注册表名称在 Azure 中必须唯一,并且包含 5-50 个字母数字字符。 以下示例创建名为“mycontainerregistry”的注册表。在以下命令中替换 mycontainerregistry,然后运行该命令以创建注册表:
$registry = New-AzContainerRegistry -ResourceGroupName "myResourceGroup" -Name "mycontainerregistry" -EnableAdminUser -Sku Standard -Location EastUS
提示
在本快速入门中,你将创建一个 标准 注册表,该注册表足以满足大多数 Azure 容器注册表工作流的需求。 若要提高存储和映像吞吐量,以及使用 专用终结点进行连接等功能,可以使用 高级 定价计划选项(SKU)。 有关服务层级(SKU)的详细信息,请参阅 Azure 容器注册表 SKU 功能和限制。
登录到注册表
在推送和拉取容器映像之前,必须使用 Connect-AzContainerRegistry cmdlet 登录到注册表。 下面的示例使用的凭据与你使用 Connect-AzAccount cmdlet 向 Azure 进行身份验证时登录所用的凭据相同。
注意
在以下示例中,$registry.Name 的值是资源名称,而不是完全限定的注册表名称。
Connect-AzContainerRegistry -Name $registry.Name
该命令在完成后返回 Login Succeeded。
将映像推送到注册表
要将映像推送到 Azure 容器注册表,首先必须具有一个映像。 如果还没有任何本地容器映像,请运行以下 docker pull 命令,拉取现有公共映像。 例如,从 Microsoft 容器注册表中拉取 hello-world 映像。
docker pull mcr.microsoft.com/hello-world
在将映像推送到注册表之前,必须使用具有注册表登录服务器的完全限定名称的 docker 标记 来标记映像。
-
域名标签 (DNL) 受保护注册表的包含唯一的 DNS 名称哈希的登录服务器名称格式为
mycontainerregistry-abc123.azurecr.io。 - 使用
UnsecureDNL 选项创建的注册表的登录服务器名称格式为mycontainerregistry.azurecr.io。
例如,如果使用 Tenant Reuse DNL 范围创建注册表,那么登录服务器可能看起来像 mycontainerregistry-abc123.azurecr.io,并在 DNS 名称中使用哈希。 如果使用 DNL 选项创建 Unsecure 注册表,则登录服务器看起来像 mycontainerregistry.azurecr.io,不带哈希。
在注册表的登录服务器上使用 docker tag 命令标记映像。 对于本快速入门,请将 hello-world 映像标记为 v1。
给 DNL 保护的注册表的映像打标签的示例命令:
docker tag mcr.microsoft.com/hello-world mycontainerregistry-abc123.azurecr.io/hello-world:v1
为非 DNL 注册表标记映像的示例命令:
docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1
最后,使用 docker push 将映像推送到注册表实例。 将 <login-server> 替换为注册表实例的登录服务器名称。 此示例创建 hello-world 存储库,其中包含 hello-world:v1 映像。
docker push <login-server>/hello-world:v1
将映像推送到容器注册表后,使用 hello-world:v1 命令从本地 Docker 环境中删除映像。 此命令不会从 Azure 容器注册表中的 hello-world 存储库中删除映像。
docker rmi <login-server>/hello-world:v1
从注册表运行映像
现在,可以使用 docker run 从容器注册表拉取并运行 hello-world:v1 容器映像:
docker run <login-server>/hello-world:v1
示例输出:
Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
清理资源
用完在本快速入门中创建的资源后,请使用 Remove-AzResourceGroup 命令删除资源组、容器注册表以及其中存储的容器映像:
Remove-AzResourceGroup -Name myResourceGroup
Next steps
在本快速入门中,你在本地使用 Azure PowerShell 创建了 Azure 容器注册表实例,拉取了 hello-world 容器映像,标记了 hello-world 映像以创建新的容器映像,将新容器映像推送到容器注册表,删除了本地容器映像,最后从注册表拉取并运行了映像。 请继续阅读 Azure 容器注册表教程,以更深入地了解 ACR。