Un Dockerfile es un archivo de texto que contiene un conjunto de instrucciones que Docker sigue para construir una imagen personalizada. Es como una receta paso a paso que define cómo configurar un entorno para tu aplicación.
El Dockerfile es una herramienta esencial para personalizar imágenes en Docker. Al especificar cada paso necesario para configurar un entorno, simplifica la construcción y asegura que tus aplicaciones sean portátiles, reproducibles y eficientes.
Cómo funciona
- Docker lee el archivo línea por línea.
- Ejecuta cada instrucción para construir la imagen.
- Al finalizar, genera una imagen que contiene todo lo especificado.
¿Qué hace un Dockerfile?
Automatiza la creación de imágenes, evitando que tengas que configurarlas manualmente. Define todo lo necesario:
- Qué sistema operativo usar como base.
- Qué dependencias instalar.
- Qué archivos agregar.
- Qué comandos ejecutar.
Analogía:
Imagina que estás montando una cocina personalizada para un chef. El Dockerfile es como un manual donde defines:
- Qué tipo de horno necesitas (base).
- Qué utensilios incluir (dependencias).
- Qué ingredientes agregar (archivos).
- Qué debe hacer el chef al iniciar (comando inicial).
Estructura de un Dockerfile
Un Dockerfile sigue una serie de instrucciones básicas que Docker interpreta. Aquí tienes las más comunes:
1. FROM (Imagen Base)
FROM python:3.8-slim
Es la primera instrucción y define la imagen base desde la que se construirá tu imagen.
Esto usa una imagen ligera de Python 3.8 como base.
Por defecto lo descarga desde docker hub
2. COPY o ADD (Copiar Archivos)
Copia archivos o carpetas de tu sistema al contenedor.
COPY app.py /app/
Esto copia el archivo app.py de tu máquina local a la carpeta /app/ en el contenedor.
3. RUN (Ejecutar Comandos)
Ejecuta comandos durante la construcción de la imagen, como instalar dependencias.
RUN pip install flask
- Esto instala Flask dentro de la imagen.
4. WORKDIR (Directorio de Trabajo)
Establece el directorio de trabajo donde se ejecutarán los comandos siguientes.
WORKDIR /app
5. CMD o ENTRYPOINT (Comando Inicial)
Define el comando que se ejecutará cuando se inicie el contenedor.
CMD ["python", "app.py"]
- Esto ejecuta el archivo app.py usando Python al iniciar el contenedor.
Ejemplo Completo:
# Usa una imagen base con Python
FROM python:3.8-slim
# Configura el directorio de trabajo
WORKDIR /app
# Copia el archivo de tu aplicación al contenedor
COPY app.py /app
# Instala dependencias necesarias
RUN pip install flask
# Comando para ejecutar la aplicación
CMD ["python", "app.py"]
Construcción de una Imagen desde un Dockerfile
Guarda tu Dockerfile: Guarda este archivo en el directorio raíz de tu proyecto, con el nombre Dockerfile.
Construye la imagen: Usa el comando docker build para crear la imagen basada en el Dockerfile.
docker build -t mi-aplicacion .
Ejecuta un contenedor: Usa la imagen para crear y ejecutar un contenedor.
docker run -p 5000:5000 mi-aplicacion
Optimización con caché
Docker utiliza un sistema de caché para acelerar la construcción de imágenes. Si detecta que alguna instrucción no cambió, reutiliza las capas previas en lugar de reconstruirlas.
Beneficios
- Automatización: Configura imágenes de manera reproducible y automática.
- Reproducibilidad: El mismo Dockerfile produce imágenes idénticas en cualquier máquina.
- Flexibilidad: Puedes personalizar tu entorno de aplicación según tus necesidades.