CodeGym /Cursos /Docker SELF /Construcción de la imagen

Construcción de la imagen

Docker SELF
Nivel 13 , Lección 3
Disponible

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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).

Terminal

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:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Comando de construcción:

Terminal

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

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:

Terminal

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

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:

Terminal


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.

dockerfile

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:

Text

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.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION