快速入门:生成容器映像以使用 Azure Pipelines 部署应用

Azure DevOps Services

本快速入门介绍如何使用 Azure Pipelines 生成用于应用部署的容器映像。 若要生成此映像,只需存储库中的 Dockerfile。 可以基于管道中使用的代理生成 Linux 或 Windows 容器。

先决条件

  • 具有活动订阅的 Azure 帐户。 免费创建帐户

  • 一个 GitHub 帐户。 如果没有,请 免费注册

  • 包含 Dockerfile 的 GitHub 存储库。 如果没有要使用的存储库,请创建以下存储库的分支,其中包含示例应用程序和 Dockerfile:

    https://github.com/MicrosoftDocs/pipelines-javascript-docker
    

生成 Linux 或 Windows 映像

  1. 登录到 Azure DevOps 组织,然后转到项目。

  2. 转到 “管道”,然后选择“ 新建管道”。

  3. 选择 “GitHub ”作为源代码的位置。

  4. 选择存储库,然后选择“ 初学者管道”。

    • 如果已重定向到 GitHub 进行登录,请输入 GitHub 凭据。
    • 如果重定向到 GitHub 以安装 Azure Pipelines 应用,请选择“ 批准并安装”。
  5. azure-pipelines.yml 的内容替换为以下代码。 根据部署的是 Linux 应用还是 Windows 应用,请确保分别设置为 vmImageubuntu-latestwindows-latest

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. 完成后,选择“ 保存并运行”。

    azure-pipelines.yml 文件添加到存储库时,系统会提示你添加提交消息。

有关详细信息,请参阅此示例应用程序使用的 Docker 任务 。 还可以使用 命令行任务直接调用 Docker 命令。

清理资源

如果不打算继续使用此应用程序,请删除管道和代码存储库。

FAQ

可以使用哪些代理来生成容器映像?

  • 可以使用Microsoft托管的 Ubuntu 代理或基于 Linux 平台的自承载代理生成 Linux 容器映像。

  • 可以使用Microsoft托管的 Windows 代理或基于 Windows 平台的自承载代理生成 Windows 容器映像。 所有Microsoft托管的基于 Windows 平台的代理都附带 Docker 生成所需的 Moby 引擎和客户端。

  • 目前无法使用Microsoft托管的 macOS 代理来生成容器映像,因为生成映像所需的 Moby 引擎未预安装在这些代理上。

有关详细信息,请参阅Microsoft托管代理提供的 Windows 和 Linux 代理选项

托管代理上有哪些预缓存映像?

为了避免花费较长的时间间隔从容器注册表中为每个作业拉取这些映像,某些常用的映像在Microsoft托管的代理上预先缓存。 有关可用预缓存映像的列表,请参阅 azure-pipelines-image-generation 存储库中的发行说明。

如何实现为 Docker 生成设置 BuildKit 变量?

BuildKit 引入了有关性能、存储管理、功能和安全性的生成改进。 Windows 主机上当前不支持 BuildKit。

若要使用 BuildKit 启用 Docker 生成,请设置 DOCKER_BUILDKIT 变量。

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

如何使用自承载代理?

  1. 在创建容器映像之前,请确保在自承载计算机上安装 Docker。

  2. 在管道中,在生成映像的 Docker 任务之前,添加 Docker 安装程序任务

如何创建基于脚本的 Docker 生成而不是使用 Docker 任务?

可以使用 命令 build 或任何其他 Docker 命令。

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

此命令创建一个等效于使用 Docker 任务生成的映像。 在内部,Docker 任务在脚本上调用 Docker 二进制文件,并将更多命令拼凑在一起以提供更多好处。 详细了解 Docker 任务

是否可以在 Azure Pipelines 上生成期间重复使用层缓存?

如果使用Microsoft托管代理,则会根据从 azure-pipelines-image-generation 存储库模板生成的映像将每个作业调度到新预配的虚拟机。 作业完成后,将清理这些虚拟机。 此短暂的生存期可防止将这些虚拟机重新用于后续作业和重复使用缓存的 Docker 层。 解决方法是,可以设置生成两个映像的多阶段生成,并在早期阶段将它们推送到映像注册表。 然后,可以告知 Docker 使用这些映像作为带 参数的 --cache-from 缓存源。

如果使用自承载代理,则可以缓存 Docker 层,而无需任何解决方法,因为临时生存期问题不适用于这些代理。

如何实现为 x64 以外的体系结构生成 Linux 容器映像?

使用Microsoft托管的 Linux 代理时,会为 x64 体系结构创建 Linux 容器映像。 若要为其他体系结构(如 x86 或 ARM 处理器)创建映像,可以使用 QEMU 等计算机模拟器。

以下步骤演示如何使用 QEMU 创建 ARM 处理器容器映像:

  1. 使用与目标体系结构匹配的基础映像创作 Dockerfile:

    FROM arm64v8/alpine:latest
    
  2. 在生成映像之前,在作业中运行以下脚本:

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

有关详细信息,请参阅 GitHub 上的 qemu-user-static

如何实现运行容器化应用程序的测试并发布测试结果?

有关测试容器化应用程序和发布生成的测试结果的不同选项,请参阅 发布测试结果任务

后续步骤

生成容器映像后,将映像推送到 Azure 容器注册表、Docker Hub 或 Google 容器注册表。 若要了解如何将映像推送到容器注册表,请继续阅读以下任一文章: