Início Rápido: Criar uma imagem de contêiner para implantar aplicativos usando o Azure Pipelines

Azure DevOps Services

Este início rápido mostra como criar uma imagem de contêiner para implantação de aplicativo usando o Azure Pipelines. Para criar essa imagem, tudo o que você precisa é de um Dockerfile em seu repositório. Você pode criar contêineres do Linux ou do Windows, com base no agente que você usa em seu pipeline.

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
  • Uma conta do GitHub. Caso ainda não tenha uma, inscreva-se gratuitamente.
  • Um agente Windows ou Linux de pipeline do Azure com o Docker instalado.

Bifurcar a amostra de repositório

No navegador, acesse o repositório de exemplo a seguir e crie um forque dele para sua conta do GitHub.

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

Criar uma imagem do Linux ou do Windows

  1. Entre na organização do Azure DevOps e acesse seu projeto.

  2. Vá para Pipelines e selecione Novo Pipeline ou Criar Pipeline se estiver criando o primeiro pipeline no projeto.

  3. Selecione GitHub como o local do código-fonte.

  4. Selecione o repositório e selecione Pipeline inicial.

    • Se você for redirecionado ao GitHub para entrar, insira suas credenciais do GitHub.
    • Se você for redirecionado ao GitHub para instalar o aplicativo Azure Pipelines, selecione Aprovar e instalar.
  5. Substitua o conteúdo do azure-pipelines.yml pelo seguinte código. Com base em se você está implantando um aplicativo Linux ou Windows, defina vmImage, respectivamente, como ubuntu-latest ou windows-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. Quando terminar, selecione Salvar e executar.

  7. Ao adicionar o arquivo azure-pipelines.yml ao repositório, você será solicitado a adicionar uma mensagem do commit. Insira uma mensagem e selecione Salvar e executar.

Ao usar agentes auto-hospedados, verifique se o Docker está instalado no host do agente e se o mecanismo/daemon do Docker está sendo executado com privilégios elevados.

Para criar a imagem, o Docker deve estar instalado no host do agente e o mecanismo/daemon do Docker deve estar em execução com privilégios elevados. Use as etapas a seguir para criar o pipeline usando o editor de pipeline YAML.

  1. Acesse sua coleção e crie um projeto.
  2. No projeto, selecione Pipelines.
  3. Selecione Criar pipeline.
  4. Selecione GitHub Enterprise Server como o local para seu código-fonte.
  5. Caso ainda não tenha feito isso, autorize o Azure Pipelines a se conectar à sua conta do GitHub Enterprise Server.
    1. Selecione Conectar ao GitHub Enterprise Server.
    2. Insira detalhes da sua conta e selecione Verificar e salvar.
  6. Selecione seu repositório. Se você for redirecionado ao GitHub para instalar o aplicativo Azure Pipelines, selecione Aprovar e instalar.
  7. Para configurar o pipeline, selecione o modelo Criar uma imagem do Docker.
  8. No editor de pipeline YAML, substitua o conteúdo do arquivo YAML pelo código a seguir. Substitua o nome do pool pelo nome do pool que contém seu agente auto-hospedado com a funcionalidade do Docker.
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. Selecione Salvar e executar.
  2. Na página Salvar e executar, selecione Salvar e executar novamente.

Para obter mais informações sobre como criar imagens do Docker, consulte a tarefa do Docker usada por este aplicativo de exemplo. Você também pode invocar comandos do Docker diretamente usando uma tarefa de linha de comando.

As imagens de contêiner são criadas e armazenadas no agente. Você pode enviar a imagem por push para o Registro de Contêiner do Google, o Docker Hub ou o Registro de Contêiner do Azure. Para obter mais informações, consulte Enviar uma imagem por push para o Docker Hub ou o Registro de Contêiner do Google ou Enviar uma imagem por push para o Registro de Contêiner do Azure.

Limpar os recursos

Se você não planeja continuar usando esse aplicativo, exclua o pipeline e o repositório de código.

Perguntas frequentes

