Última actividad 6 months ago

gistfile1.md Sin formato

🐳 Ejemplos en Dockerfile

✅ Ejemplo 1: API en Node.js

FROM node:20

WORKDIR /app
COPY . .

RUN npm install
EXPOSE 3000

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1

CMD ["npm", "start"]

Aquí se asume que el endpoint /health devuelve 200 OK si la app está funcionando.


✅ Ejemplo 2: PostgreSQL

FROM postgres:16

HEALTHCHECK --interval=10s --timeout=3s --retries=5 \
  CMD pg_isready -U postgres || exit 1

pg_isready es una utilidad que ya viene en la imagen oficial de PostgreSQL y comprueba si se puede conectar a la base de datos.


🧩 Ejemplos en docker-compose.yml

✅ Ejemplo 3: API en Rust

version: "3.8"
services:
  rust-api:
    image: mi-api-rust
    ports:
      - "8080:8080"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

Este sería para una API escrita en Rust usando Axum, por ejemplo.


✅ Ejemplo 4: Frontend en React

services:
  frontend:
    image: mi-frontend-react
    ports:
      - "3000:80"
    healthcheck:
      test: ["CMD-SHELL", "wget -q --spider http://localhost || exit 1"]
      interval: 20s
      timeout: 3s
      retries: 2

Utiliza wget para comprobar si el frontend devuelve una respuesta correcta.


✅ Ejemplo 5: Redis

services:
  redis:
    image: redis:7
    ports:
      - "6379:6379"
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3

Redis responde con "PONG" si está funcionando correctamente.


🧠 Extra: Comprobación del estado desde terminal

Después de definir un healthcheck, puedes consultar el estado con:

docker ps

Verás una columna llamada STATUS donde aparecerá healthy, unhealthy o starting.

También puedes ver más información detallada con:

docker inspect <nombre_contenedor>

Y filtrar directamente el estado con:

docker inspect --format='{{json .State.Health}}' <nombre_contenedor>