El equipo de investigación de Apple lanzó recientemente el proyecto del contenedor. Es una herramienta de línea de comandos de código abierto escrita en Swift. Crea y ejecuta contenedores de Linux como máquinas virtuales livianas en una Mac. El proyecto se entrega bajo la licencia Apache 2.0 y apunta al silicio de Apple.

Los contenedores son la forma de enviar entornos reproducibles desde una computadora portátil a un centro de datos. Apple ahora ofrece una ruta nativa que evita una única máquina virtual Linux siempre activa.

¿Qué es el contenedor de Apple?

contenedor es una herramienta CLI que se puede utilizar para crear imágenes, ejecutar contenedores y mover imágenes hacia y desde registros. Consume y produce imágenes de contenedores compatibles con OCI. Por lo tanto, puede extraerlas de Docker Hub o GitHub Container Registry y ejecutar esas imágenes. También puede enviar imágenes que cree a cualquier registro estándar.

Container utiliza el paquete Containerization Swift de código abierto. Ese paquete maneja la gestión de procesos, imágenes y contenedores de bajo nivel. La herramienta requiere una Mac con Apple Silicon. Las Mac Intel no son compatibles. Apple admite contenedores en macOS 26, lo que agrega mejoras de virtualización y redes. Puedes ejecutarlo en macOS 15, pero con limitaciones de red.

Cómo ejecuta Container sus contenedores

La mayoría de las herramientas de contenedores de macOS ejecutan una máquina virtual Linux compartida que aloja cada contenedor. Apple toma un camino diferente. Container ejecuta una máquina virtual ligera independiente para cada contenedor que cree. Apple describe tres propiedades de este diseño:

Seguridad: Cada contenedor tiene el aislamiento de una VM completa. Un conjunto mínimo de utilidades principales y bibliotecas dinámicas reduce el uso de recursos y la superficie de ataque. Privacidad: monta solo los datos que cada VM necesita, en lugar de compartirlo todo. Rendimiento: estos contenedores utilizan menos memoria que las máquinas virtuales completas. Los tiempos de arranque son comparables a los de los contenedores en una máquina virtual compartida.

El tiempo de ejecución integra varios marcos de macOS. Utiliza el marco de virtualización para las máquinas virtuales y el marco vmnet para las redes. Utiliza XPC para la comunicación entre procesos, lanzamiento para la gestión de servicios y servicios de llavero para las credenciales de registro.

El avión de control tiene algunas partes móviles. Container System Start lanza Container-apiserver, un agente de lanzamiento. Luego, el apiserver inicia un contenedor auxiliar XPC-core-images para la gestión de imágenes y el almacén de contenido local. También inicia container-network-vmnet para la red virtual. Para cada contenedor, lanza container-runtime-linux, el asistente de administración por contenedor.

Explicador interactivo

