Compartir comentarios
Las respuestas se generan en base a la documentación.

Personalizar una imagen o chart de Docker Hardened Images

Suscripción: Docker Hardened Images Select o Enterprise

Cuando tienes una suscripción de DHI Select o DHI Enterprise, puedes personalizar Docker Hardened Images (DHI) y charts para adaptarlos a tus necesidades específicas mediante la interfaz web de Docker Hub. Para las imágenes, esto te deja seleccionar una imagen base, añadir paquetes, añadir artefactos OCI (como certificados personalizados o herramientas adicionales) y configurar los ajustes. Para los charts, esto te deja personalizar las referencias de las imágenes.

Tus personalizaciones se mantienen seguras de forma automática. Cuando la imagen o el chart base de Docker Hardened Image recibe un parche de seguridad o se actualizan tus artefactos OCI, Docker reconstruye automáticamente tus personalizaciones en segundo plano. Esto garantiza protección y cumplimiento continuos de forma predeterminada, sin necesidad de realizar trabajo manual. Los artefactos reconstruidos están firmados y atestiguados con el mismo estándar SLSA Build Level 3 que las imágenes y charts base, lo que garantiza una cadena de suministro segura y verificable.

Personalizar una Docker Hardened Image

Para añadir una Docker Hardened Image personalizada a tu organización, un propietario de la organización primero debe replicar el repositorio de DHI en tu organización en Docker Hub. Una vez replicado el repositorio, cualquier usuario con acceso al repositorio replicado de DHI puede crear una imagen personalizada.