Quais agentes posso usar para criar imagens de contêiner?

  • Você pode criar imagens de contêiner do Linux usando agentes do Ubuntu hospedados pela Microsoft ou agentes auto-hospedados baseados na plataforma Linux.

  • Você pode criar imagens de contêiner do Windows usando agentes do Windows hospedados pela Microsoft ou agentes auto-hospedados baseados na plataforma Windows. Todos os agentes baseados na plataforma Windows hospedados pela Microsoft são enviados com o cliente e o mecanismo Moby necessários para builds do Docker.

  • Atualmente, você não pode usar agentes do macOS hospedados pela Microsoft para criar imagens de contêiner porque o mecanismo Moby necessário para a criação das imagens não está pré-instalado nesses agentes.

Para saber mais, veja as Opções de agente do Windows e do Linux disponíveis com agentes hospedados pela Microsoft.

Quais imagens do Docker pré-armazenadas em cache estão disponíveis nos agentes hospedados?

Para evitar gastar longos intervalos extraindo imagens do Docker para cada trabalho do registro de contêiner, algumas imagens comumente usadas são pré-armazenadas em cache nos agentes hospedados pela Microsoft. Para obter a lista de imagens pré-armazenadas em cache disponíveis, consulte o Software incluído para obter as imagens de VM disponíveis no repositório azure-pipelines-image-generation.

Como definir a variável BuildKit para meus builds do Docker?

O BuildKit apresenta melhorias de build em relação ao desempenho, ao gerenciamento de armazenamento, à funcionalidade de recursos e à segurança. Atualmente, não há suporte para o BuildKit em hosts do Windows.

Para habilitar builds do Docker usando o BuildKit, defina a variável 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

Como posso usar um agente auto-hospedado?

O Docker deve estar instalado e o mecanismo/daemon deve estar em execução no host do agente. Se o Docker não estiver instalado no host do agente, você poderá adicionar a tarefa do instalador do Docker ao pipeline. Você deve adicionar a Tarefa do Instalador do Docker antes da Tarefa do Docker.

Como posso criar um build do Docker baseado em script em vez de usar a tarefa do Docker?

Você pode usar o comando build ou qualquer outro comando do Docker.

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

Esse comando cria uma imagem equivalente a uma criada com a tarefa do Docker. Internamente, a tarefa do Docker chama o binário do Docker em um script e une mais alguns comandos para fornecer mais alguns benefícios. Saiba mais sobre a tarefa do Docker.

Posso reutilizar o cache de camadas durante builds no Azure Pipelines?

Se você estiver usando agentes hospedados pela Microsoft, cada trabalho será enviado para uma máquina virtual recém-provisionada, com base na imagem gerada a partir de modelos de repositório azure-pipelines-image-generation. Essas máquinas virtuais são limpas após a conclusão do trabalho. Esse tempo de vida efêmero impede a reutilização dessas máquinas virtuais para trabalhos subsequentes e a reutilização de camadas do Docker armazenadas em cache. Como solução alternativa, você pode configurar um build de vários estágios que produz duas imagens e as envia por push para um registro de imagem em um estágio inicial. Em seguida, você pode instruir o Docker a usar essas imagens como uma fonte de cache com o argumento --cache-from.

Se você estiver usando agentes auto-hospedados, poderá armazenar camadas do Docker em cache sem nenhuma solução alternativa porque o problema de tempo de vida efêmero não se aplica a esses agentes.

Como fazer para criar imagens de contêiner do Linux para arquiteturas diferentes de x64?

Ao usar agentes do Linux hospedados pela Microsoft, você cria imagens de contêiner do Linux para a arquitetura x64. Para criar imagens para outras arquiteturas, como processador ARM ou x86, você pode usar um emulador de computador, como QEMU.

As etapas a seguir mostram como criar uma imagem de contêiner do processador ARM usando QEMU:

  1. Crie seu Dockerfile com uma imagem base que corresponda à arquitetura de destino:

    FROM arm64v8/alpine:latest
    
  2. Execute o seguinte script em seu trabalho antes de compilar a imagem:

    # 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
    

Para obter mais informações, confira qemu-user-static no GitHub.

Como executar testes e publicar resultados de teste para aplicativos em contêineres?

Para obter opções diferentes sobre como testar aplicativos em contêineres e publicar os resultados de teste resultantes, confira Publicar a tarefa Resultados de Teste.

Próximas etapas

Depois de criar sua imagem de contêiner, envie a imagem por push para o Registro de Contêiner do Azure, Docker Hub ou Registro de Contêiner do Google. Para saber como efetuar push de uma imagem para um registro de contêiner, prossiga para um dos seguintes artigos: