Cómo usar el comando docker buildx create para gestionar constructores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a gestionar eficazmente los constructores (builders) de Docker utilizando el comando docker buildx create. Cubriremos los pasos esenciales para crear una nueva instancia de constructor, añadir nuevos nodos a un constructor existente, asignar nombres personalizados a constructores y nodos, especificar las plataformas compatibles para un nodo de construcción y cambiar automáticamente a un constructor recién creado para tus operaciones de construcción. Al finalizar este laboratorio, tendrás un sólido entendimiento de cómo configurar y utilizar diferentes configuraciones de constructores para compilaciones multi-arquitectura y distribuidas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/ls -.-> lab-555046{{"Cómo usar el comando docker buildx create para gestionar constructores"}} docker/rm -.-> lab-555046{{"Cómo usar el comando docker buildx create para gestionar constructores"}} docker/inspect -.-> lab-555046{{"Cómo usar el comando docker buildx create para gestionar constructores"}} docker/create -.-> lab-555046{{"Cómo usar el comando docker buildx create para gestionar constructores"}} end

Crear una nueva instancia de constructor (builder)

En este paso, aprenderemos cómo crear una nueva instancia de constructor (builder) utilizando el comando docker buildx create. Una instancia de constructor es un objeto de Docker que gestiona múltiples nodos de construcción (build nodes). Cada nodo puede representar una arquitectura o entorno diferente para construir imágenes.

Antes de crear un nuevo constructor, verifiquemos los constructores existentes en tu sistema. Puedes hacer esto con el comando docker buildx ls.

docker buildx ls

Deberías ver la instancia de constructor predeterminada, que generalmente se llama default.

Ahora, creemos una nueva instancia de constructor. Llamaremos a este nuevo constructor mybuilder.

docker buildx create --name mybuilder

Este comando crea una nueva instancia de constructor llamada mybuilder. Por defecto, este nuevo constructor aún no tendrá nodos asociados. Añadiremos nodos en los siguientes pasos.

Después de crear el nuevo constructor, puedes listar los constructores nuevamente para ver el recién creado.

docker buildx ls

Ahora deberías ver tanto el constructor default como el constructor mybuilder en la lista. El constructor mybuilder aparecerá como inactivo por ahora, ya que no tiene nodos activos.

Añadir un nuevo nodo a un constructor existente

En el paso anterior, creamos una nueva instancia de constructor llamada mybuilder. Actualmente, este constructor no tiene ningún nodo de construcción. En este paso, añadiremos un nuevo nodo a este constructor existente.

Un nodo de construcción (build node) es esencialmente un endpoint de Docker donde se ejecutará el proceso de construcción. Por defecto, cuando creas un nuevo constructor sin especificar un nodo, se crea sin nodos activos.

Para añadir un nuevo nodo al constructor mybuilder, usaremos nuevamente el comando docker buildx create, pero esta vez especificaremos el constructor al que queremos añadir el nodo usando la bandera --append. Añadiremos un nodo al constructor mybuilder.

docker buildx create --name mybuilder --append

Este comando añade un nuevo nodo al constructor mybuilder. Por defecto, cuando añades un nodo sin especificar un nombre, Docker Buildx generará un nombre para él.

Listemos nuevamente los constructores para ver la instancia mybuilder actualizada con el nuevo nodo.

docker buildx ls

Ahora deberías ver mybuilder listado con un nodo debajo. El nodo tendrá un nombre generado y probablemente estará en estado de ejecución.

Especificar nombres para el constructor y el nodo

En los pasos anteriores, creamos un constructor llamado mybuilder y le añadimos un nodo. Al nodo se le asignó automáticamente un nombre generado. En este paso, aprenderemos cómo especificar nombres tanto para el constructor como para el nodo al crearlos.

Primero, eliminemos el constructor mybuilder que creamos en los pasos anteriores para empezar desde cero.

docker buildx rm mybuilder

Ahora, creemos una nueva instancia de constructor y especifiquemos su nombre como custombuilder. También especificaremos un nombre para el nodo inicial dentro de este constructor como node1. Podemos hacer esto usando la bandera --name para el constructor y la bandera --node para el nodo.