Puedes crear personalizaciones utilizando la CLI de DHI o la interfaz web de Docker Hub.

  1. Inicia sesión en Docker Hub.

  2. Selecciona My Hub.

  3. En el menú desplegable de espacios de nombres, selecciona tu organización que tenga un repositorio de DHI replicado.

  4. Selecciona Hardened Images > Manage > Mirrored Images.

  5. En el repositorio replicado de DHI que quieras personalizar, selecciona el icono de menú en la columna de la extrema derecha.

  6. Selecciona Customize.

    En este punto, las instrucciones en pantalla te guiarán a través del proceso de personalización. Puedes continuar con los siguientes pasos para obtener más detalles.

  7. Selecciona una o más imágenes o Helm charts y las versiones que quieras personalizar.

    Al seleccionar múltiples imágenes y versiones, todas las selecciones deben compartir la misma distribución y versión de distribución. Por ejemplo, puedes seleccionar dhi-node:22_alpine3.23 y dhi-python:3.13_alpine3.23 juntas (ambas Alpine 3.23), pero no puedes mezclar dhi-node:22_debian con imágenes Alpine, ni mezclar diferentes versiones de Alpine como alpine3.23 y alpine3.22.

    Alternativamente, puedes seleccionar múltiples versiones de Helm charts para aplicarles la misma personalización. No puedes mezclar imágenes y Helm charts en la misma personalización.

  8. Selecciona Next.

  9. Opcional. Añadir paquetes.

    1. En el menú desplegable de paquetes, selecciona los paquetes que quieras añadir a la imagen.

      Los paquetes disponibles en el menú desplegable son paquetes del sistema operativo para la variante de imagen seleccionada. Para las imágenes basadas en Alpine versión 3.23, estos son paquetes securizados que Docker ha compilado desde el código fuente con firmas criptográficas y seguridad total en la cadena de suministro. Para las imágenes basadas en Alpine versión 3.22 y las basadas en Debian, estos son paquetes estándar del sistema.

    2. En el menú desplegable de OCI artifacts, primero, selecciona el repositorio que contiene la imagen del artefacto OCI. Luego, selecciona la etiqueta que quieras usar de ese repositorio. Finalmente, especifica las rutas concretas que quieras incluir de la imagen del artefacto OCI.

      Los artefactos OCI son imágenes que has compilado y subido previamente a un repositorio en el mismo espacio de nombres que la DHI replicada. Por ejemplo, puedes añadir un certificado CA raíz personalizado u otra imagen que contenga una herramienta que necesites, como añadir Python a una imagen de Node.js. Para obtener más detalles sobre cómo crear una imagen de artefacto OCI, consulta Crear una imagen de artefacto OCI.

      Puedes añadir múltiples imágenes de artefactos OCI a una sola personalización. Cuando añades más de una, se aplican en el orden en que las agregas en el menú desplegable de OCI artifacts. Si múltiples imágenes contienen directorios o archivos con la misma ruta, las imágenes añadidas después sobrescriben los archivos de las imágenes añadidas antes. Para gestionar esto, debes seleccionar las rutas a incluir y, opcionalmente, a excluir de cada imagen de artefacto OCI. Esto te deja controlar qué archivos se incluyen en la imagen personalizada final.

      Por defecto, no se incluye ningún archivo de la imagen del artefacto OCI. Debes incluir explícitamente las rutas que quieras. Después de incluir una ruta, puedes excluir explícitamente archivos o directorios dentro de ella.

      Note

      Cuando los archivos necesarios para la ejecución se sobrescriben con artefactos OCI, la compilación de la imagen tiene éxito, pero puedes tener problemas al ejecutar la imagen.

    3. En la sección Scripts, puedes añadir, editar o eliminar scripts.

      Los scripts te dejan añadir archivos a la imagen del contenedor a los que puedes acceder en tiempo de ejecución. No se ejecutan durante el proceso de compilación. Esto es útil para servicios que requieren inicialización previa al inicio, como scripts de configuración o escrituras de archivos en directorios como /var/lock o /out.

      Debes especificar lo siguiente:

      • La ruta donde se colocará el script
      • El contenido del script
      • La propiedad de UID y GID del script
      • Los permisos de archivo octales del script
  10. Selecciona Next: Configure para configurar los siguientes ajustes de la imagen:

    Note

    Al personalizar múltiples imágenes a la vez, muchas de estas opciones de configuración están limitadas por defecto y es posible que no estén disponibles.

    1. Especifica las variables de entorno y sus valores que contendrá la imagen.
    2. Añade etiquetas (labels) a la imagen.
    3. Añade anotaciones a la imagen.
    4. Especifica los usuarios que quieras añadir a la imagen. Cuando añades un usuario, se crea automáticamente un directorio de inicio para ese usuario con permisos 0755.
    5. Especifica los grupos de usuarios que quieras añadir a la imagen.
    6. Selecciona con qué usuario ejecutar las imágenes.
    7. Añade argumentos ENTRYPOINT a la imagen. Estos argumentos se añaden al punto de entrada de la imagen base.
    8. Añade argumentos CMD a la imagen. Estos argumentos se añaden al comando de la imagen base.
    9. Sobrescribe el directorio de trabajo predeterminado (/) de la imagen.
    10. Especifica un sufijo para el nombre de la personalización que se añadirá a la etiqueta de la imagen personalizada. Por ejemplo, si especificas custom al personalizar la imagen dhi-python:3.13, la imagen personalizada se etiquetará como dhi-python:3.13_custom.
    11. Selecciona el formato de compresión para las capas de la imagen. Puedes elegir entre compresión ZSTD (predeterminada) o GZIP. ZSTD suele ofrecer descargas de imágenes más rápidas y mejores tasas de compresión, pero puede presentar problemas de compatibilidad con software antiguo. Si necesitas compatibilidad con versiones anteriores de Docker, usa GZIP.
    12. Selecciona las plataformas para las que quieras compilar la imagen. Debes seleccionar al menos una plataforma.
  11. Selecciona Next: Review customization.

  12. Selecciona Create Customization.

    Aparece un resumen de la personalización. La compilación de la imagen puede tardar un tiempo. Una vez compilada, aparecerá en la pestaña Tags del repositorio, y los miembros de tu equipo podrán descargarla como cualquier otra imagen.

Autentícate con docker login usando tus credenciales de Docker, un token de acceso personal (PAT) con permisos de Read & Write, o un token de acceso de organización (OAT). Cuando usas un OAT, las operaciones disponibles dependen del alcance de los permisos del token:

  • Para listar u obtener personalizaciones, o para ver los registros de compilación, el OAT debe tener acceso de lectura (pull) al repositorio de destino. Los resultados se limitan a los repositorios a los que el OAT puede acceder.
  • Para crear, actualizar o eliminar una personalización, el OAT debe tener acceso de escritura (push) al repositorio de destino. Las operaciones masivas requieren acceso de escritura en cada repositorio de destino referenciado.

Usa el comando docker dhi customization:

# Preparar un andamio de personalización
$ docker dhi customization prepare golang 1.25 \
  --org my-org \
  --destination my-org/dhi-golang \
  --name "golang con git" \
  --output my-customization.yaml

# Crear una personalización
$ docker dhi customization create my-customization.yaml --org my-org

# Listar personalizaciones
$ docker dhi customization list --org my-org

# Filtrar personalizaciones por nombre, repositorio o origen
$ docker dhi customization list --org my-org --filter git
$ docker dhi customization list --org my-org --repo dhi-golang
$ docker dhi customization list --org my-org --source golang

