Partilhar via


Criar e publicar imagens do Docker no Registro de Contêiner do Azure

Serviços de DevOps do Azure | Azure DevOps Server 2022

Usando o Azure Pipelines, você pode configurar um fluxo de trabalho de pipeline para criar e publicar suas imagens do Docker no Registro de Contêiner do Azure. Neste artigo, você aprenderá a:

  • Criar um Azure Container Registry
  • Configurar um agente auto-hospedado em uma VM do Azure
  • Configurar a identidade do serviço gerenciado
  • Criar uma conexão de serviço do Registro do Docker
  • Criar e publicar sua imagem no Registro de Contêiner do Azure

Pré-requisitos

Obter o código

Fork ou clone o aplicativo de exemplo para acompanhar este tutorial.

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

Criar um Azure Container Registry

  1. Navegue para o portal do Azure.

  2. Selecione Criar um recurso no painel de navegação esquerdo e, em seguida, selecione Contêineres e, em seguida , Registro de contêiner.

  3. Selecione a sua Subscrição e, em seguida, selecione o seu Grupo de recursos ou crie um novo.

  4. Insira um nome de Registro para seu registro de contêiner. O nome do Registro deve ser exclusivo no Azure e deve conter pelo menos 5 caracteres.

  5. Selecione a sua localização e SKU preferidas e, em seguida, selecione Rever + criar.

  6. Reveja as suas definições e, em seguida, selecione Criar quando terminar.

Configurar uma VM de agente auto-hospedada

Para usar a Identidade de Serviço Gerenciado com o Azure Pipelines para publicar imagens do Docker no Registro de Contêiner do Azure, devemos configurar nosso próprio agente autohospedado em uma VM do Azure.

Criar uma VM

  1. Navegue para o portal do Azure.

  2. Selecione Criar um recurso no painel de navegação esquerdo e, em seguida, selecione Máquina virtual ->Criar.

  3. Selecione sua Assinatura e, em seguida, selecione o grupo de recursos que você usou para criar seu registro de contêiner.

  4. Dê um nome à sua máquina virtual e escolha uma Imagem.

  5. Introduza o seu Nome de Utilizador e Palavra-passe e, em seguida, selecione Rever + criar.

  6. Reveja as suas definições e, em seguida, selecione Criar quando terminar.

  7. Selecione Ir para recurso quando concluir a implementação.

Criar um pool de agentes

  1. No seu projeto do Azure DevOps, selecione o ícone ícone de engrenagem de engrenagem para navegar até as configurações do projeto.

  2. Selecione Pools de agentes e, em seguida, selecione Adicionar pool.

  3. Selecione Novo e, em seguida, selecione Auto-hospedado no menu suspenso Tipo de pool.

  4. Dê um nome ao seu pool e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines .

  5. Selecione Criar quando terminar.

  6. Agora selecione o pool que você acabou de criar e, em seguida, selecione Novo agente.

  7. Usaremos as instruções nesta janela para configurar seu agente na VM criada anteriormente. Selecione o botão Copiar para copiar o link de download para a área de transferência.

    Uma captura de tela mostrando como configurar um agente.

Criar um token de acesso pessoal

  1. No seu projeto do Azure DevOps, selecione Configurações do Usuário e, em seguida, selecione Tokens de Acesso Pessoal.

  2. Selecione Novo Token para criar um novo Token de Acesso Pessoal.

  3. Introduza um nome para o PAT e, em seguida, escolha uma data de validade.

  4. Selecione Personalizado definido em Escopos e, em seguida, selecione Mostrar todos os escopos.

  5. Selecione Pools de agentes ->Read & manage e Deployment Groups ->Read & manage.

  6. Selecione Criar quando terminar e guarde o PAT num local seguro.

