Inicio rápido: Creación de una imagen de contenedor para implementar aplicaciones mediante Azure Pipelines

Azure DevOps Services

En este inicio rápido se muestra cómo crear una imagen de contenedor para la implementación de aplicaciones mediante Azure Pipelines. Para compilar esta imagen, lo único que necesita es un Dockerfile en el repositorio. Puede compilar contenedores de Linux o Windows, en función del agente que use en la canalización.

Requisitos previos

Bifurcar el repositorio de ejemplo

En el explorador, vaya al repositorio de ejemplo siguiente y bifurquelo en su cuenta de GitHub.

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

Compilación de una imagen de Linux o Windows

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Vaya a Canalizaciones y seleccione Nueva canalización o Crear canalización si va a crear la primera canalización del proyecto.

  3. Seleccione GitHub como ubicación del código fuente.

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

    • Si se le redirige a GitHub para iniciar sesión, escriba sus credenciales de GitHub.
    • Si se le redirige a GitHub para instalar la aplicación de Azure Pipelines, seleccione Aprobar e instalar.
  5. Reemplace el contenido de la clase azure-pipelines.yml por el código siguiente. En función de si va a implementar una aplicación de Linux o Windows, asegúrese de establecer vmImage en ubuntu-latest o 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. Cuando haya terminado, seleccione Guardar y ejecutar.

  7. Al agregar el archivo azure-pipelines.yml al repositorio, se le pedirá que agregue un mensaje de confirmación. Escriba un mensaje y, a continuación, seleccione Guardar y ejecutar.

Al usar agentes autohospedados, asegúrese de que Docker está instalado en el host del agente y el motor o demonio de Docker se ejecuta con privilegios elevados.

Para crear la imagen, Docker debe estar instalado en el host del agente y el motor o demonio de Docker debe ejecutarse con privilegios elevados. Siga estos pasos para crear la canalización mediante el editor de canalizaciones de YAML.

  1. Vaya a la colección y cree un proyecto.
  2. En el proyecto, seleccione Canalizaciones.
  3. Seleccione Crear canalización.
  4. Seleccione Servidor de GitHub Enterprise como ubicación del código fuente.
  5. Si aún no lo ha hecho, autorice a Azure Pipelines a conectarse a su cuenta de Servidor de GitHub Enterprise.
    1. Seleccione Conexión al servidor de GitHub Enterprise.
    2. Escriba los detalles de la cuenta y, a continuación, seleccione Comprobar y guardar.
  6. Seleccione el repositorio. Si se le redirige a GitHub para instalar la aplicación de Azure Pipelines, seleccione Aprobar e instalar.
  7. Para configurar la canalización, seleccione la plantilla Crear una imagen de Docker.
  8. En el editor de canalizaciones de YAML, reemplace el contenido del archivo YAML por el código siguiente. Reemplace el nombre del grupo por el nombre del grupo que contiene el agente autohospedado por la funcionalidad de 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. Seleccione Guardar y ejecutar.
  2. En la página Guardar y ejecutar, seleccione Guardar y ejecutar de nuevo.

Para obtener más información sobre cómo crear imágenes de Docker, consulte la tarea de Docker utilizada en esta aplicación de ejemplo. También puede invocar directamente comandos de Docker mediante una tarea de línea de comandos.

Las imágenes de contenedor se crean y almacenan en el agente. Puede insertar la imagen en Google Container Registry, Docker Hub o Azure Container Registry. Para más información, consulte Inserción de una imagen en Docker Hub o Google Container Registry o Inserción de una imagen en Azure Container Registry.

Limpieza de recursos

Si no tiene previsto seguir usando esta aplicación, elimine la canalización y el repositorio de código.

Preguntas más frecuentes

¿Qué agentes puedo usar para compilar imágenes de contenedor?

  • Puede crear imágenes de contenedor de Linux mediante agentes de Ubuntu hospedados por Microsoft o agentes autohospedados basados en la plataforma Linux.

  • Puede crear imágenes de contenedor de Windows mediante agentes de Windows hospedados por Microsoft o agentes autohospedados basados en la plataforma Windows. Todos los agentes basados en la plataforma Windows hospedados por Microsoft se incluyen con el motor Moby y el cliente necesarios para las compilaciones de Docker.

  • Actualmente no puede usar agentes macOS hospedados por Microsoft para crear imágenes de contenedor porque el motor Moby necesario para crear las imágenes no está preinstalado en estos agentes.

