Qué medimos y cómo
Las tres apps se ejecutaron en el mismo Mac: un Apple M5 Max con 36 GiB de memoria y macOS 27.2. Cada una se configuró con 8 CPU y 12 GiB, se inició desde cero con su propio comando y se ejecutó sola; cerramos las demás y verificamos que no quedaban en ejecución. Las cifras en reposo proceden de una ventana de 60 segundos tras 45 segundos de estabilización, contando todos los procesos del producto: la app, sus auxiliares y el motor con su sistema Linux. Las cifras de los contenedores son medianas de cinco muestras tras un calentamiento; las diferencias de hasta el 10 % se consideran empate.
Oxcart 0.1.2 se midió el 2026-10-10 con su cliente docker 29.9 incluido. OrbStack 2.2.3 y Docker Desktop 4.94.0 se midieron antes ese mismo día, en el mismo Mac y con el mismo sistema de medición, usando docker 29.4. Cada producto ejecuta su propio kernel Linux. Es una pasada por producto en una máquina, no un estudio; el método es el mismo para todos.
Memoria en reposo sin contenedores
| App | Memoria en reposo |
|---|---|
| Oxcart 0.1.2 | 776 MiB |
| OrbStack 2.2.3 | 792 MiB |
| Docker Desktop 4.94.0 | 1745 MiB |
Es la memoria que consume una app de contenedores solo por estar lista: entre sesiones de trabajo, durante reuniones o en un portátil donde permanece abierta todo el día. Oxcart y OrbStack están al mismo nivel; Docker Desktop retiene más del doble.
El coste de supervisar tus contenedores
Los paneles, los monitores del terminal y los agentes de programación consultan las estadísticas de los contenedores constantemente, por lo que el coste de leerlas importa más de lo que parece.
| Medida | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
CPU de un cliente de docker stats en continuo | 1,29 % | 3,81 % | 5,45 % |
docker stats --no-stream | 1038 ms | 2050 ms | 2054 ms |
CPU como porcentaje de un núcleo. Oxcart 0.1.2 medido el 2026-10-10 con su cliente docker 29.9 incluido; OrbStack 2.2.3 y Docker Desktop 4.94.0 medidos antes ese día en el mismo Mac, con el mismo sistema de medición y docker 29.4.
El elemento de Oxcart en la barra de menús, con 20 contenedores en ejecución, consume el 0,0004 % de un núcleo y genera 0,033 activaciones por segundo. Esa cifra corresponde solo a la app, no al motor.
Con carga: empate
Cuando los contenedores hacen trabajo real, las apps convergen porque el trabajo en sí domina. Dos filas de la misma ejecución:
| Medida | Oxcart | OrbStack | Docker Desktop |
|---|---|---|---|
| CPU del Mac por segundo de CPU dentro del contenedor | 1,10× | 1,11× | 1,09× |
| Memoria del Mac por contenedor que accede a 256 MiB | 235 MiB | 266 MiB | 236 MiB |
En la práctica: una compilación o prueba limitada por CPU consume aproximadamente la misma CPU del Mac en cualquiera de las tres apps, y un contenedor que usa 256 MiB consume más o menos esa cantidad en el Mac. Lo que cambia es todo lo que rodea al trabajo: cuánto tarda cada docker run, stop y limpieza, donde Oxcart lleva ventaja (frente a Docker Desktop, frente a OrbStack).
Al terminar: la memoria vuelve a macOS
Desde Oxcart 0.1.3, unos 30 s después de que se detenga tu último contenedor, Oxcart reinicia su parte Linux y devuelve la memoria a macOS: 570 MiB, frente a 3319 MiB, 32 s después de detenerse el último contenedor (segunda ejecución: de 3352 a 579 MiB). Solo ocurre cuando no hay ningún contenedor en ejecución. Sucede en segundo plano: un comando Docker que llegue durante el reinicio simplemente espera a que termine.
Medido en Oxcart 0.1.3.
Mide la memoria de una app de contenedores en tu Mac
- Empieza con un Mac sin actividad. Cierra las demás apps de contenedores, detén tus contenedores y espera un minuto tras iniciar la app para que termine el trabajo de arranque.
- Busca todos los procesos de la app. En Monitor de Actividad, abre la pestaña Memoria y busca el nombre de la app; el proceso que ejecuta la parte Linux suele ser el más grande. En el terminal,
ps -axo pid,rss,comm | grep -i <app>los enumera. - Lee la memoria que contabiliza macOS. Usa la columna Memoria de Monitor de Actividad o
footprint <pid>para cada proceso y suma los valores. El tamaño residente (RSS) por sí solo puede contar de más o de menos la memoria compartida y comprimida. - Mide con tu carga en ejecución. Inicia tu stack Compose habitual, úsalo unos minutos y vuelve a leer las mismas cifras.
docker stats --no-streammuestra lo que usa cada contenedor dentro de la parte Linux. - Mide después de detener todo. Detén todo y vuelve a leer las cifras un minuto después. Esa es la memoria que conserva la app en reposo entre sesiones de trabajo.
Ajustes que importan
- Límites de la app. Cada app limita las CPU y la memoria que puede usar su parte Linux. En Oxcart: Settings › Resources, o
oxcart config set cpus=6yoxcart config get; los valores se aplican en el próximo arranque. Un límite muy por encima de lo que necesita tu stack no aporta nada. - Límites por contenedor.
--memory,--cpusy--pids-limitendocker run, omem_limit,cpusypids_limiten Compose, evitan que un servicio descontrolado acapare todos los recursos. - Detén lo que no uses.
docker compose stoppara stacks a los que volverás;docker compose downpara los demás. En Oxcart, detener el último contenedor también permite devolver la memoria a macOS. - Supervisa con poco coste. Prefiere
docker stats --no-streamen scripts y da a los agentes de programación una herramienta de resumen en lugar de estadísticas en bruto (Docker para agentes de programación con IA).
Preguntas
¿Cuánta memoria usa Docker en un Mac?
Depende de la app y del trabajo de tus contenedores. Sin contenedores en ejecución, en un Mac con chip de Apple configurado con 12 GiB, medimos 776 MiB para Oxcart, 792 MiB para OrbStack y 1745 MiB para Docker Desktop, contando todos los procesos de cada producto. Cuando los contenedores se ejecutan, la memoria depende de sus cargas de trabajo.
¿Por qué Docker Desktop usa tanta memoria?
Toda app de contenedores en Mac ejecuta un sistema Linux, y la memoria a la que acceden sus cargas aparece como un gran proceso en el Mac. En nuestra medición, Docker Desktop también tuvo la cifra en reposo más alta de los tres: 1745 MiB sin contenedores. Baja el límite de memoria en sus ajustes, detén los contenedores que no necesites y compara una alternativa como Oxcart, que usó 776 MiB en reposo en el mismo Mac.
¿Oxcart devuelve memoria a macOS?
Sí, cuando ya no se ejecuta nada. Desde Oxcart 0.1.3, unos 30 s después de detenerse tu último contenedor, Oxcart reinicia su parte Linux y devuelve la memoria a macOS: 570 MiB, frente a 3319 MiB, 32 s después de detenerse el último contenedor, en una medición de una versión previa al lanzamiento. Solo ocurre cuando no hay ningún contenedor en ejecución.
¿Cómo limito la memoria y la CPU de un contenedor?
Por contenedor: docker run --memory 512m --cpus 1.5 …, o mem_limit y cpus en un servicio Compose. Oxcart aplica cambios de memoria, CPU y número máximo de procesos con docker update, y los conserva aunque un reinicio vuelva a crear el contenedor.
¿Cómo configuro cuántas CPU y cuánta memoria puede usar Oxcart?
En Settings › Resources, o desde el terminal con oxcart config set cpus=4 y oxcart config get para ver los valores efectivos y los límites de tu Mac. Los nuevos valores se aplican en el próximo arranque.
¿docker stats ralentiza mi Mac?
Un flujo de docker stats consume CPU en todas las apps. Medimos el 1,3 % de un núcleo para Oxcart, el 3,8 % para OrbStack y el 5,5 % para Docker Desktop; Oxcart fue el más bajo de los tres. Una consulta de docker stats --no-stream para 20 contenedores tardó 1,0 s en Oxcart, aproximadamente la mitad que en los otros dos.
Fuentes y método
- Oxcart 0.1.2, OrbStack 2.2.3 y Docker Desktop 4.94.0, medidos el 2026-10-10 en el mismo Mac (Apple M5 Max, 36 GiB, macOS 27.2), con 8 CPU y 12 GiB cada uno, un producto a la vez.
- Memoria devuelta tras detenerse el último contenedor: Oxcart 0.1.3.
- Coste de la barra de menús: medido en Oxcart el 2026-10-09.