‘;} función renderArch(modo){ if(modo===’manzana’){ stage.innerHTML=’

macOS · Apple Silicon · Virtualización.framework

‘+ ‘

micro-VM A

‘+caja(‘web (nginx)’)+caja(‘vminitd init’)+’

‘+ ‘

micro-VM B

‘+box(‘db (postgres)’)+box(‘vminitd init’)+’

‘+ ‘

micro-VM C

‘+box(‘constructor (BuildKit)’)+box(‘vminitd init’)+’

‘+ ‘

‘; archcap.innerHTML=’Cada contenedor tiene su propia VM liviana con su propio kernel. El aislamiento está en el límite de la VM y los contenedores inactivos liberan su espacio.’; }else{ etapa.innerHTML=’

macOS · única máquina virtual Linux siempre activa

VM Linux compartida (un kernel)

‘; archcap.innerHTML=’Todos los contenedores comparten un kernel dentro de una única VM en segundo plano. Conexión en red más sencilla, pero con una superficie de ataque compartida más amplia y un coste inactivo constante.’; } cambiar tamaño(); } root.querySelectorAll(‘.mcd-seg’).forEach(function(s){ s.addEventListener(‘click’,function(){ root.querySelectorAll(‘.mcd-seg’).forEach(function(x){x.classList.remove(‘is-active’)}); s.classList.add(‘is-active’);renderArch(s.dataset.arch); }); renderArch(‘manzana’); // cambio de tamaño automático: componente offsetHeight + 40 (por contrato de inserción de WordPress) function resize(){ try{ var h=root.offsetHeight+40; if(window.parent&&window.parent!==ventana){ ventana.parent.postMessage({mtpContainerDemoHeight:h},’*’); } }catch(e){} } window.addEventListener(‘cargar’,redimensionar); setTimeout(cambiar tamaño,120); })();

“>

Casos de uso con ejemplos

Desarrollo backend local. Ejecute un servicio en su propia máquina virtual aislada y luego reenvíe un puerto a su dirección de loopback.

ejecución del contenedor -d –rm -p 127.0.0.1:8080:8000 \ node:latest npx http-server -a :: -p 8000 curl http://127.0.0.1:8080

Construcciones de estilo CI reproducibles. Container Build inicia un contenedor de utilidades de creación que utiliza BuildKit. Puede dimensionar la máquina virtual del constructor para compilaciones pesadas.

inicio del generador de contenedores –cpus 8 –memoria 32g compilación del contenedor –tag web-test:latest –file Dockerfile

Imágenes de arquitectura cruzada para la implementación de centros de datos. Cree una imagen para servidores Apple Silicon y x86-64. La variante amd64 se ejecuta bajo traducción Rosetta.

compilación del contenedor –arch arm64 –arch amd64 \ –tag registro.example.com/fido/web-test:latest

Montaje de conjuntos de datos para análisis. Comparta una carpeta de host en el contenedor con –volume. Esto es útil para introducir datos locales en un trabajo en contenedores.

ejecución del contenedor –volume ${HOME}/Desktop/assets:/content/assets \ docker.io/python:alpine ls -l /content/assets

Aislar código generado o que no es de confianza. Cada contenedor se ejecuta en su propia VM, no en un kernel compartido. Ese límite se adapta a la ejecución de código desde un agente o una imagen desconocida con menos exposición del host.

Práctica: comandos básicos

Los recursos de contenedor predeterminados son 1 GiB de RAM y 4 CPU. Los anulas por ejecución.

ejecución de contenedor –rm –cpus 8 –memoria 32 g grande

Inspeccione el uso de recursos en vivo, similar a top para procesos.

estadísticas del contenedor –no-stream mi-servidor-web

Lea los registros de inicio y arranque de la máquina virtual al depurar el inicio.

registros de contenedor –boot my-web-server

En macOS 26, puedes crear redes aisladas. Los contenedores de diferentes redes no pueden comunicarse entre sí.

creación de red de contenedores foo –subnet 192.168.100.0/24 ejecución de contenedor -d –name web –network foo –rm web-test

De forma predeterminada, los contenedores comienzan con un conjunto restringido de capacidades de Linux. Los sintonizas explícitamente.

ejecución del contenedor –cap-drop TODOS –cap-add SETUID –cap-add SETGID ID alpino

La versión 1.0.0 también agrega máquinas contenedoras. Estos son entornos Linux persistentes creados a partir de imágenes OCI. Su directorio de inicio está montado y el usuario de inicio de sesión coincide con su cuenta de Mac. El sistema de archivos sobrevive al inicio y al inicio. Cualquier imagen que contenga /sbin/init se considera una máquina contenedora.

Otros dos cambios de la versión 1.0.0 afectan a los actualizadores. La configuración del sistema se movió a un archivo TOML en ~/.config/container/config.toml. Se eliminaron los subcomandos get y set de propiedad del sistema contenedor. La herramienta también agregó salida estructurada JSON, YAML y TOML para enumerar e inspeccionar, lo que facilita la automatización.

Contenedor de Apple frente a Docker Desktop

PropiedadContenedor de AppleEscritorio DockerModelo de aislamientoUna máquina virtual liviana por contenedorMV Linux compartida, kernel compartidoHuella inactivaCerca de cero cuando no se ejecuta nada VM en segundo plano siempre en funcionamientoFormato de imagenCompatible con OCICompatible con OCIMotor de compilaciónBuildKit a través del constructor VMBuildKitLicenciaApache 2.0Términos comerciales para organizaciones más grandesHardwareSolo Apple SiliconApple Silicon e IntelCompose/GUINo integradoSíMejor ajusteEjecuciones de un solo contenedor. aislamiento nativoComponer flujos de trabajo, ecosistema maduro

Fortalezas y limitaciones

Fortalezas: El aislamiento de VM por contenedor reduce la superficie de ataque compartida en comparación con un kernel compartido. El coste de la memoria inactiva es bajo, ya que los contenedores detenidos liberan su huella. La compatibilidad con OCI significa que sus imágenes se ejecutan en otros lugares sin conversión. La licencia Apache 2.0 no incluye ninguna función de muro de pago.

Limitaciones: el marco de virtualización de macOS solo admite un aumento parcial de la memoria. Las páginas liberadas dentro de un contenedor no siempre se entregan al host. Es posible que las cargas de trabajo pesadas necesiten reinicios ocasionales para reducir el uso de memoria. No hay Docker Compose integrado. Los usuarios de macOS 15 enfrentan restricciones de red y las Mac Intel no son compatibles.

Consulte el repositorio aquí. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 150.000 ml y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.

¿Necesita asociarse con nosotros para promocionar su repositorio de GitHub O su página principal de Hugging O su lanzamiento de producto O seminario web, etc.? Conéctate con nosotros