RealPulse DevOps RealPulse DevOps
RealPulse DevOps · Guía Técnica

Guía Completa de Docker

De contenedores a microservicios

Infraestructura de servidores con iluminación violeta en un centro de datos

Docker ha revolucionado la informática al permitir que las aplicaciones se ejecuten de manera idéntica en cualquier entorno.

Desde una laptop local hasta un clúster en la nube: esta guía técnica proporciona los conocimientos necesarios para construir, desplegar y gestionar contenedores de manera eficiente y segura, optimizando el uso de recursos de servidor.

guia-docker · v1
Recorrido técnico
01 · Fundamentos

¿Qué es un contenedor y por qué importa?

A diferencia de las máquinas virtuales, los contenedores comparten el kernel del sistema operativo host. Esto los hace extremadamente ligeros y rápidos de iniciar: un contenedor puede arrancar en milisegundos porque no necesita cargar un sistema operativo completo, solo el proceso de la aplicación y sus dependencias directas.

Esta tecnología de aislamiento permite empaquetar una aplicación con todas sus bibliotecas y configuraciones. El resultado directo es que el software se comporta exactamente igual en desarrollo, pruebas y producción, eliminando la frase clásica: "en mi máquina funciona".

Contenedor

Comparte el kernel del host. Arranca en milisegundos. Consume megabytes de RAM. Aislamiento a nivel de proceso.

Máquina virtual

Incluye un kernel completo. Arranca en segundos o minutos. Consume gigabytes de RAM. Aislamiento a nivel de hardware.

02 · Arquitectura

La arquitectura cliente-servidor de Docker

Componente

Docker Daemon

El proceso dockerd que gestiona imágenes, contenedores, redes y volúmenes en el host. Escucha peticiones de la API REST.

Cliente Docker

La interfaz docker que usas en la terminal. Envía comandos al daemon mediante sockets UNIX o TCP.

Registry

Almacén de imágenes como Docker Hub. El daemon descarga y sube imágenes desde aquí mediante pull y push.

Sistema de capas

Las imágenes se construyen mediante capas apiladas. Cada instrucción del Dockerfile genera una capa de solo lectura. Esto permite un almacenamiento eficiente y descargas rápidas: si dos imágenes comparten una base común, esa capa se descarga una sola vez y se reutiliza localmente.

Estructura de capas
Capa 4 · CMD ["node", "app.js"]
Capa 3 · COPY . /app
Capa 2 · RUN npm install
Capa 1 · FROM node:20-alpine

Comprender esta arquitectura es vital para diagnosticar problemas de conexión y permisos. Si el cliente no se comunica con el daemon, los errores suelen estar en los permisos del socket UNIX o en la configuración del contexto Docker.

03 · Dockerfile

Escribiendo un Dockerfile eficiente

El Dockerfile es el manifiesto que define cómo se construye tu imagen. Un Dockerfile bien optimizado reduce los tiempos de despliegue y minimiza la superficie de ataque para posibles vulnerabilidades.

Usa builds multietapa para copiar solo los artefactos necesarios al imagen final.

Elige imágenes base ligeras como Alpine Linux para reducir el tamaño descargable.

Agrupa comandos RUN para reducir capas y acelerar la caché de construcción.

Coloca las instrucciones que cambian con menos frecuencia al inicio del archivo.

Dockerfile
Build multietapa
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app .
USER node
EXPOSE 3000
CMD ["node", "server.js"]

La primera etapa compila dependencias. La segunda copia solo el resultado, dejando fuera compiladores y archivos temporales. El resultado: imágenes más pequeñas y menos herramientas disponibles para un atacante.

04 · Persistencia

Gestión de datos con volúmenes

Los contenedores son efímeros por naturaleza. Si el contenedor se detiene, los datos se pierden a menos que se gestionen correctamente.

Volúmenes Docker

Almacenados en el sistema de archivos gestionado por Docker (/var/lib/docker/volumes). Docker los gestiona, respalda y migra entre hosts.

Cuándo usar: bases de datos en producción, datos que deben sobrevivir a la eliminación del contenedor, entornos multi-host.

Bind mounts

Montan una ruta específica del host directamente al contenedor. Útiles para desarrollo en vivo: los cambios en tu editor se reflejan al instante dentro del contenedor.

Cuándo usar: desarrollo local con recarga en caliente, archivos de configuración editables, logs accesibles desde el host.

Saber cuándo usar cada tipo de persistencia asegura la integridad de la información de tu aplicación. Una regla práctica: volúmenes para datos de producción, bind mounts para código en desarrollo.

05 · Redes

Redes en Docker

Conectar contenedores entre sí requiere entender los drivers de red de Docker. Crear redes personalizadas permite que los microservicios se comuniquen de forma segura sin exponer puertos innecesarios al mundo exterior. La segmentación de red es un paso fundamental para la seguridad en entornos de contenedores.

