练习:使用 Azure 容器注册表任务来生成和运行容器映像
在此练习中,使用 ACR 任务执行以下操作:
- 创建 Azure 容器注册表 (ACR)
- 从 Dockerfile 生成和推送映像
- 验证结果
- 运行 ACR 中的映像
先决条件
- 具有活动订阅的 Azure 帐户。 如果你还没有该订阅,可在 https://azure.com/free 注册免费试用版
登录到 Azure 并启动 Cloud Shell
登录到 Azure 门户,并打开 Cloud Shell。
shell 打开时,选择“Bash”环境。
创建 Azure 容器注册表
为注册表创建资源组。 将以下命令中的
<myLocation>
替换为你附近的位置。az group create --name az204-acr-rg --location <myLocation>
创建一个基本容器注册表。 注册表名称在 Azure 中必须唯一,并且包含 5-50 个字母数字字符。 将以下命令中的
<myContainerRegistry>
替换为唯一值。az acr create --resource-group az204-acr-rg \ --name <myContainerRegistry> --sku Basic
注意
命令会创建一个基本注册表,这是一个成本优化选项,供开发人员了解 Azure 容器注册表。
从 Dockerfile 生成和推送映像
现在,使用 Azure 容器注册表基于本地 Dockerfile 生成映像并对其进行推送。
创建或导航到本地目录,然后使用以下命令创建 Dockerfile。 Dockerfile 包含一行,该行引用托管在 Microsoft Container Registry 的
hello-world
映像。echo FROM mcr.microsoft.com/hello-world > Dockerfile
运行
az acr build
命令生成映像,映像生成成功后,将其推送到注册表。 将<myContainerRegistry>
替换为之前使用的名称。az acr build --image sample/hello-world:v1 \ --registry <myContainerRegistry> \ --file Dockerfile .
下面是上一个命令输出的缩短示例,其中显示了最后几行和最终结果。 可在
repository
字段中看到列出了sample/hello-word
映像。- image: registry: <myContainerRegistry>.azurecr.io repository: sample/hello-world tag: v1 digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a runtime-dependency: registry: mcr.microsoft.com repository: hello-world tag: latest digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a git: {} Run ID: cf1 was successful after 11s
验证结果
使用
az acr repository list
命令列出注册表中的存储库。 将<myContainerRegistry>
替换为之前使用的名称。az acr repository list --name <myContainerRegistry> --output table
输出:
Result ---------------- sample/hello-world
使用
az acr repository show-tags
命令列出 sample/hello-world 存储库中的标记。 将<myContainerRegistry>
替换为之前使用的名称。az acr repository show-tags --name <myContainerRegistry> \ --repository sample/hello-world --output table
输出:
Result -------- v1
运行 ACR 中的映像
使用
sample/hello-world:v1
命令从容器注册表运行az acr run
容器映像。 以下示例使用$Registry
指定运行命令的注册表。 将<myContainerRegistry>
替换为之前使用的名称。az acr run --registry <myContainerRegistry> \ --cmd '$Registry/sample/hello-world:v1' /dev/null
此示例中的
cmd
参数以其默认配置运行容器,但cmd
支持其他docker run
参数甚至其他docker
命令。以下示例输出已缩短:
Packing source code into tar to upload... Uploading archived source code from '/tmp/run_archive_ebf74da7fcb04683867b129e2ccad5e1.tar.gz'... Sending context (1.855 KiB) to registry: mycontainerre... Queued a run with ID: cab Waiting for an agent... 2019/03/19 19:01:53 Using acb_vol_60e9a538-b466-475f-9565-80c5b93eaa15 as the home volume 2019/03/19 19:01:53 Creating Docker network: acb_default_network, driver: 'bridge' 2019/03/19 19:01:53 Successfully set up Docker network: acb_default_network 2019/03/19 19:01:53 Setting up Docker configuration... 2019/03/19 19:01:54 Successfully set up Docker configuration 2019/03/19 19:01:54 Logging in to registry: mycontainerregistry008.azurecr.io 2019/03/19 19:01:55 Successfully logged into mycontainerregistry008.azurecr.io 2019/03/19 19:01:55 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network' 2019/03/19 19:01:55 Launching container with name: acb_step_0 Hello from Docker! This message shows that your installation appears to be working correctly. 2019/03/19 19:01:56 Successfully executed container: acb_step_0 2019/03/19 19:01:56 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 0.843801) Run ID: cab was successful after 6s
清理资源
不再需要时,可使用 az group delete
命令删除此处存储的资源组、容器注册表和容器映像。
az group delete --name az204-acr-rg --no-wait