Cómo trabajar con imágenes de Docker personalizadas

El 20 de noviembre de 2020, Dockerhub incorporó la limitación de tasas en las extracciones de imágenes anónimas. Este cambio puede afectar a los usuarios que ejecutan trabajos que utilizan imágenes personalizadas alojadas en Dockerhub.

Puede que la imagen base del conducto no admita todos los requisitos de su compilación. Por ejemplo, es posible que necesite un control más preciso sobre las versiones de node, java u otras herramientas. Puede resolver este problema incluyendo un primer paso en los trabajos de conducto que instale una serie de paquetes nuevos y configure variables de entorno cuidadosamente, como PATH, para configurar el entorno. Sin embargo, un mejor enfoque es utilizar el soporte del pipeline para ejecutar una Imagen Personalizada Docker como base para su trabajo.

El soporte para imágenes de Docker personalizadas en el conducto sólo se utiliza para proporcionar una imagen que un trabajo de conducto específico utiliza mientras se ejecuta. Por ejemplo, puede proporcionar una imagen que contenga herramientas personalizadas que sean necesarias para el script que ejecuta el trabajo. Una vez completado el trabajo, se interrumpe el contenedor en el que se estaba ejecutando.

Tanto si utiliza un tipo de trabajo de compilación, como si es de prueba o despliegue, puede seleccionar un subtipo de imagen de Docker personalizada para proporcionar el nombre de imagen de Docker que desea utilizar y especificar el script que desea ejecutar. Por ejemplo, utilice las opciones siguientes para ejecutar un trabajo de compilación con Maven 3.5.3 e IBM Java:

Maven build con imagen
build con
personalizada*

Cómo especificar el nombre de imagen de Docker

El nombre de imagen de Docker en trabajos de imagen de Docker personalizada está diseñado para funcionar de la misma forma que los nombres de imágenes con la CLI de Docker. El formato de un nombre de imagen de Docker es: [repository][:][tag]. Por ejemplo, para docker run maven:3.5.3-ibmjava, el nombre de imagen de Docker es maven:3.5.3-ibmjava, donde maven es el repositorio y 3.5.3-ibmjava es la etiqueta. No hay restricciones sobre el nombre de imagen de Docker que puede utilizar; vale cualquier imagen de Docker válida.

Si no se rellena el campo de nombre de imagen de Docker, se utiliza la imagen base del conjunto estándar.

Por defecto, se busca en su repositorio en Docker Hub. Si utiliza otro registro de Docker, como IBM Cloud® Container Registry, puede utilizar el nombre de DNS completo. También puede utilizar el nombre completo para imágenes en Docker Hub. Por ejemplo, registry.hub.docker.com/library/maven:3.5.3-ibmjava.

La tag de una imagen de Docker es opcional. Si no especifica una etiqueta, se establece de forma predeterminada en latest. El valor predeterminado latest es sólo un nombre de etiqueta que debe gestionar el propietario del repositorio. No significa que, cronológicamente, esta imagen de Docker sea la imagen más reciente.

En Docker Hub hay disponible una amplia comunidad de repositorios. IBM alberga una serie de repositorios públicos que el equipo de IBM Cloud utiliza en https://hub.docker.com/u/ibmcom/. Los repositorios ibmcom/ibmjava e ibmcom/ibmnode son útiles para utilizarlos como base.

Uso de un registro de imagen privado

Si utiliza un registro privado que requiere autenticación, debe establecer dos propiedades de entorno de escenario adicionales: DOCKER_USERNAME y DOCKER_PASSWORD. Puede utilizar una propiedad segura para enmascarar su DOCKER_PASSWORD. Antes de extraer la imagen, el trabajo de imagen de Docker personalizada utiliza las credenciales de nombre de usuario y contraseña para realizar una operación de docker login.

Para la mayoría de los registros, puede utilizar el nombre de usuario y la contraseña que se le han proporcionado. Si utiliza IBM Cloud Container Registry para almacenar las imágenes privadas, debe utilizar una clave de API de plataforma para la autenticación.

  1. Solicite una clave API de plataforma y asegúrese de guardar la clave.

  2. Cree dos propiedades de entorno de etapa utilizando iamapikey para DOCKER_USERNAME y la clave de API de plataforma que ha guardado para DOCKER_PASSWORD.

    caption-side=bottom"
    IBM Cloud Container Registry credenciales Credenciales de autenticación

Cómo especificar el script

Puede utilizar el bloque de script en los trabajos de imagen de Docker personalizada para crear un archivo de script que se ejecute en una carpeta de tareas, de forma similar al funcionamiento de los trabajos normales de conducto.

Los valores ENTRYPOINT y CMD del Dockerfile de la imagen de Docker se sustituyen y no se invocan. En algunos casos, esto podría significar que necesita añadir pasos de inicialización al script.

Los trabajos de imagen de Docker personalizada aportan una mayor flexibilidad sobre cómo ejecutar el script; concretamente, puede controlar el intérprete de mandatos. Normalmente, si la primera línea del script empieza por #! y el nombre de un intérprete de mandatos, dicha entrada se utiliza para ejecutar los mandatos en el trabajo. Si no se especifica un intérprete de mandatos, se utiliza el shell predeterminado para la imagen de Docker. Normalmente, se utilizan #!/bin/bash o #!/bin/sh; los intérpretes de mandatos de imagen para awk, node y ruby también sirven si se especifica una imagen de Docker apropiada.