Para obtener más información, consulte las opciones del agente de Windows y Linux disponibles con los agentes hospedados por Microsoft.

¿Qué imágenes de Docker almacenadas previamente en caché están disponibles en los agentes hospedados?

Para evitar pasar largos intervalos extrayendo imágenes de Docker para cada trabajo del registro de contenedor, algunas imágenes de uso común se almacenan previamente en caché en agentes hospedados por Microsoft. Para obtener la lista de imágenes almacenadas previamente en caché disponibles, consulte el software incluido para ver las imágenes de máquina virtual disponibles en el repositorio azure-pipelines-image-generation.

¿Cómo se establece la variable BuildKit para las compilaciones de Docker?

BuildKit presenta mejoras de compilación en torno al rendimiento, la administración de almacenamiento, la funcionalidad de características y la seguridad. Actualmente, BuildKit no se admite en hosts de Windows.

Para habilitar compilaciones de Docker mediante BuildKit, establezca la variable 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

¿Cómo puedo usar un agente autohospedado?

Docker debe estar instalado y el motor o demonio debe ejecutarse en el host del agente. Si Docker no está instalado en el host del agente, puede agregar la tarea de instalador de Docker a la canalización. Debe agregar la tarea de instalador de Docker antes de la tarea docker.

¿Cómo puedo crear una compilación de Docker basada en scripts en lugar de usar la tarea Docker?

Puede usar el comando build o cualquier otro comando de Docker.

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

Este comando crea una imagen equivalente a la compilada con la tarea Docker. Internamente, la tarea Docker llama al archivo binario de Docker en un script y une algunos comandos más para proporcionar algunas ventajas más. Más información sobre la tarea Docker.

¿Puedo reutilizar el almacenamiento en caché de capas durante las compilaciones en Azure Pipelines?

Si usa agentes hospedados por Microsoft, cada trabajo se envía a una máquina virtual recién aprovisionada, en función de la imagen generada a partir de las plantillas de repositorio azure-pipelines-image-generation. Estas máquinas virtuales se limpian una vez completado el trabajo. Esta duración efímera evita su reutilización en trabajos subsiguientes y la reutilización de capas de Docker almacenadas en caché. Como solución alternativa, puede configurar una compilación de varias fases que genere dos imágenes y las inserte en un registro de imágenes en una fase temprana. Después, puede indicar a Docker que use estas imágenes como origen de caché con el argumento --cache-from.

Si usa agentes autohospedados, puede almacenar en caché capas de Docker sin ninguna solución alternativa, ya que el problema de duración efímera no se aplica a estos agentes.

¿Cómo crear imágenes de contenedor de Linux para arquitecturas distintas de x64?

Cuando se usan agentes de Linux hospedados por Microsoft, se crean imágenes de contenedor de Linux para la arquitectura x64. Para crear imágenes para otras arquitecturas, como el procesador x86 o ARM, puede usar un emulador de máquina como QEMU.

En los pasos siguientes se muestra cómo crear una imagen de contenedor de procesador ARM mediante QEMU:

  1. Cree el Dockerfile con una imagen base que coincida con la arquitectura de destino:

    FROM arm64v8/alpine:latest
    
  2. Ejecute el siguiente script en el trabajo antes de compilar la imagen:

    # 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 más información, consulte qemu-user-static en GitHub.

¿Cómo se ejecutan pruebas y se publican resultados de pruebas para aplicaciones contenedorizadas?

Para ver diferentes opciones sobre cómo probar aplicaciones contenedorizadas y publicar los resultados de las pruebas, consulte Tarea Publicar resultados de pruebas.

Pasos siguientes

Después de compilar la imagen de contenedor, inserte la imagen en Azure Container Registry, Docker Hub o Google Container Registry. Para aprender a insertar una imagen en un registro de contenedor, continúe con cualquiera de los siguientes artículos: