使用 Docker YAML 生成 Docker 映像并将其推送到 Azure 容器注册表
Azure DevOps Services
本教程将介绍如何使用基于 Azure Pipelines Docker 模板的管道生成容器化应用程序并将其推送到 Azure 容器注册表。 该模板可设置持续集成 YAML 管道,其中代码存储库的新更改会触发管道生成更新的 Docker 映像并将其发布到注册表。
Docker 容器模板管道使用 Microsoft 托管代理,并基于服务主体建立与 Azure 容器注册表的服务连接。 有关使用自托管代理和自己创建的服务连接来执行类似流程的管道,请参阅生成 Docker 映像并将其推送到 Azure 容器注册表。
先决条件
Azure 帐户拥有资源创建和配置权限。 如果还没有 Azure 帐户,请注册免费帐户。
Azure DevOps 组织和项目拥有管道创建和应用部署权限。 要创建组织或项目,请参阅创建新组织或在 Azure DevOps 中创建项目。
一个 GitHub 帐户。
重要
在以下流程中使用 GitHub 时,系统可能会提示你创建 GitHub 服务连接、登录到 GitHub、对 GitHub 组织进行身份验证、安装或授权 Azure Pipelines。 按照屏幕上的说明完成该过程。 有关详细信息,请参阅访问 GitHub 存储库。
获取示例应用
在 GitHub 中,创建示例 Docker 和 Kubernetes Node.JS 应用 存储库的分支或克隆它。
创建容器注册表
选择 Azure 门户顶部菜单栏中的图标,登录 Azure Cloud Shell。 请确保使用 Bash shell。
在 Cloud Shell 中,运行以下命令以使用 Azure CLI 创建资源组和 Azure 容器注册表。 容器注册表名称必须小写。
az group create --name myapp-rg --location eastus az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
若要将 Docker 映像部署到 Azure 容器注册表,必须为注册表启用管理员用户帐户,该帐户在默认情况下禁用。 若要为注册表启用管理员用户,请将
--admin-enabled
参数与az acr update
命令一起使用。 有关详细信息和说明,请参阅管理员帐户。az acr update -n <acrName> --admin-enabled true
或者,你可以使用 Azure 门户 UI 创建 Azure 容器注册表。 有关说明,请参阅创建容器注册表。 创建注册表后,在“属性”中启用管理员帐户。
创建管道
在 Azure DevOps 项目中,如果此管道是项目中的第一个管道,选择“管道”、“新建管道”或“创建管道”>。
选择 GitHub 作为源代码位置。
在“选择存储库”屏幕上,选择示例代码存储库。
在“配置管道”屏幕上,选择“Docker:生成映像并将映像推送到 Azure 容器注册表”管道。
在“Docker”屏幕上,选择你的 Azure 订阅,然后选择“继续”。
从下拉菜单中选择“容器注册表”,指定“映像名称”,然后选择“验证和配置”。
Azure Pipelines 生成一个 azure-pipelines.yml 文件,用于定义管道。
查看 azure-pipelines.yml 中的代码,然后选择“保存并运行”。
可以选择编辑“提交消息”并提供说明。 然后再次选择“保持并运行”将 azure-pipelines.yml 文件提交到存储库并启动生成。
“生成和运行”页显示生成详细信息和进度。 要观察管道的运行情况,请选择“作业”下方的“生成”。
管道详细信息
管道是从 Docker 容器模板生成的。 生成阶段使用 Docker v2 任务以生成 Docker 映像并将其推送到容器注册表。
Docker 任务使用采用服务主体身份验证的 Docker 注册表服务连接,使管道能够将映像推送到容器注册表。 Docker 容器模板在创建管道时生成此服务连接。
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
清理资源
使用完在本教程中创建的资源后,你可以删除这些资源以避免产生更多费用。 运行以下 Cloud Shell 命令,以删除资源组及其中的所有资源。
az group delete --name myapp-rg