Configurar um agente auto-hospedado

  1. No portal do Azure, conecte-se à sua VM.

  2. Em um prompt de comando do PowerShell elevado, execute o seguinte comando para baixar o agente.

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. Execute o seguinte comando para extrair e criar seu agente.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Execute o seguinte comando para começar a configurar seu agente.

    .\config.cmd
    
  5. Introduza o URL do servidor quando lhe for solicitada a entrada. Exemplo: https://dev.azure.com/fabrikamFiber

  6. Prima Enter quando lhe for pedido o tipo de autenticação para escolher a autenticação PAT .

  7. Cole o token de acesso pessoal que criou anteriormente e, em seguida, prima enter.

  8. Introduza o nome do conjunto de agentes e, em seguida, introduza o nome do agente.

  9. Deixe o valor padrão para a pasta de trabalho e digite Y se quiser executar o agente como um serviço.

    Uma captura de tela mostrando como configurar um agente em uma VM do Azure.

  10. Agora que o agente está pronto para começar a escutar trabalhos, vamos instalar o Docker em nossa VM. Execute o seguinte comando para baixar o Docker.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Navegue até o caminho de download e execute o seguinte comando para instalar e iniciar o Docker.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Agora navegue de volta para a pasta do agente e execute o arquivo cmd para executar o agente na VM do Azure.

    .\run.cmd
    
  13. Seu agente deve ser listado agora em seu pool de agentes ->Agents no portal do Azure DevOps.

    Uma captura de tela mostrando o agente disponível na guia agentes.

Configurar a identidade gerenciada

  1. No portal do Azure, navegue até a VM criada anteriormente.

  2. Selecione Identidade no painel de navegação esquerdo e habilite a identidade atribuída ao sistema.

  3. Selecione Guardar quando terminar e, em seguida, confirme a sua escolha.

    Uma captura de tela mostrando como habilitar a identidade atribuída ao sistema.

  4. Selecione Atribuições de função do Azure e, em seguida, selecione Adicionar atribuição de função.

  5. Selecione Grupo de recursos no menu suspenso Escopo .

  6. Selecione a sua Subscrição e o seu grupo de Recursos e, em seguida, selecione a função AcrPush .

  7. Repita as etapas 5 & 6 para adicionar a função AcrPull .

    Uma captura de tela mostrando como configurar funções acrpull e push.

Criar uma conexão de serviço de registro do Docker

  1. No seu projeto do Azure DevOps, selecione o ícone ícone de engrenagem de engrenagem para navegar até as configurações do projeto.

  2. Selecione Conexões de serviço no painel esquerdo.

  3. Selecione Nova conexão de serviço e, em seguida, selecione Registro do Docker e, em seguida, Avançar.

  4. Selecione Registro de Contêiner do Azure e, em seguida, selecione Identidade de Serviço Gerenciado como seu Tipo de Autenticação.

  5. Introduza o nome da Subscrição de ID de Subscrição e o servidor de início de sessão do Registo de contentor do Azure. Cole o ID de Locatário atribuído ao sistema da VM que você criou na etapa anterior no campo de texto ID do Locatário .

  6. Insira um nome para sua conexão de serviço e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines . Para selecionar essa opção, você precisará da função de Administrador de conexão de serviço.

  7. Selecione Salvar quando terminar.

    Uma captura de tela mostrando como configurar um MSI de conexão de serviço de registro docker.

Criar e publicar no Registro de Contêiner do Azure

  1. No seu projeto do Azure DevOps, selecione Pipelines e, em seguida, selecione Create Pipeline.

  2. Selecione o serviço que hospeda seu código-fonte (Azure Repos, GitHub, etc.).

  3. Selecione seu repositório e, em seguida, selecione Pipeline inicial.

  4. Exclua o pipeline yaml padrão e use o seguinte trecho:

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. Quando a execução do pipeline estiver concluída, você poderá verificar sua imagem no Azure. Navegue até o Registro de Contêiner do Azure no portal do Azure e selecione Repositórios.

    Uma captura de tela mostrando a imagem no portal do Azure.

Clean up resources (Limpar recursos)

Se você não planeja continuar usando este aplicativo, exclua o grupo de recursos para evitar incorrer em cobranças contínuas.

az group delete --name myapp-rg