Menú de navegaciónMenú
Categorías
Logo campusMVP.es

La mejor forma de Aprender Programación online y en español www.campusmvp.es

¿El fin de Docker en macOS? Descubre Apple container, la revolución nativa en contenedores

La ejecución de contenedores para desarrollo en macOS ha cambiando. Descubre Apple Container, la innovadora herramienta de código abierto diseñada para transformar la gestión de contenedores en tu Mac. Desarrollada para maximizar la seguridad y el rendimiento, con integración nativa en procesadores Silicon y en macOS y compatible con Docker. Si buscas optimizar tu flujo de trabajo de desarrollo y explorar una alternativa potente para tus proyectos, te explicamos cómo esta nueva herramienta redefine la contenedorización para los usuarios de Apple.

Imagen ornamental

Los contenedores son una tecnología que empaqueta una aplicación y todas sus dependencias en un entorno aislado y portátil, garantizando que funcione de manera consistente en cualquier lugar, desde tu máquina local hasta la nube. Durante años, Docker Desktop ha sido la solución de facto para gestionar contenedores, y en especial en el sistema operativo de Apple, macOS. Aunque en los últimos tiempos Podman ha crecido mucho en uso.

Aquí tienes una comparativa exhaustiva entre Docker y Podman en caso de que te interese 😊

Sin embargo, la forma en que los desarrolladores de macOS construyen y despliegan aplicaciones está a punto de vivir una revolución silenciosa que podría redefinir el panorama de los contenedores. Un nuevo contendiente ha irrumpido en escena, directamente desde la casa de la manzana: Apple Container. Esta herramienta de código abierto, escrita en Swift y diseñada de forma nativa y optimizada para Apple Silicon, promete una experiencia más integrada y eficiente para el uso de contenedores.

¿Podrá esta innovadora solución de Apple realmente reemplazar a Docker Desktop para los desarrolladores de macOS? ¿Qué ventajas concretas ofrece y con qué compromisos tendrían que lidiar los que se decidan a adoptar esta alternativa nativa?

¿Qué es Apple Container?

Apple Container es una nueva herramienta de código abierto creada por Apple que permite crear y ejecutar contenedores Linux estándar en tu Mac. Está escrita completamente en el lenguaje de la casa, Swift, y optimizada de forma nativa para los procesadores Apple Silicon. Su diseño aprovecha la arquitectura de memoria unificada y la eficiencia energética de estos chips para ofrecer una experiencia ligera y de alto rendimiento.

El enfoque central de Container radica en su arquitectura: en lugar de compartir un único kernel del sistema operativo, cada contenedor se ejecuta dentro de su propia máquina virtual (VM) Linux ligera y dedicada. Este modelo se basa en las tecnologías de virtualización nativas de macOS.

Además, Container es compatible con las imágenes OCI (Open Container Initiative). Esto significa que puede consumir y producir imágenes estándar, permitiéndote descargar, ejecutar y subir imágenes a cualquier registro de contenedores compatible con OCI como Docker Hub o GitHub Container Registry.

El proyecto es de código abierto y su código está alojado en GitHub, bajo una licencia Apache-2.0.

Arquitectura y ventajas clave de Apple Container: seguridad y rendimiento redefinidos

La arquitectura de Apple Container es muy diferente a la de los modelos de "contenerización" tradicionales como Docker o Podman, priorizando la seguridad y el rendimiento al aprovechar las capacidades nativas de macOS y los procesadores Apple Silicon, algo a lo que Apple tiene un acceso privilegiado.

