Compartir vía


Compilación y publicación de imágenes de Docker en Azure Container Registry

Azure DevOps Services | Azure DevOps Server 2022

Con Azure Pipelines, puede configurar un flujo de trabajo de canalización para compilar y publicar las imágenes de Docker en Azure Container Registry. En este artículo, aprenderá a:

  • Creación de una instancia de Azure Container Registry
  • Configurar un agente autohospedado en una máquina virtual de Azure.
  • Configuración de la identidad de servicio administrada
  • Crear una conexión de servicio de Registro de Docker
  • Compilar y publicar la imagen de Docker en Azure Container Registry.

Requisitos previos

Obtención del código

Bifurque o clone la aplicación de ejemplo para seguir este tutorial.

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

Creación de una instancia de Azure Container Registry

  1. Navegue hasta Azure Portal.

  2. Seleccione Crear un recurso en el panel de navegación izquierdo y, luego, elija Contenedores y Container Registry.

  3. En Suscripción, seleccione la suscripción y en Grupo de recursos, seleccione el grupo de recursos o cree uno nuevo.

  4. En Nombre del Registro, escriba un nombre para el registro de contenedor. El nombre del registro debe ser único dentro de Azure y contener al menos 5 caracteres.

  5. En Ubicación y SKU, seleccione las que prefiera y, luego, elija Revisar y crear.

  6. Revise la configuración y, cuando haya terminado, seleccione Crear.

Configuración de una máquina virtual de agente autohospedado

Para usar Managed Service Identity con Azure Pipelines para publicar imágenes de Docker en Azure Container Registry, debemos configurar nuestro propio agente autohospedado en una máquina virtual de Azure.

Crear una VM

  1. Navegue hasta Azure Portal.

  2. Seleccione Crear un recurso en el panel de navegación izquierdo y, luego, elija Máquina virtual ->Crear.

  3. En Suscripción, seleccione la suscripción y, luego, en Grupo de recursos, elija el que usó para crear el registro de contenedor.

  4. Asigne un nombre a la máquina virtual y elija una imagen.

  5. Rellene los campos de Nombre de usuario y Contraseña y, luego, elija Revisar y crear.

  6. Revise la configuración y, cuando haya terminado, seleccione Crear.

  7. Seleccione Ir al recurso cuando se complete la implementación.

Creación de un grupo de agentes

  1. En el proyecto de Azure DevOps, seleccione el icono de engranaje icono de engranaje para ir a Configuración del proyecto.

  2. Seleccione Grupos de agentes y, luego, elija Agregar grupo.

  3. Seleccione Nuevo y, en el menú desplegable Tipo de grupo, elija Autohospedado.

  4. Asigne un nombre al grupo y, luego, active la casilla Conceder permiso de acceso a todas las canalizaciones.

  5. Seleccione Crear cuando haya terminado.

  6. Ahora, seleccione el grupo que acaba de crear y, luego, elija Nuevo agente.

  7. Usaremos las instrucciones de esta ventana para configurar el agente en la máquina virtual que creó anteriormente. Seleccione el botón Copiar para copiar el vínculo de descarga en el Portapapeles.

    Captura de pantalla que muestra cómo configurar un agente.

Crear un token de acceso personal

  1. En el proyecto de Azure DevOps, seleccione Configuración de usuario y, luego, elija Tokens de acceso personal.

  2. Seleccione Nuevo token para crear un nuevo token de acceso personal.

  3. Escriba un nombre para este y elija una fecha de expiración.

  4. Seleccione Definido por el usuario en Ámbitos y, luego, elija Mostrar todos los ámbitos.

  5. Seleccione Grupos de agentes ->Leer y administrar y Grupos de implementación ->Leer y administrar.

  6. Cuando haya terminado, seleccione Crear y guarde su token de acceso personal en una ubicación segura.

