TechLead
Lección 13 de 18
5 min de lectura
Docker

Docker para Backend y APIs

Construye configuraciones Docker listas para producción para Node.js, Express y otros servicios backend

Node.js / Express API

Dockerfile de Producción

FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
COPY --from=builder /app/package*.json ./
RUN npm ci --production && npm cache clean --force
COPY --from=builder --chown=app:app /app/dist ./dist
USER app
ENV NODE_ENV=production
EXPOSE 4000
CMD ["node", "dist/server.js"]

Endpoint de Health Check

// server.js — Endpoint de health check
app.get('/health', (req, res) => {
  res.status(200).json({
    status: 'healthy',
    uptime: process.uptime(),
    timestamp: new Date().toISOString()
  });
});

Apagado Elegante

// Apagado elegante para contenedores Docker
process.on('SIGTERM', () => {
  console.log('SIGTERM recibido. Apagando elegantemente...');
  server.close(async () => {
    await db.end();
    await redis.quit();
    process.exit(0);
  });

  setTimeout(() => {
    console.error('Apagado forzado después del timeout');
    process.exit(1);
  }, 30000);
});

Lista de Verificación de Producción

  • ✅ Usa builds multi-etapa para minimizar el tamaño de la imagen
  • ✅ Ejecuta como usuario no-root
  • ✅ Implementa endpoints de health check
  • ✅ Maneja SIGTERM para apagado elegante
  • ✅ Registra logs en stdout/stderr en formato JSON estructurado

Continuar Aprendiendo