bridge

Red virtual interna por defecto. Los contenedores se comunican entre sí sin exponer puertos al host.

host

El contenedor usa directamente la red del host. Sin aislamiento, pero con máximo rendimiento.

overlay

Conecta contenedores entre múltiples hosts en un clúster Swarm. Necesario para orquestación distribuida.

Cables de red de fibra óptica con iluminación violeta

Una red personalizada aísla servicios y controla qué contenedores pueden verse entre sí.

06 · Orquestación

Orquestación con Docker Compose

Para aplicaciones que requieren múltiples servicios, Docker Compose es la herramienta estándar. Permite levantar todo el ecosistema con un solo comando.

Tutorial de Docker Compose

Cuando una aplicación necesita un frontend, una API y una base de datos, definir cada contenedor manualmente con docker run se vuelve inmanejable. Docker Compose resuelve esto describiendo toda la aplicación multiservicio en un único archivo YAML.

docker-compose.yml 3 servicios
version: '3.8'
services:
web:
build: .
ports: ["3000:3000"]
: [api, db]
api:
image: node:20-alpine
environment: [NODE_ENV=production]
db:
image: postgres:16-alpine
volumes: [pgdata:/var/lib/postgresql/data]

Con docker compose up, los tres servicios se levantan en el orden correcto, con sus redes y volúmenes configurados automáticamente. Es la solución ideal para entornos de desarrollo local y pruebas integradas.

07 · Seguridad

Seguridad en el entorno de contenedores

Ejecutar procesos como root dentro de un contenedor es un riesgo crítico de seguridad. Si un atacante compromete la aplicación, obtiene privilegios de root sobre el contenedor y, potencialmente, vías de escape hacia el host. Estas prácticas reducen drásticamente la superficie de ataque.

Usuario no privilegiado

Crea un usuario dedicado en el Dockerfile y ejecuta el proceso con USER appuser. Nunca arranques el contenedor como root si la aplicación no lo requiere.

Escaneo de CVEs

Escanea las imágenes con herramientas como Trivy o Grype antes de subirlas al registro. Identifica vulnerabilidades conocidas en las bibliotecas empaquetadas y aplica parches de forma periódica.

Límites de recursos

Usa --memory y --cpus para limitar el consumo de RAM y CPU. Un contenedor desbocado no puede consumir todos los recursos del host ni provocar denegación de servicio.

Firmas de imágenes

Firma tus imágenes con Notation o Cosign. Mantener las imágenes actualizadas y firmadas asegura que solo el código confiable llegue a tus servidores, descartando imágenes alteradas en tránsito.

Panel de seguridad de servidor con indicador violeta
Principio rector

La imagen más segura es la que tiene menos paquetes, menos privilegios y menos superficie expuesta.

08 · Integración

Docker en el flujo de CI/CD

El contenedor es el artefacto final de un pipeline moderno. Cada vez que se actualiza el código, el pipeline construye la imagen, ejecuta los tests dentro de un contenedor idéntico al de producción y sube el resultado a un registro privado.

Integrar Docker en tu pipeline de Jenkins o GitHub Actions acelera la transición del código desde el repositorio hasta el usuario final. El mismo binario que pasó los tests es el que se despliega: sin reformateo, sin reinstalación de dependencias, sin sorpresas en producción.

Un flujo típico etiqueta la imagen con el hash del commit de Git, lo que permite trazabilidad completa: sabes exactamente qué código ejecuta cada contenedor en producción y puedes volver a una versión anterior en segundos.

Flujo de pipeline
Paso 1

Construcción de imagen

El pipeline ejecuta docker build con el Dockerfile del repositorio.

Paso 2

Tests en contenedor

Se ejecutan tests unitarios e de integración dentro de la imagen recién construida.

Paso 3

Push al registro

La imagen validada se etiqueta y se sube al registro privado con docker push.

Paso 4

Despliegue

El servidor de producción hace docker pull de la nueva etiqueta y reinicia el contenedor.

Siguiente lectura

Fundamentos de DevOps

Si estás empezando, revisa la base conceptual antes de profundizar en contenedores.

Ir a fundamentos →
Práctica recomendada

Pipeline CI/CD con Docker

Conecta esta guía con la automatización de despliegues y la integración continua.

Ver pipeline CI/CD →
Ecosistema

Herramientas y ecosistema

Explora el catálogo de herramientas complementarias a Docker para tu infraestructura.

Explorar herramientas →
¿Necesitas orientación con tu infraestructura Docker?

RealPulse DevOps publica guías técnicas para ingenieros y equipos de operaciones en Argentina. Si tienes preguntas sobre contenedores, CI/CD o migración de infraestructura, escríbenos y te respondemos directamente.