¡Hola developer 👋🏻! Este repositorio contiene las demos de mi vídeo 15. Docker Builds como código.
Se trata de una herramienta, por ahora en fase experimental, que nos permite usar archivos para definir la configuración y los parámetros que tendrá nuestro comando docker build
haciendo que incluso podamos lanzar múltiples build de forma concurrente con una sola invocación.
Así sería el comando si no tuvieramos esta configuración:
docker build -t halloween:v1 .
El archivo docker-bake.hcl
contiene la configuración para este caso. Para lanzarlo hay que usar este comando:
docker buildx bake
Imagínate que tienes que construir más de una imagen a la vez. Con Bake puedes hacerlo de forma sencilla. En lugar de lanzar estos dos comandos:
docker build -t tour-of-heroes-api:v1 tour-of-heroes-api
docker build -t tour-of-heroes-web:v1 -f tour-of-heroes-angular/Dockerfile.gh-copilot tour-of-heroes-angular
En el archivo bake-multiple-images.hcl
se muestra cómo sería la configuración para este caso.
Para lanzarlo hay que usar este comando:
docker buildx bake --file bakes/bake-multiple-images.hcl
Una de las ventajas de usar BuildKit es que podemos generar imágenes multiplataforma:
docker build --platform linux/arm64,linux/amd64,linux/386 -t halloween:v3 .
docker images --tree
Si quisieramos hacer esto mismo con Bake, la configuración sería la que se muestra en el archivo bake-multiple-platforms.hcl
.
docker buildx create --name mybuilder --use
docker buildx bake --file bakes/bake-multiple-platforms.hcl --load # --load does not work in ARM machines
docker images --tree
Otra de las opciones avanzadas que podemos utilizar con BuildKit es la de poder tener múltiples contextos. En este caso, por ejemplo, podríamos tener un contexto local y otro remoto:
docker build \
--build-context app=./halloween-content \
--build-context config=https://github.com/0GiS0/youtube-docker-buildx.git#main \
-t halloween:v5 \
-f Dockerfile.multicontext.remote .
En el archivo bake-multicontext.hcl se muestra cómo sería la configuración para este caso.
docker buildx bake --file bakes/bake-multicontext.hcl
Para probar el resultado puedes lanzar el siguiente comando:
docker run --name halloween -p 8080:80 -d halloween:v6
docker rm -f halloween
Si por ejemplo queremos usar un builder de Docker Build Cloud lo hacemos así:
docker buildx create --driver cloud 0gis0/returngis
docker build --builder cloud-0gis0-returngis -t tour-of-heroes-api:v3 tour-of-heroes-api
Y lo equivalente en bake estaría en el archivo bake-other-builders.hcl
.
docker buildx bake --file bakes/bake-other-builders.hcl --builder cloud-0gis0-returngis
Y ya por último, si quisieramos exportar/importar la cache, el comando sería:
docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-to type=local,dest=./cache --cache-from type=local,src=./cache -t tour-of-heroes-web:v3 .
Y la configuración equivalente en bake estaría en el archivo bake-cache.hcl
.
docker buildx bake --file bakes/bake-cache.hcl --load
Puedes usar el parámetro --check
para comprobar que el archivo bake está bien definido:
docker buildx bake --file bakes/bake-cache.hcl --check
Y si juntamos todos los ejemplos en algo que pudiera ser un ejemplo real, tendríamos algo así:
docker buildx bake --file bakes/bake-final.hcl
¡No te olvides de darle una estrella 🌟 al repositorio si te ha gustado el contenido! Y de suscribirte a mi canal de YouTube ❤️
¡Nos vemos! 👋🏻