¿Qué es un Dockerfile?
Un Dockerfile es un archivo de texto que contiene todas las instrucciones necesarias para construir una imagen de Docker. Es como una receta que le dice a Docker cómo crear tu aplicación.
Estructura básica de un Dockerfile
# Comentario
INSTRUCCIÓN argumentosInstrucciones principales
1. FROM - Imagen base
FROM ubuntu:20.04
FROM python:3.9
FROM node:16-alpine2. RUN - Ejecutar comandos
RUN apt-get update && apt-get install -y python3
RUN pip install flask
RUN mkdir /app3. COPY - Copiar archivos
COPY . /app
COPY requirements.txt /app/4. WORKDIR - Directorio de trabajo
WORKDIR /app5. EXPOSE - Exponer puertos
EXPOSE 80
EXPOSE 30006. CMD - Comando por defecto
CMD ["python", "app.py"]
CMD ["npm", "start"]Ejemplo completo
# Usar una imagen base de Python
FROM python:3.9-slim
# Establecer el directorio de trabajo
WORKDIR /app
# Copiar archivos de requisitos primero (para cache)
COPY requirements.txt .
# Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt
# Copiar el resto de la aplicación
COPY . .
# Exponer el puerto
EXPOSE 5000
# Comando para ejecutar la aplicación
CMD ["python", "app.py"]Proceso de construcción
Crear el Dockerfile
Construir la imagen:
docker build -t mi-aplicacion .Ejecutar el contenedor:
docker run -p 5000:5000 mi-aplicacion
Buenas prácticas
1. Usar .dockerignore
node_modules
.git
.env
*.log2. Optimizar capas
# MAL - Múltiples RUN crean muchas capas
RUN apt-get update
RUN apt-get install -y python3
RUN pip install flask
# BIEN - Un solo RUN
RUN apt-get update && \
apt-get install -y python3 && \
pip install flask3. Multi-stage builds (para aplicaciones complejas)
# Stage 1: Build
FROM node:16 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Stage 2: Production
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80Ejemplo real: Aplicación web simple
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]Comandos útiles
# Construir imagen
docker build -t mi-imagen .
# Ver imágenes
docker images
# Ejecutar contenedor
docker run -d -p 80:80 mi-imagen
# Ver contenedores en ejecución
docker psVentajas de usar Dockerfile
Reproducibilidad: Siempre obtienes el mismo entorno
Versionado: Puedes controlar cambios en el Dockerfile
Portabilidad: Funciona en cualquier sistema con Docker
Automatización: Fácil de integrar en CI/CD
Comentarios
Publicar un comentario