# Obtener una personalización
$ docker dhi customization get my-org/dhi-golang "golang con git" --org my-org --output my-customization.yaml

# Actualizar una personalización
$ docker dhi customization edit my-customization.yaml --org my-org

# Eliminar una personalización
$ docker dhi customization delete my-org/dhi-golang "golang con git" --org my-org

# Eliminar sin solicitud de confirmación
$ docker dhi customization delete my-org/dhi-golang "golang con git" --org my-org --yes

Puedes gestionar las personalizaciones de DHI como infraestructura como código utilizando el proveedor de Terraform de DHI. Si aún no has configurado el proveedor, consulta la pestaña de Terraform en Replicar un repositorio para ver las instrucciones de configuración.

Define un recurso dhi_customization para cada personalización:

resource "dhi_customization" "golang_with_git" {
  repository = "dhi-golang"
  name       = "golang con git"

  contents {
    packages = ["git", "curl"]
  }

  platform {
    os           = "linux"
    architecture = "amd64"
  }
}

El recurso dhi_customization también admite bloques de configuración opcionales para accounts, files, labels, annotations, environment, entrypoint, cmd, user, workdir y stop_signal.

Ejecuta terraform apply para crear la personalización.

Para editar una personalización, actualiza la configuración del recurso y ejecuta terraform apply. Para eliminar una personalización, quita el recurso y ejecuta terraform apply.

Para ver la lista completa de atributos del recurso, consulta la documentación de Terraform Registry.

Note

La monitorización de las compilaciones de personalización no está disponible a través del proveedor de Terraform. Usa la interfaz web de Docker Hub o la CLI de DHI para monitorizar las compilaciones.

Monitorizar las compilaciones de personalización

  1. Inicia sesión en Docker Hub.
  2. Selecciona My Hub.
  3. En el menú desplegable de espacios de nombres, selecciona tu organización.
  4. Selecciona Hardened Images > Manage.
  5. Selecciona la pestaña Customizations.

Listar las compilaciones de una personalización:

$ docker dhi customization build list my-org/dhi-golang "golang con git" --org my-org

Obtener detalles de una compilación específica:

$ docker dhi customization build get my-org/dhi-golang "golang con git" <build-id> --org my-org

Ver los registros de compilación:

$ docker dhi customization build logs my-org/dhi-golang "golang con git" <build-id> --org my-org

Crear una imagen de artefacto OCI para la personalización de imágenes

Un artefacto OCI es una imagen de Docker que contiene archivos o directorios que quieres incluir en tu Docker Hardened Image (DHI) personalizada. Esto puede incluir herramientas adicionales, bibliotecas o archivos de configuración.

Al crear una imagen para usarla como artefacto OCI, lo ideal es que sea lo más mínima posible y que contenga solo los archivos necesarios.

Por ejemplo, para distribuir un certificado CA raíz personalizado como parte de un paquete de CA de confianza, puedes usar una compilación de múltiples etapas. Este enfoque registra tu certificado en el sistema y genera un paquete de CA actualizado, que se puede extraer en una imagen final mínima:

# syntax=docker/dockerfile:1

FROM dhi.io/bash:5-dev AS certs

ENV DEBIAN_FRONTEND=noninteractive

RUN mkdir -p /usr/local/share/ca-certificates/my-rootca
COPY certs/rootCA.crt /usr/local/share/ca-certificates/my-rootca

RUN update-ca-certificates

FROM scratch
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

Puedes seguir este patrón para crear otros artefactos OCI, como imágenes que contengan herramientas o bibliotecas que quieras incluir en tu DHI personalizada. Instala las herramientas o bibliotecas necesarias en la primera etapa y luego copia los archivos correspondientes a la etapa final que usa FROM scratch. Esto garantiza que tu artefacto OCI sea mínimo y contenga solo los archivos necesarios.

Para que el artefacto OCI esté disponible en una personalización de DHI, debe compilarse y subirse a un repositorio en el mismo espacio de nombres que el repositorio de DHI replicado.

Si estás personalizando una DHI para múltiples plataformas (como linux/amd64 y linux/arm64), compila tu artefacto OCI para todas las plataformas usando la opción --platform:

$ docker buildx build --platform linux/amd64,linux/arm64 \
  -t <your-namespace>/my-oci-artifact:latest \
  --push .

Esto crea un único manifiesto de imagen que puedes usar para cada plataforma. El sistema de compilación de personalización selecciona automáticamente la variante de plataforma correcta al compilar cada imagen personalizada.

Important

La interfaz de usuario de personalización solo te dejará seleccionar plataformas que estén disponibles en todos los artefactos OCI que hayas añadido. Si falta una plataforma en algún artefacto OCI, no podrás seleccionar esa plataforma para tu personalización.

