Construir servicios con argumentos de build y sin caché
En este paso, exploraremos dos opciones avanzadas de construcción con Docker Compose: usar argumentos de build y construir sin caché.
Los argumentos de build (build arguments) permiten pasar variables al proceso de construcción de Docker. Esto es útil para personalizar la compilación según diferentes entornos o configuraciones sin cambiar el Dockerfile
en sí.
Primero, modifiquemos nuestro Dockerfile
para aceptar un argumento de build. Abre el Dockerfile
para editar:
nano ~/project/Dockerfile
Cambia el contenido a lo siguiente:
FROM ubuntu:latest
ARG MESSAGE="Hello from build argument!"
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "$MESSAGE"]
Hemos añadido una instrucción ARG MESSAGE
para definir un argumento de build llamado MESSAGE
con un valor por defecto. También cambiamos la instrucción CMD
para usar este argumento.
Guarda el Dockerfile
presionando Ctrl + X
, luego Y
, y Enter
.
Ahora, modifiquemos nuestro archivo docker-compose.yml
para pasar un valor a este argumento de build. Abre el archivo para editar:
nano ~/project/docker-compose.yml
Cambia el contenido a lo siguiente:
version: "3.8"
services:
cow:
build:
context: .
args:
MESSAGE: "Custom message from Compose!"
Hemos cambiado la directiva build:
a un objeto con context:
y args:
.
context: .
especifica el contexto de construcción, que es el directorio que contiene el Dockerfile
.
args:
es un mapa de argumentos de build para pasar al Dockerfile
. Estamos pasando el valor "Custom message from Compose!"
al argumento MESSAGE
.
Guarda el archivo docker-compose.yml
presionando Ctrl + X
, luego Y
, y Enter
.
Ahora, construyamos la imagen con el argumento de build. Asegúrate de estar en el directorio ~/project
.
cd ~/project
docker-compose build
Observa la salida de la construcción. Deberías ver que el argumento de build se usa durante el proceso.
Una vez completada la construcción, ejecutemos un contenedor desde esta imagen para ver la salida.
docker run project_cow
Deberías ver la salida de cowsay
con el mensaje "Custom message from Compose!". Esto confirma que el argumento de build se pasó y usó correctamente.
A veces, es posible que quieras forzar a Docker a reconstruir todas las capas, ignorando la caché. Esto es útil cuando sospechas problemas de caché o quieres asegurar una construcción limpia. Puedes hacer esto usando la bandera --no-cache
con el comando docker-compose build
.
Intentemos reconstruir la imagen con la bandera --no-cache
.
docker-compose build --no-cache
Observa nuevamente la salida de la construcción. Esta vez, verás que Docker no usa ninguna capa en caché y reconstruye cada paso en el Dockerfile
. Este proceso tomará más tiempo que una construcción con caché.
Después de completar la construcción, puedes ejecutar el contenedor nuevamente para confirmar que el mensaje sigue siendo el pasado a través del argumento de build.
docker run project_cow
Deberías seguir viendo "Custom message from Compose!". La bandera --no-cache
solo afecta el proceso de construcción, no la configuración definida en docker-compose.yml
.