El comando build
en Docker Compose permite construir (o reconstruir) las imágenes Docker especificadas en un archivo docker-compose.yml
. Esto es útil cuando tienes servicios definidos en Docker Compose que requieren una imagen personalizada a partir de un Dockerfile
o configuraciones específicas de construcción.
build
en Docker Compose
Para utilizar build
en Docker Compose, es necesario especificar la opción build
dentro de la definición de un servicio en el archivo docker-compose.yml
. Esto indicará a Docker Compose que construya una imagen en lugar de descargarla de un repositorio.
docker-compose.yml
Un ejemplo básico de configuración con build
en un archivo docker-compose.yml
es el siguiente:
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:80"
database:
image: postgres:13
build
Opción | Descripción |
---|---|
context
|
Directorio donde Docker Compose buscará el Dockerfile .
|
dockerfile
|
Nombre del archivo Dockerfile (por defecto es Dockerfile ).
|
args
|
Permite pasar variables de construcción (build arguments) al Dockerfile. |
cache_from
|
Especifica imágenes para usar como caché durante el proceso de construcción. |
target
|
Objetivo de la construcción en un Dockerfile con múltiples etapas (multi-stage build ).
|
build
en Docker Compose
1. Construir una imagen con el Dockerfile en el directorio actual:
version: '3'
services:
app:
build:
context: .
ports:
- "3000:3000"
Aquí, Docker Compose construirá la imagen para el servicio app
usando el Dockerfile
que esté en el mismo directorio que el archivo docker-compose.yml
.
2. Especificar un archivo Dockerfile personalizado:
Si deseas usar un archivo Dockerfile con otro nombre (por ejemplo, Dockerfile.dev
):
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
3. Pasar variables de construcción (build arguments):
Puedes definir variables de construcción para parametrizar la imagen desde el archivo Docker Compose. Por ejemplo:
version: '3'
services:
app:
build:
context: .
args:
APP_ENV: development
ports:
- "3000:3000"
En este caso, la variable APP_ENV
estará disponible como un ARG
en el Dockerfile y se podrá utilizar durante la construcción de la imagen.
4. Ejecutar un objetivo específico en una construcción multi-stage:
Si tu Dockerfile contiene múltiples etapas, puedes especificar el objetivo de construcción con target
:
version: '3'
services:
app:
build:
context: .
target: production
ports:
- "3000:3000"
Esto construirá solo hasta la etapa production
en un Dockerfile multi-stage.
docker-compose build
Para construir las imágenes definidas en docker-compose.yml
, usa el siguiente comando:
docker-compose build
Esto construirá todas las imágenes especificadas en el archivo de configuración. También puedes construir un servicio específico:
docker-compose build <nombre_servicio>
docker-compose up
.
--no-cache
:
docker-compose build --no-cache
Para más detalles sobre build
en Docker Compose, consulta la documentación oficial de Docker Compose.
Jorge García
Fullstack developer