Docker es raro: los contenedores no son reales

Docker is weird

El autor construyó su propio runtime de contenedores por diversión y descubrió que Docker es más extraño de lo que parece. Los contenedores son solo procesos con restricciones especiales, no entidades reales; las imágenes son carpetas que se convierten en la raíz del proceso. Además, Go resulta poco adecuado para un runtime de contenedores por su multihilo nativo y la falta de fork, y Docker suele requerir root. Una mirada técnica y personal a lo que hay bajo el capó.

No existe realmente una característica de Linux que sea solo “contenedores”; en realidad, los contenedores son 5 características distintas del kernel de Linux disfrazadas.
  1. shykes

    Hola, soy el creador de Docker y me topé con este post. Siempre es divertido ver a otros ingenieros pensar en cómo diseñaste un sistema. No he estado involucrado en el desarrollo de Docker desde hace muchos años, pero es un agradable viaje por la memoria.

    Estoy encantado de responder cualquier pregunta que puedan tener.

  2. jlhawn

    > El runtime de contenedores de Docker, runc, está escrito en Go.

    Trabajé en Docker de 2014 a 2019. La parte más importante en realidad está escrita en C.

    [Escribí un comentario entero aquí para explicar cómo funciona el truco porque estaba demasiado obsesionado con lo técnicamente incorrecto que es "escrito en Go". Luego volví a leer el resto del artículo solo para ver que el párrafo inmediatamente después de esto lo explica a su manera. ¡Que esto sirva de lección para siempre terminar de leer el artículo antes de publicar sobre él.]

  3. vbezhenar

    Lo que hizo único a Docker, en mi opinión, no es la tecnología de contenedores en sí. Usé chroot hace 20 años y funcionaba perfectamente. Sí, sin namespaces de red; sin namespaces de procesos, pero ni siquiera creo que sean tan importantes.

    Lo que hizo único a Docker fueron estas tres cosas:

    1. El concepto de Dockerfile. Construir imágenes capa por capa. Cachear capas. Todo en un solo archivo. Hizo posible iterar rápidamente sobre la imagen. Hizo posible implementar compilaciones de CI de manera eficiente.

    2. El concepto de registro de red de Docker. Poner imágenes universales en un servidor y compartirlas con el mundo.

    3. Impulso. Mucho software que tradicionalmente era complicado de desplegar, de repente apareció en servidores Docker. Recuerdo lo fascinado que estaba cuando podía desplegar un sitio de WordPress con un pequeño docker-compose. Y lo contenido que estaba. Podía simplemente borrar cada rastro de él de mi host. Siempre me sentí incómodo instalando varias cosas en mi host y Docker simplemente resolvió esa incomodidad.

  4. slowin

    Prefiero Podman la mayoría de las veces, pero Docker es/fue increíble y una gran experiencia de desarrollador puesta encima de las llamadas "5 características diferentes del kernel de Linux en un abrigo". Ese es el punto de venta, es súper ligero y aprovecha al máximo las características del sistema operativo que ya estaban allí (o se estaban desarrollando) pero que eran incómodas de usar y requerían toneladas de conocimiento especializado.

  5. suprjami

    Siempre es agradable ver a alguien desmitificando algo complejo aprendiendo los bloques de construcción con los que está hecho.

    Sabiendo esto, podrías encontrar el método fork-exec de Podman sin root para iniciar contenedores más sensato. Ciertamente yo lo encuentro así. Sin root, sin daemon, sin socket.

    Si quieres aprender más sobre los namespaces del kernel de Linux que trabajan juntos para hacer un contenedor, esta serie de LWN es realmente buena: https://lwn.net/Articles/531114/

  6. j16sdiz

    Cada afirmación en el artículo me hace preguntar: "¿qué tiene de raro?"

    Todo en esa lista se siente natural cuando sabes cómo evolucionan las cosas a lo largo de muchos años. Quizás soy solo yo que me estoy haciendo mayor y menos curioso.

  7. tyingq

    Curiosea en bocker[1]. Para gente técnica, hace los mismos puntos que el artículo de una manera muy clara.

    [1] "Docker implementado en alrededor de 100 líneas de bash"

    https://github.com/p8952/bocker

  8. sreekanth850

    Empecé a odiar Docker después de ver todo el culto al cargo en Reddit. Cada vez que alguien pregunta sobre desplegar una aplicación en Linux, siempre hay al menos un comentario diciendo: "Simplemente usa Docker". Finalmente terminamos construyendo nuestra propia herramienta de automatización de despliegue para todo nuestro stack que no usa Docker en absoluto.

Más de este día

2026-10-23