Arquitectura interna
Docker esta formado por varias piezas. Entenderlas ayuda a diagnosticar problemas y a no tratar los contenedores como magia.
Componentes
mermaid
flowchart TD
A["Usuario"] --> B["Docker CLI"]
B --> C["Docker daemon / dockerd"]
C --> D["containerd"]
D --> E["runc"]
E --> F["Proceso del contenedor"]
C --> G["Images"]
C --> H["Networks"]
C --> I["Volumes"]
G --> J["Registry"]Docker CLI
Es el cliente que ejecutas:
bash
docker build
docker run
docker ps
docker logsLa CLI habla con el daemon mediante una API. Puede hablar con un daemon local o remoto.
Docker daemon
dockerd gestiona:
- Builds.
- Imagenes.
- Contenedores.
- Redes.
- Volumenes.
- Comunicacion con registries.
Cuando haces docker run, no "corres Docker"; pides al daemon que cree un contenedor.
containerd y runc
Docker delega parte del trabajo en componentes de bajo nivel:
- containerd: gestiona ciclo de vida de contenedores.
- runc: crea el contenedor usando primitivas del kernel.
runc es quien aplica namespaces, cgroups y montaje de filesystem.
Flujo de docker run
mermaid
sequenceDiagram
participant U as Usuario
participant CLI as Docker CLI
participant D as Docker daemon
participant R as Registry
participant C as containerd/runc
U->>CLI: docker run nginx
CLI->>D: peticion API
D->>R: busca imagen si no existe localmente
R-->>D: descarga capas
D->>C: crea contenedor
C-->>D: proceso arrancado
D-->>CLI: id del contenedorImagen vs contenedor
txt
imagen = plantilla inmutable
contenedor = proceso + capa escribible + configuracion de ejecucionPuedes crear muchos contenedores desde la misma imagen.
Buenas practicas
- Entiende si un fallo viene del build, del daemon o del proceso.
- Usa
docker inspectpara ver configuracion real. - Revisa
docker infocuando haya problemas del entorno. - No confundas imagen con contenedor.
Errores comunes
- Pensar que Docker es una VM.
- Modificar un contenedor manualmente y esperar que la imagen cambie.
- No distinguir problemas de red Docker y problemas de aplicacion.
- Ignorar el daemon cuando la CLI falla.
