4.1 Fundamentos del comando docker build
El comando docker build
es la principal forma de crear una imagen de Docker desde un Dockerfile. Toma las instrucciones del Dockerfile y las ejecuta paso a paso, formando la imagen a partir de capas. En esta lectura vamos a analizar cómo funciona el comando docker build
, qué parámetros tiene y cómo usarlo en la práctica.
El comando docker build
construye una imagen a partir de un Dockerfile y del llamado contexto de construcción. El contexto de construcción son los archivos que Docker usa para crear la imagen. Esto puede ser una carpeta local en tu máquina o, por ejemplo, un repositorio en GitHub.
Sintaxis
docker build [OPTIONS] PATH | URL | -
Dónde:
-
PATH
: ruta al directorio que contiene el Dockerfile y el contexto de construcción. URL
: dirección URL de un repositorio remoto.-
: leer el Dockerfile desde la entrada estándar (stdin).
Ejemplo de uso básico
En este ejemplo, Docker usará el Dockerfile de la carpeta actual (.)
y creará una imagen con el nombre myimage
y la etiqueta latest
.
docker build -t myimage:latest .
4.2 Personalización del comando build
Parámetros principales del comando docker build
El comando docker build
admite muchas opciones que permiten configurar el proceso de construcción.
1. Parámetros -t
, --tag
El parámetro -t
o --tag
se utiliza para asignar un nombre y una etiqueta a la imagen creada.
docker build -t myimage:latest .
2. Parámetros -f
, --file
El parámetro -f
o --file
permite especificar un Dockerfile alternativo, si es diferente del Dockerfile estándar.
docker build -f Dockerfile.dev -t myimage:dev .
3. Parámetro --build-arg
El parámetro --build-arg
se utiliza para pasar argumentos de construcción definidos mediante la instrucción ARG en el Dockerfile.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. Parámetro --no-cache
El parámetro --no-cache
permite realizar la construcción sin usar la caché. Esto es útil si necesitas asegurarte de que todos los comandos se ejecuten de nuevo.
docker build --no-cache -t myimage:latest .
5. Parámetro --target
El parámetro --target
se utiliza para especificar la etapa objetivo en la construcción multi-etapas.
docker build --target builder -t myimage:builder .
6. Parámetro --rm
El parámetro --rm
indica a Docker eliminar los contenedores intermedios después de una construcción exitosa de la imagen (habilitado por defecto).
docker build --rm -t myimage:latest .
4.3 Ejemplos de docker build
Ejemplo 1: Construcción básica
Supongamos que tienes una aplicación sencilla en Node.js y quieres crear una imagen de Docker para su despliegue.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Comando de construcción:
docker build -t mynodeapp:latest .
En este ejemplo, Docker creará una imagen mynodeapp
con la etiqueta latest
, usando el Dockerfile de la carpeta actual.
Ejemplo 2: Construcción utilizando argumentos
Los argumentos de construcción permiten pasar variables al Dockerfile durante la construcción.
Dockerfile
FROM node:14
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Comando de construcción:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
En este ejemplo, el argumento APP_VERSION
se pasa al Dockerfile, lo que permite definir la versión de la aplicación durante la construcción.
Ejemplo 3: Construcción de múltiples etapas
La construcción de múltiples etapas se utiliza para crear imágenes que solo incluyen los componentes necesarios. Esto permite reducir el tamaño de la imagen final.
Dockerfile
# Fase de construcción
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Crear la imagen final con un conjunto mínimo de archivos
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
Comando de construcción:
docker build -t mywebapp:latest .
En este ejemplo, primero se crea una imagen intermedia llamada builder, donde se realiza la construcción de la aplicación. Después de la construcción, la aplicación se traslada a la imagen final, que utiliza Nginx para servir el contenido preparado.
4.4 Consejos prácticos
1. Optimización del orden de las instrucciones
Para usar de manera eficiente la caché de Docker, es importante ordenar correctamente las instrucciones. Por ejemplo, primero copia archivos que cambian raramente, como package.json
, para minimizar la reconstrucción de dependencias. Luego, copia los demás archivos.
COPY package*.json ./
RUN npm install
COPY . .
2. Uso de .dockerignore
Agrega un archivo .dockerignore
para excluir archivos y directorios innecesarios del contexto de construcción. Esto reducirá el tamaño del contexto y acelerará la creación de la imagen.
Ejemplo de .dockerignore
:
node_modules
dist
*.log
3. Construcción multi-etapa
Usa construcción multi-etapa para crear imágenes minimalistas y ligeras. Este enfoque permite incluir solo los archivos y dependencias que realmente son necesarios para ejecutar la aplicación, excluyendo del resultado final datos innecesarios como archivos temporales o el código fuente.
GO TO FULL VERSION