Las principales ventajas que ofrece este nuevo modelo son:

  • Máquinas Virtuales Ligeras: a diferencia de Docker Desktop y otros motores de contenedores que normalmente ejecutan todos los contenedores dentro de una única máquina virtual Linux compartida o un kernel del sistema operativo compartido, Apple Container adopta un enfoque diferente en el que cada contenedor se ejecuta dentro de su propia máquina virtual Linux ligera y dedicada.
  • Seguridad mejorada: esta implementación desde cero de contenedores aislados por hipervisor le otorga a la solución un aislamiento muy robusto a nivel de hardware. Esto significa que, si un proceso llegara a escapar de su contenedor, se encontraría en un entorno de VM muy restringido y de propósito único, no en un entorno compartido con acceso a otros contenedores. Así se minimiza una vulnerabilidad fundamental en los motores de contenedores de kernel compartido.
  • Rendimiento optimizado: está escrito en Swift y optimizado nativamente para los procesadores Apple Silicon. Su diseño aprovecha la arquitectura de memoria unificada y la eficiencia energética de estos chips. La herramienta se comunica directamente con el Virtualization framework nativo de macOS, sin necesidad de capas de emulación. Esto permite tiempos de inicio rapidísimos para los contenedores. Aunque hay versiones de Docker Desktop optimizadas para Silicon, la arquitectura de una MV grande compartida implica normalmente una sobrecarga importante.
  • Redes más simples: otra característica interesante de Apple Container es su enfoque en las redes. Cada contenedor recibe su propia dirección IP única. Esto elimina la necesidad del reenvío de puertos tradicional, y nos simplifica la vida, aunque hay que adaptarse a una forma nueva de lidiar con las redes, si estás acostumbrado a Docker.
  • Integración profunda con macOS: el "demonio" del servidor (container-apiserver) es gestionado por launchd, el método estándar para controlar servicios en macOS. Además, utiliza el sistema unificado de registro de macOS para toda su salida de diagnóstico, y aprovecha los servicios de los llaveros (Keychain) para almacenar de forma segura las credenciales de los registros de contenedores.

Apple Container vs. Docker Desktop

Ahora que ya conocemos un poco Apple Container, ya nos podemos hacer una buena idea de las diferencias que conlleva técnicamente el uso de uno u otro en arquitectura, seguridad y rendimiento. Pero no conocemos las capacidades ni las carencias que tiene el nuevo producto frente al líder, Docker Desktop.

Vamos a ver un repaso de los puntos principales:

  • Compatibilidad OCI: ambas opciones son compatibles con las imágenes OCI. Esto significa que puedes descargar, ejecutar y subir imágenes a cualquier registro de contenedores compatible con OCI, como Docker Hub o GitHub Container Registry, tanto con Docker como con Apple Containers.
  • Volúmenes: ambas tecnologías soportan el montaje de directorios del host dentro del contenedor (-volume) para facilitar los flujos de trabajo de desarrollo.
  • Comandos: Apple Container ofrece comandos intuitivos como container build (con soporte para Dockerfiles), container run, container ls, container exec, container images list, container registry login, y container images push. O sea, compatibles con los de Docker, pero con su propio comando de base (container frente a docker), lo que facilita mucho su adopción.
  • Carencias: Apple Container permite la gestión de recursos (CPU, memoria) para el constructor y los contenedores. Soporta construcciones multiplataforma (--arch arm64 --arch amd64), pero carece de algunas funcionalidades indispensables para muchos, como Docker Compose para la gestión de proyectos multicontenedor. Además, ahora mismo la comunicación directa entre contenedores no es posible.
  • Licencias: el proyecto de Apple es de código abierto con licencia Apache 2.0 (muy permisiva), mientras que Docker Desktop es una solución comercial que, aunque es gratuito para uso personal o de PYMES, su modelo de licencia requiere un pago para uso comercial en ciertos casos.

Apple Container representa una alternativa prometedora para los desarrolladores de macOS. Su arquitectura de VM por contenedor y la integración profunda con macOS son sus principales diferenciadores. Sin embargo, sus limitaciones actuales, como la falta de Docker Compose y la inmadurez del proyecto, pueden restringir su adopción para flujos de trabajo complejos por el momento. A medida que Apple continúe desarrollando y mejorando este producto, tiene el potencial de convertirse en una solución más completa para la gestión de contenedores en macOS.

Primeros pasos con Apple Container

