Skip to content
BotServBotServ
DockerComposeOptimizaciónOverrideHealthcheck

Optimizar Docker Compose

Compose más eficiente, rápido y mantenible. Overrides, variables, Healthchecks y legibilidad.

S

schutzgeist

2 min read
Optimizar Docker Compose

Optimizar configuraciones de Docker Compose

Qué cubre este artículo sobre optimización de Compose

  • Cómo mantener archivos Compose legibles y bien organizados.
  • Overrides y variables de entorno.
  • Healthchecks y políticas de reinicio.
  • Optimización de redes y volúmenes.
  • Consejos para setups más rápidos y seguros.

Introducción: optimizar configuraciones de Docker Compose

Los archivos Compose grandes se vuelven difíciles de mantener rápidamente. Con el tiempo se acumulan variables de entorno antiguas, puertos sin usar e imágenes obsoletas. Una buena estructura de Compose separa la configuración estándar de la específica del entorno, utiliza healthchecks y mantiene los archivos legibles. Quien optimiza su setup de forma deliberada ahorra tiempo en actualizaciones y depuración.

Este artículo muestra formas probadas de mejorar configuraciones de Docker Compose.

Conceptos clave

  • Archivo override: docker-compose.override.yml.
  • .env: archivo con variables de entorno.
  • Healthcheck: autoverificación del contenedor.
  • Depends_on: orden de inicio de servicios.
  • Profiles: selecciona qué servicios iniciar.
  • Secrets: gestión segura de contraseñas.
  • Templating: variables en Compose.
  • Extends: compartir configuración.

Archivos base y override

# docker-compose.yml
services:
  web:
    image: nginx
    ports:
      - "80:80"
# docker-compose.override.yml
services:
  web:
    ports:
      - "8080:80"

docker compose up carga ambos archivos automáticamente.

Variables de entorno

.env:

APP_PORT=8080
DB_PASSWORD=geheim
services:
  web:
    ports:
      - "${APP_PORT}:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}

Healthchecks

services:
  web:
    image: nginx
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3

Perfiles

services:
  test:
    image: busybox
    profiles:
      - test
docker compose --profile test up -d

Políticas de reinicio

services:
  db:
    image: postgres
    restart: unless-stopped

Límites de recursos

services:
  app:
    image: mein-app
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M

Aislar redes correctamente

services:
  web:
    networks:
      - frontend
  db:
    networks:
      - backend

networks:
  frontend:
  backend:
    internal: true

Elegir volúmenes estratégicamente

services:
  db:
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Prefiere volúmenes nombrados en lugar de Bind Mounts siempre que sea posible.

Consejos prácticos

  • Un servicio por responsabilidad.
  • Usa nombres claros y descriptivos.
  • Archivos override para desarrollo y producción.
  • Proporciona .env.example al equipo.
  • No definas todos los servicios en un solo archivo.
  • Healthchecks para servicios críticos.
  • Establece límites de logging.
  • Fija versiones de imágenes.
  • Elimina variables de entorno innecesarias.
  • No hagas commit de .env en Git.

Errores frecuentes

  • Archivos Compose monolíticos: difíciles de mantener.
  • Falta de .env: los contenedores no inician.
  • Sin healthchecks: los fallos se detectan tarde.
  • Demasiados puertos expuestos: vulnerabilidades de seguridad.
  • Tags de imagen antiguos: usar latest en producción.
  • Falta de límites: los contenedores consumen todos los recursos.
  • Overrides sin probar: conflictos al fusionar configuraciones.

Enlaces y recursos adicionales

FAQ: Optimizar Docker Compose

¿Qué es un archivo override? Un docker-compose.override.yml adicional que complementa el archivo principal.

¿Debo usar .env? Sí, permite transportar configuraciones y proteger valores sensibles.

¿Tienen sentido los healthchecks? Especialmente para servicios críticos como bases de datos.

¿Cuándo usar perfiles? Cuando no todos los servicios deben iniciarse siempre.

¿Qué mejora el aislamiento de red? Separar redes para frontend, backend y base de datos.

Fuentes y lecturas recomendadas

Resumen: optimizar configuraciones de Docker Compose

Las configuraciones de Compose bien optimizadas utilizan overrides, variables de entorno, healthchecks, límites de recursos e isolamiento de redes. Los perfiles y nombres claros mantienen los archivos organizados. Imágenes versionadas, archivos .env probados y redes limpias mejoran la seguridad y el mantenimiento. Quien limpia regularmente mantiene el control incluso con un número creciente de contenedores.

Volver al blog
Share:

Entradas relacionadas