Container machine: entornos Linux persistentes integrados en macOS

Fuentes: Container machine: persistent Linux environments integrated on macOS
Imagen generada por IA con el prompt: Minimal editorial illustration: a Mac laptop on a desk with a glowing Linux terminal window overlapping it, subtle code lines, clean flat style, soft blue and white tones, no logos or text
Imagen generada con IA

Container machine es una funcionalidad del proyecto open source de Apple "container" que ofrece un entorno Linux altamente integrado en macOS. A diferencia de los contenedores tradicionales, pensados para empaquetar una sola aplicación, una container machine modela un sistema Linux completo: ejecuta el sistema init de la imagen, lo que permite registrar servicios de larga duración o probar aplicaciones bajo un supervisor de procesos como systemd.

La máquina comparte automáticamente el nombre de usuario y el directorio home del host macOS, de forma que repositorios y dotfiles están disponibles en ambas plataformas. Esto permite editar código en el editor del Mac y compilarlo dentro del entorno Linux, o usar herramientas nativas de macOS (perfiladores, navegadores, depuradores GUI) sobre los artefactos generados en Linux sin pasos intermedios de copia.

El flujo de trabajo básico se gestiona con la CLI container machine: create instancia una máquina a partir de cualquier imagen OCI que incluya /sbin/init (por ejemplo, alpine:latest, ubuntu o debian); run abre una shell interactiva o ejecuta un comando, arrancando la máquina si está parada; ls, inspect, stop y rm cubren el ciclo de vida. El alias m acorta los comandos. Es posible fijar una máquina por defecto con set-default y ajustar recursos como CPUs o memoria con set.

La documentación incluye un Dockerfile de referencia que parte de ubuntu:24.04, instala systemd, dbus, OpenSSH y utilidades comunes, y prepara la imagen para actuar como container machine. Un script de provisionado en /etc/machine/create-user.sh permite personalizar la creación del usuario en el primer arranque, recibiendo variables como CONTAINER_UID, CONTAINER_GID, CONTAINER_USER y CONTAINER_HOME.