Configuración de un agente autohospedado

  1. En Azure Portal, conéctese a la máquina virtual.

  2. En un símbolo del sistema de PowerShell con privilegios elevados, ejecute el siguiente comando para descargar el 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. Ejecute el siguiente comando para extraer y crear el agente.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Ejecute el siguiente comando para empezar a configurar el agente.

    .\config.cmd
    
  5. Cuando se le solicite, escriba la dirección URL del servidor. Ejemplo: https://dev.azure.com/fabrikamFiber

  6. Cuando se le solicite el tipo de autenticación, elija PAT y presione Entrar.

  7. Pegue el token de acceso personal que creó anteriormente y presione "Entrar".

  8. Escriba el nombre del grupo de agentes y, luego, el nombre del agente.

  9. Deje el valor predeterminado de carpeta de trabajo y escriba S si quiere ejecutar el agente como un servicio.

    Captura de pantalla en la que se muestra cómo configurar un agente en una máquina virtual de Azure.

  10. Ahora que el agente está listo para empezar a escuchar trabajos, vamos a instalar Docker en nuestra máquina virtual. Ejecute el siguiente comando para descargar Docker.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Vaya a la ruta de acceso de descarga y ejecute el siguiente comando para instalar e iniciar Docker.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Ahora, vuelva a la carpeta del agente y ejecute el archivo cmd para ejecutar el agente en la máquina virtual de Azure.

    .\run.cmd
    
  13. El agente debe aparecer ahora en el grupo de agentes ->Agentes en el portal de Azure DevOps.

    Captura de pantalla que muestra el agente disponible en la pestaña

Configuración de la identidad administrada

  1. En Azure Portal, vaya a la máquina virtual que creó anteriormente.

  2. Seleccione Identidad en el panel de navegación izquierdo y, luego, habilite la identidad Asignada por el sistema.

  3. Cuando haya acabado, seleccione Guardar y confirme su elección.

    Captura de pantalla que muestra cómo habilitar la identidad asignada por el sistema.

  4. Seleccione Asignaciones de roles de Azure y haga clic en Agregar asignación de roles.

  5. Seleccione Grupo de recursos en el menú desplegable Ámbito.

  6. En Suscripción, seleccione la suscripción, en Grupo de recursos, seleccione el grupo de recursos y, luego, elija el rol AcrPush.

  7. Repita los pasos 5 y 6 para agregar el rol AcrPull.

    Captura de pantalla que muestra cómo configurar los roles AcrPull y de inserción.

Creación de una conexión de servicio de registro de Docker

  1. En el proyecto de Azure DevOps, seleccione el icono de engranaje icono de engranaje para ir a Configuración del proyecto.

  2. Seleccione Conexiones de servicio en el panel izquierdo.

  3. Seleccione Nueva conexión de servicio, después Registro de Docker y, por último, Siguiente.

  4. Seleccione Azure Container Registry y, luego, en Tipo de autenticación, elija Managed Service Identity.

  5. Escriba los valores de ID de suscripción Nombre de la suscripción y el servidor de inicio de sesión del registro de contenedor de Azure. Pegue el identificador de inquilino asignado por el sistema de la máquina virtual que creó en el paso anterior en el campo de texto ID de inquilino.

  6. Escriba un nombre para la conexión de servicio y active la casilla Conceder permiso de acceso a todas las canalizaciones. Para seleccionar esta opción, necesitarás el rol de conexión de servicio Administrador.

  7. Cuando haya terminado, seleccione Guardar.

    Captura de pantalla que muestra cómo configurar una conexión del servicio del registro de Docker MSI.

Implementación y publicación en Azure Container Registry

  1. En el proyecto de Azure DevOps, seleccione Canalizaciones y, después, Crear canalización.

  2. Seleccione el servicio que hospeda el código fuente (Azure Repos, GitHub, etc.).

  3. Seleccione el repositorio y, luego, elija Canalización inicial.

  4. Elimine la canalización YAML predeterminada y use el siguiente fragmento de código:

    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. Una vez completada la ejecución de canalización, puede comprobar la imagen en Azure. Vaya a Azure Container Registry en Azure Portal y seleccione Repositorios.

    Captura de pantalla que muestra la imagen en Azure Portal.

Limpieza de recursos

Si no tiene previsto seguir usando esta aplicación, elimine el grupo de recursos para evitar incurrir en cargos continuos.

az group delete --name myapp-rg