Una vez subido a un repositorio en el espacio de nombres de tu organización, el artefacto OCI aparece automáticamente en el flujo de trabajo de personalización cuando seleccionas qué artefactos OCI añadir a tu Docker Hardened Image personalizada.

Mejores prácticas para artefactos OCI

Sigue estas mejores prácticas al crear artefactos OCI para personalizaciones de DHI:

  • Usa compilaciones de múltiples etapas: Compila o instala las dependencias en una etapa de compilación y luego copia solo los archivos necesarios a una etapa final FROM scratch. Esto mantiene el artefacto OCI mínimo y libre de herramientas de compilación innecesarias.

  • Incluye únicamente archivos esenciales: Los artefactos OCI deben contener solo los archivos que necesites añadir a la imagen personalizada. Evita incluir gestores de paquetes, shells u otras utilidades que no se vayan a utilizar en la imagen final.

  • Coincidencia de plataformas de destino: Compila tu artefacto OCI para todas las plataformas que planees utilizar en tus personalizaciones. Usa docker buildx build --platform para crear imágenes multiplataforma cuando sea necesario.

  • Usa etiquetas específicas: Etiqueta tus artefactos OCI con versiones o fechas específicas (como v1.0 o 20250101) en lugar de confiar únicamente en latest. Esto garantiza compilaciones reproducibles y facilita el seguimiento de qué artefactos se utilizan en cada personalización.

  • Habilita las etiquetas inmutables: Considera habilitar las etiquetas inmutables para tus repositorios de artefactos OCI. Esto evita sobrescrituras accidentales y garantiza que cada versión de tu artefacto OCI permanezca inalterada, mejorando la reproducibilidad y confiabilidad de tus personalizaciones.

Personalizar un Helm chart de DHI

Puedes personalizar los Helm charts de DHI para adaptarlos a las necesidades específicas de tu organización. A través de la interfaz web de Docker Hub, puedes modificar las referencias de las imágenes para que apunten a imágenes replicadas o imágenes personalizadas que hayas creado. Esto te deja crear un chart personalizado y compilado de forma segura con referencias a imágenes almacenadas en Docker Hub u otros registros privados. DHI empaqueta de forma segura los Helm charts personalizados que hacen referencia a tus repositorios, dondequiera que estén almacenados, de forma predeterminada.

Para personalizar las referencias de imágenes, el propietario de una organización debe replicar el repositorio de charts de DHI en su organización en Docker Hub.

Puedes crear una personalización de chart por cada repositorio de Helm charts. Esto es diferente de las personalizaciones de imágenes, donde puedes crear múltiples personalizaciones por repositorio. Si necesitas hacer cambios, puedes editar tu personalización existente. Alternativamente, puedes replicar el mismo repositorio de Helm charts de nuevo y añadir una nueva personalización a la nueva réplica.

Note

Puedes personalizar los charts de Docker Hardened Image como cualquier otro Helm chart utilizando herramientas y prácticas estándar de Helm, como un archivo values.yaml, fuera de Docker Hub. Las siguientes instrucciones describen cómo personalizar las referencias de imágenes del chart utilizando la interfaz web de Docker Hub.

Para personalizar un Helm chart de Docker Hardened Image después de haberlo replicado:

  1. Inicia sesión en Docker Hub.

  2. Selecciona My Hub.

  3. En el menú desplegable de espacios de nombres, selecciona tu organización que tenga un repositorio de DHI replicado.

  4. Selecciona Hardened Images > Manage > Mirrored Helm charts.

  5. En el repositorio de DHI replicado que quieras personalizar, selecciona el Name.

  6. Selecciona la pestaña Customizations.

  7. Selecciona Create customization.

    En este punto, las instrucciones en pantalla te guiarán a través del proceso de personalización.

Editar o eliminar una personalización

Para editar o eliminar una personalización de DHI o de un chart, sigue estos pasos:

  1. Inicia sesión en Docker Hub.

  2. Selecciona My Hub.

  3. En el menú desplegable de espacios de nombres, selecciona tu organización que tenga un repositorio replicado.

  4. Selecciona Hardened Images > Manage.

  5. Selecciona Customizations.

  6. En el repositorio de DHI personalizado que quieras gestionar, selecciona el icono de menú en la columna de la extrema derecha. Desde aquí, puedes:

    • Edit: Editar la personalización.
    • Create new: Crear una nueva personalización basada en el repositorio de origen.
    • Delete: Eliminar la personalización.
  7. Sigue las instrucciones en pantalla para completar la edición o eliminación.