Para comenzar a usar Container, necesitarás un Mac con procesador Apple Silicon. Aunque puedes ejecutar la herramienta desde macOS 15 (Sonoma), su rendimiento óptimo y la resolución de problemas se garantizan principalmente en la beta de macOS 26 (que se lanzará oficialmente en otoño).

Además, el proyecto Container está actualmente en desarrollo activo, lo que significa que su estabilidad no está garantizada, y las nuevas versiones pueden introducir cambios importantes hasta que se alcance la versión 1.0.0.

Paso 1: Instalación y configuración

  1. Descargar el instalador: obtén el último paquete de instalación firmado, desde la página de "releases" de GitHub del proyecto. También está disponible a través de Homebrew. Necesitarás permisos de administrador.
  2. Iniciar el servicio del sistema: abre tu terminal e inicia el "demonio" del servidor container-apiserver ejecutando el siguiente comando: container system start La primera vez que lo ejecutes, te pedirá descargar e instalar un kernel Linux por defecto.
  3. Verificar la instalación: comprueba que el servicio se está ejecutando correctamente listando todos los contenedores disponibles (inicialmente no debería haber ninguno): container ls -a Deberías ver solo las cabeceras sin nada más.

Paso 2: Construir tu primera imagen

Como ya hemos dicho, container es compatible con las imágenes OCI , así que puedes usar archivos Dockerfile "normales" para definir tus imágenes.

  1. Crea un directorio de proyecto: mkdir web-test cd web-test

  2. Crea un Dockerfile: dentro del directorio web-test, crea un archivo llamado Dockerfile (o Containerfile) con el siguiente contenido para un servidor web simple de Python:

    # Empezamos con una imagen base de Linux con Python ligera
    FROM docker.io/python:alpine
    
    # Establece el directorio de trabajo dentro del contenedor
    WORKDIR /content
    
    # Agrega la utilidad 'curl' para pruebas
    RUN apk add curl
    
    # Crea un archivo HTML sencillo
    RUN echo '<!DOCTYPE html><html><head><title>Hola desde mi contenedor</title></head><body><h1>¡Hola, Apple Container!</h1></body></html>' > index.html
    
    # Comando a ejecutar cuando se inicie el contenedor
    CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]
    
  3. Construye la imagen: ahora, construye una imagen a partir de tu Dockerfile. La etiquetaremos con el nombre "web-test": container build --tag web-test --file Dockerfile . El punto (.) al final le indica al constructor que use el directorio actual como su contexto.

  4. Lista tus imágenes: una vez completada la construcción, puedes ver tu nueva imagen en el almacén de imágenes local: container images list  Deberías ver tu imagen "web-test" y la imagen base "python:alpine".

Paso 3: Ejecutar tu contenedor

Como sabes, una de las características distintivas de container es que cada contenedor se ejecuta en su propia máquina virtual Linux ligera y dedicada, y cada contenedor recibe su propia dirección IP única, eliminando la necesidad del reenvío de puertos tradicional. Vamos a comprobarlo:

  1. Ejecuta el servidor web: usa el comando container run para iniciar un contenedor a partir de tu imagen: container run --name mi-servidor-web --detach --rm web-test

    • --name: le da un nombre fácil de recordar a nuestro contenedor.
    • --detach (o -d): ejecuta el contenedor en segundo plano.
    • --rm: elimina automáticamente el registro del contenedor cuando se detiene, manteniendo el sistema ordenado.
  2. Comprueba el contenedor en ejecución: lista los contenedores activos: container ls Verás tu contenedor "my-web-server" en estado "running", junto con su dirección IP asignada en la columna "ADDR" (por ejemplo, 192.168.64.3).

  3. Accede a tu servidor web: abre un navegador web y visita la dirección IP mostrada en el paso anterior. Deberías ver tu mensaje de saludo.

Paso 4: Interactuar con el contenedor