docker buildx create --name custombuilder --node node1

Este comando crea una nueva instancia de constructor llamada custombuilder y un nodo inicial dentro de él llamado node1.

Listemos los constructores para confirmar los nombres.

docker buildx ls

Ahora deberías ver custombuilder en la lista, y debajo de él, el nodo llamado node1. Esto te da más control sobre cómo se organizan e identifican tus constructores y nodos.

Configurar las plataformas soportadas por un nodo

En este paso, aprenderemos cómo especificar las plataformas que soporta un nodo de construcción. Esto es crucial para construir imágenes multi-arquitectura. Por defecto, un nodo soportará la arquitectura del host en el que se ejecuta. Sin embargo, con Buildx, puedes configurar nodos para soportar plataformas adicionales usando emulación (como QEMU).

Primero, inspeccionemos el custombuilder que creamos en el paso anterior para ver las plataformas soportadas por su nodo.

docker buildx inspect custombuilder

Busca el campo "Platforms" en la salida. Debería mostrar la arquitectura nativa de tu LabEx VM (ej. linux/amd64).

Ahora, actualicemos el node1 dentro de custombuilder para soportar plataformas adicionales. Podemos usar el comando docker buildx create con la bandera --append y la bandera --platform. Añadiremos soporte para linux/arm64 y linux/riscv64.

docker buildx create --name custombuilder --append --node node1 --platform linux/arm64,linux/riscv64

Nota que estamos usando --append con el nombre existente del constructor y del nodo. Este comando actualiza el nodo existente node1 dentro de custombuilder para incluir las plataformas especificadas.

Inspeccionemos nuevamente el constructor para ver las plataformas actualizadas de node1.

docker buildx inspect custombuilder

El campo "Platforms" para node1 debería ahora incluir linux/amd64, linux/arm64 y linux/riscv64. Esto significa que este nodo ahora es capaz de construir imágenes para estas arquitecturas.

Cambiar automáticamente al constructor recién creado

En este paso final, aprenderemos cómo cambiar automáticamente al uso de la nueva instancia de constructor creada. Cuando tienes múltiples constructores, necesitas indicarle a Docker Buildx cuál usar para tus operaciones de construcción.

Por defecto, Docker Buildx utiliza el constructor default. Puedes ver qué constructor está actualmente activo observando la salida de docker buildx ls. El constructor activo tendrá un asterisco (*) junto a su nombre.

docker buildx ls

Para cambiar al uso de custombuilder que creamos, puedes usar el comando docker buildx use seguido del nombre del constructor.

docker buildx use custombuilder

Este comando establece custombuilder como el constructor activo actual. Cualquier comando docker buildx build posterior ahora usará los nodos configurados dentro de custombuilder.

Verifiquemos que custombuilder es ahora el constructor activo listando los constructores nuevamente.

docker buildx ls

Ahora deberías ver un asterisco (*) junto a custombuilder, indicando que es el constructor activo.

Has creado exitosamente una nueva instancia de constructor, añadido un nodo a él, especificado nombres para ambos, configurado las plataformas soportadas para el nodo y cambiado al uso de este nuevo constructor.

Resumen

En este laboratorio, aprendimos a gestionar constructores de Docker utilizando el comando docker buildx create. Comenzamos creando una nueva instancia de constructor llamada mybuilder, demostrando cómo inicializar un entorno de construcción separado. Luego exploramos cómo añadir un nuevo nodo de construcción a un constructor existente, agregando efectivamente un punto final de construcción a nuestra instancia mybuilder.

Además, cubrimos cómo especificar nombres personalizados tanto para el constructor como para sus nodos, para una mejor organización y claridad. También aprendimos a definir las plataformas específicas (arquitecturas) que soporta un nodo de construcción particular, permitiendo construcciones dirigidas. Finalmente, practicamos el cambio automático al constructor recién creado, convirtiéndolo en el constructor activo para operaciones de construcción posteriores.