7.1 Imagen base
Las imágenes base juegan un papel importante al crear imágenes Docker, ya que proporcionan el punto de partida para la construcción y definen el entorno en el que se ejecutará tu aplicación. La elección y configuración correcta de las imágenes base pueden influir significativamente en el rendimiento, tamaño y seguridad de la imagen final. En esta lección vamos a ver cómo elegir y configurar imágenes base para Docker.
Una imagen base (o imagen base inicial) es una imagen Docker que se utiliza como la capa inicial para crear una nueva imagen Docker. Puede incluir un sistema operativo mínimo, herramientas y bibliotecas necesarias, o incluso estar vacía (imagen scratch). La elección de la imagen base determina qué recursos y paquetes estarán disponibles en tu contenedor de forma predeterminada.
Elección de la imagen base
Al elegir una imagen base, es necesario considerar varios factores:
- Tamaño de la imagen: Imágenes más pequeñas se descargan más rápido, ocupan menos espacio en disco y pueden acelerar la implementación de aplicaciones.
- Soporte y actualizaciones: Usar imágenes oficiales con actualizaciones regulares asegura un mayor nivel de seguridad, corrección de vulnerabilidades y estabilidad en su funcionamiento.
- Compatibilidad: La imagen base debe incluir las bibliotecas y dependencias necesarias que necesita tu aplicación para funcionar correctamente.
Imágenes base populares
1. Alpine Linux
Una imagen muy liviana, ocupa alrededor de 5 MB. Es ideal para aplicaciones que requieren un sistema operativo mínimo. Sin embargo, los desarrolladores deben tener en cuenta que Alpine carece de muchas bibliotecas estándar, por lo que algunas aplicaciones pueden requerir configuraciones adicionales.
FROM alpine:3.12
2. Debian/Ubuntu
Imágenes más completas que incluyen una amplia gama de herramientas y bibliotecas. Son adecuadas para aplicaciones más complejas que requieren un entorno más completo o una biblioteca estándar Linux bien conocida.
FROM ubuntu:20.04
3. Imágenes Oficiales de Lenguajes
Imágenes oficiales para lenguajes de programación como Node.js, Python, Ruby y otros. Estas imágenes ya contienen el entorno necesario para desarrollar y ejecutar aplicaciones en el idioma correspondiente, lo que facilita la configuración.
FROM node:14
7.2 Configuración de la imagen base
Después de seleccionar la imagen base, se debe configurar según los requisitos de tu aplicación. La configuración incluye instalar los paquetes necesarios, copiar los archivos de la aplicación y configurar el entorno.
Ejemplo: Configuración de la imagen base basada en Alpine Linux
# Usamos la imagen base Alpine Linux
FROM alpine:3.12
# Instalamos los paquetes necesarios
RUN apk add --no-cache python3 py3-pip
# Establecemos el directorio de trabajo
WORKDIR /app
# Copiamos los archivos de la aplicación
COPY . .
# Instalamos las dependencias
RUN pip3 install -r requirements.txt
# Indicamos el comando para iniciar la aplicación
CMD ["python3", "app.py"]
En este ejemplo se usa la imagen base alpine:3.12, se instalan los paquetes necesarios, se copian los archivos de la aplicación y se instalan las dependencias. El comando final alpine:3.12
indica cómo iniciar la aplicación.
Ejemplo: Configuración de la imagen base basada en Ubuntu
# Usamos la imagen base Ubuntu
FROM ubuntu:20.04
# Actualizamos e instalamos los paquetes necesarios
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Establecemos el directorio de trabajo
WORKDIR /app
# Copiamos los archivos de la aplicación
COPY . .
# Instalamos las dependencias
RUN pip3 install -r requirements.txt
# Indicamos el comando para iniciar la aplicación
CMD ["python3", "app.py"]
Este Dockerfile usa la imagen ubuntu:20.04 e instala Python y pip. Luego, copia los archivos de la aplicación e instala las dependencias, similar al ejemplo anterior.
7.3 Mejores prácticas
Cómo elegir y configurar correctamente las imágenes base:
1. Elige imágenes mínimas: comienza con las imágenes más pequeñas que cumplan con los requisitos de tu aplicación. Esto reducirá el tamaño de la imagen final y aumentará la seguridad.
2. No instales paquetes innecesarios: instala solo las dependencias que realmente necesita tu aplicación. Esto reducirá el tamaño de la imagen y disminuirá el número de posibles vulnerabilidades.
3. Limpia la caché de los gestores de paquetes: después de instalar paquetes, elimina los archivos temporales y la caché para aligerar la imagen.
RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*
4. Usa multi-stage build: esto permite dividir las etapas de construcción y ejecución, lo que ayuda a crear imágenes más ligeras y seguras.
# Etapa de construcción
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Etapa final
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
5. Actualiza las imágenes regularmente: usa versiones recientes de las imágenes base para incluir los últimos parches de seguridad y actualizaciones.
GO TO FULL VERSION