Apple Container ofrece herramientas para interactuar directamente con tus contenedores en ejecución:

  1. Ejecutar un comando: puedes ejecutar comandos directamente dentro del contenedor usando container exec. Por ejemplo, para listar los archivos en el directorio de contenido de tu servidor web: container exec mi-servidor-web ls /content.
  2. Abrir una shell interactiva: para depuraciones más complejas, puedes obtener una shell interactiva dentro del contenedor: container exec -it mi-servidor-web sh. Los "flags" -it (--interactive y --tty) son importantes para conectar tu terminal a la shell dentro del contenedor. Una vez dentro, puedes lanzar algunos comandos de prueba y luego escribir exit para volver a tu terminal de Mac local.

Paso 5: Publicar tu imagen

Puedes subir tus imágenes a cualquier registro de contenedores compatible con OCI, como Docker Hub o GitHub Container Registry.

  1. Iniciar sesión en el registro: container registry login docker.io Esto te pedirá tu nombre de usuario y contraseña/token.
  2. Etiquetar la imagen para publicar: los registros requieren que las imágenes se nombren en el formato registro/nombredeusuario/imagen:etiqueta. Crea una nueva etiqueta para tu imagen (reemplaza "pepe" con tu nombre de usuario): container images tag web-test docker.io/pepe/web-test:latest
  3. Subir la imagen: container images push docker.io/fido/web-test:latest. Tu imagen ya está disponible para que otros la descarguen y ejecuten, en cualquier plataforma compatible con OCI, incluyendo Docker o Podman.

Paso 6: Limpieza

Una vez que hayas terminado, puedes detener el contenedor y apagar el servicio:

  1. Detener el contenedor: container stop my-web-server

  2. Detener todos los servicios de Apple Container: container system stop

  3. Desinstalar Apple Container (opcional): utiliza el script uninstall-container.sh para eliminar la herramienta de tu sistema:

    • Para eliminar los datos junto con la herramienta: uninstall-container.sh -d.
    • Para conservar los datos (por si reinstalas más tarde): uninstall-container.sh -k.

Más allá de lo básico

  • Gestión de recursos: puedes controlar los recursos (CPU, memoria) asignados tanto al constructor como a los contenedores. Por ejemplo, para dar más RAM y CPUs al constructor: container builder start --cpus 8 --memory 16g
  • Compartir archivos (Volúmenes): puedes montar un directorio de tu Mac dentro del contenedor usando la bandera --volume, lo cual es necesario para flujos de trabajo de desarrollo donde editas código en el host (el Mac) y ves los cambios en el contenedor. container run --volume ${HOME}/my-project:/app my-image
  • Builds multiplataforma: puedes construir imágenes que se ejecuten tanto en arquitecturas Apple Silicon (arm64) como Intel (amd64) en un solo comando, ideal para despliegues en entornos de servidor diversos. container build --arch arm64 --arch amd64 --tag my-multi-arch-image .
  • Inspección avanzada: el comando container inspect proporciona información detallada en formato JSON sobre contenedores e imágenes, útil para scripting y automatización.

Conclusiones y futuro

Conclusiones

Apple Container surge como una innovación muy importante en el ámbito de la contenerización para macOS. Su principal avance es la ejecución de cada contenedor Linux dentro de una máquina virtual (VM) ligera y dedicada, un cambio de paradigma que valida el aislamiento a nivel de hipervisor como el futuro de la seguridad en contenedores. Y su principal ventaja es el enorme rendimiento que ofrece en hardware nativo de Apple.

Su adhesión a los estándares OCI asegura su compatibilidad e interoperabilidad con cualquier registro de contenedores estándar y con flujos de trabajo existentes de CI/CD, por lo que no tienes que aprender (casi) nada nuevo.

Aunque aún está en desarrollo activo con algunas limitaciones (la más importante la ausencia de Docker Compose y de comunicación directa entre contenedores), su base es robusta y se espera una rápida evolución, especialmente con la llegada de macOS 26 Tahoe para otoño.

En definitiva, Apple Container no es tan solo una nueva herramienta: es una visión de futuro más segura, rápida y bien integrada para trabajar con contenedores en macOS.

Le seguiremos la pista muy de cerca...

campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP
Archivado en: Herramientas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.