Los contenedores se han convertido en una herramienta indispensable. Ofrecen portabilidad, consistencia y eficiencia, permitiendo a los desarrolladores construir e implementar aplicaciones de forma fiable en diferentes entornos. Durante años, Docker ha sido el estándar de facto en macOS, pero un nuevo contendiente, nacido directamente de Apple, está listo para ofrecer una experiencia más nativa, integrada y optimizada para los desarrolladores en Apple Silicon: container
.
container
es una nueva herramienta de código abierto de Apple que te permite crear y ejecutar contenedores Linux estándar y compatibles con OCI en tu Mac. Escrita completamente en Swift y optimizada para Apple Silicon, está diseñada para ser una alternativa ligera y de alto rendimiento a otros tiempos de ejecución de contenedores. Aprovecha las propias tecnologías de virtualización de macOS para ejecutar contenedores como máquinas virtuales mínimas y aisladas, prometiendo una mayor seguridad y una menor huella.
Este artículo ofrece una inmersión profunda en el proyecto container
de Apple. Exploraremos su arquitectura, sus principales beneficios y luego te guiaremos a través de un tutorial completo sobre cómo construir, ejecutar y compartir tu primera aplicación en contenedores. Tanto si eres un desarrollador backend experimentado como un usuario de Mac curioso, encontrarás todo lo que necesitas para empezar con esta emocionante nueva herramienta.
¿Quieres una plataforma integrada y todo en uno para que tu equipo de desarrolladores trabaje en conjunto con la máxima productividad?
Apidog cumple con todas tus demandas, ¡y reemplaza a Postman a un precio mucho más asequible!
¿Por qué una nueva herramienta de contenedores? La visión detrás de container
En un panorama dominado por actores establecidos, ¿por qué decidió Apple construir su propia herramienta de contenedores? La respuesta reside en una visión para una experiencia profundamente integrada, de alto rendimiento y amigable para los desarrolladores en su propio hardware y software. container
no es solo otro clon de Docker; es una re-imaginación de lo que la contenerización puede ser en un Mac.
Rendimiento nativo en Apple Silicon
A diferencia de otras soluciones que pueden depender de máquinas virtuales Linux más pesadas o capas de compatibilidad multiplataforma, container
está construido desde cero para Apple Silicon. Es una aplicación Swift que se comunica directamente con el Virtualization.framework
nativo de Apple. Esto resulta en una ventaja de rendimiento significativa. No hay una capa de emulación como Rosetta 2 involucrada para el propio tiempo de ejecución, y cada contenedor se ejecuta en su propia VM ligera, arrancando en una fracción del tiempo que tarda en iniciar una máquina virtual completa.
Una arquitectura singularmente segura
La seguridad es una piedra angular del diseño de container
. La descripción técnica revela una decisión arquitectónica clave: en lugar de ejecutar todos los contenedores dentro de una única VM Linux compartida, container
inicia una micro-VM dedicada y mínima para cada contenedor.
Este modelo de "una VM por contenedor" proporciona un aislamiento robusto a nivel de hardware. Un proceso que escape de su contenedor se encontraría dentro de una VM muy restringida y de propósito único, no en un entorno compartido con acceso a otros contenedores. Esto reduce significativamente la superficie de ataque potencial y mejora la postura de seguridad general de tu entorno de desarrollo.
Compatibilidad con OCI: Llevándose bien con otros
A pesar de su arquitectura única, container
adopta completamente los estándares abiertos. Consume y produce imágenes compatibles con Open Container Initiative (OCI). Esta es una característica fundamental, ya que significa que no estás atado a un ecosistema propietario. Puedes descargar una imagen estándar de Docker Hub, ejecutarla con container
, construir una nueva imagen y subirla a cualquier registro compatible con OCI como GitHub Container Registry (ghcr.io). Tus imágenes construidas con container
funcionarán sin problemas en otras herramientas y en pipelines de CI/CD de producción.
Integración profunda con macOS
container
es un buen ciudadano en macOS. Se integra con las tecnologías centrales del sistema para proporcionar una experiencia de usuario fluida:
- Virtualización y Redes: Utiliza
Virtualization.framework
yvmnet
para una gestión eficiente de VM y redes. - Gestión de Servicios: El demonio
container-apiserver
es gestionado porlaunchd
, la forma estándar de gestionar servicios en macOS. - Seguridad: Aprovecha los servicios de Keychain para almacenar credenciales de registro de forma segura.
- Registro (Logging): Se integra con el sistema unificado de registro de macOS, por lo que toda su salida de diagnóstico está en un lugar familiar.
Bajo el capó: Una rápida inmersión técnica profunda
La herramienta de línea de comandos container
(container
) es un cliente que se comunica con un proceso de servidor en segundo plano, container-apiserver
. Este servidor, que inicias con container system start
, gestiona todo.
Cuando emites un comando como container run
, el servidor API inicia un ayudante de tiempo de ejecución dedicado (container-runtime-linux
) para ese contenedor específico. Este ayudante, a su vez, utiliza el Virtualization.framework
para poner en marcha una nueva y mínima VM Linux que aloja los procesos de tu contenedor. Esta arquitectura es elegante, robusta y está diseñada para la seguridad y el rendimiento.
Es importante señalar que, como proyecto nuevo, container
tiene algunas limitaciones. Requiere una versión moderna de macOS (macOS 15, con el mejor rendimiento en la última macOS 26 Beta 1). La conexión de red entre los contenedores y el host tiene algunas soluciones específicas, y características avanzadas como el memory ballooning aún están en desarrollo. Sin embargo, la base es sólida y el proyecto está evolucionando rápidamente.
Cómo usar container
: Un tutorial paso a paso
Manos a la obra. Este tutorial te guiará a través de todo el ciclo de vida de un contenedor: construir una imagen para un servidor web simple, ejecutarla, interactuar con ella y publicarla.
Paso 1: Instalación y Configuración
Primero, asegúrate de cumplir los requisitos: un Mac con Apple Silicon ejecutando una versión reciente de macOS.
Instalar container
: Descarga el último paquete de instalación firmado desde la página de lanzamientos de GitHub del proyecto. Haz doble clic en el archivo .pkg
y sigue las indicaciones de instalación.
Iniciar el Servicio: Abre tu terminal e inicia los servicios del sistema container
.
container system start
La primera vez que ejecutes esto, es probable que te pida descargar e instalar un kernel Linux por defecto. Escribe y
y presiona Enter para continuar.
Verificar la Instalación: Comprueba que el servicio se está ejecutando listando todos los contenedores disponibles (que no deberían ser ninguno en este punto).
container ls -a
# You should see empty headers:
# ID IMAGE OS ARCH STATE ADDR
Paso 2: Construir tu Primera Imagen
Ahora, vamos a crear una imagen de contenedor para un servidor web simple de Python.
Crear un Directorio de Proyecto:
mkdir web-test
cd web-test
Crear un Dockerfile
: Dentro del directorio web-test
, crea un archivo llamado Dockerfile
(o Containerfile
) con el siguiente contenido. Este archivo define la "receta" para nuestra imagen.
# Start from a lightweight Python base image
FROM docker.io/python:alpine
# Set the working directory inside the container
WORKDIR /content
# Add the 'curl' utility for testing
RUN apk add curl
# Create a simple HTML file
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html
# The command to run when the container starts
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]
Construir la Imagen: Ahora, dile a container
que construya una imagen a partir de tu Dockerfile
. La etiquetaremos con el nombre web-test
.
container build --tag web-test --file Dockerfile .
El .
al final le dice al constructor que use el directorio actual como su contexto.
Listar 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
# You should see your `web-test` image and the `python:alpine` base image.
# NAME TAG DIGEST
# python alpine b4d299311845...
# web-test latest 25b99501f174...
Paso 3: Ejecutar tu Contenedor
Con nuestra imagen construida, vamos a ejecutarla.
Ejecutar el Servidor Web: Usa el comando container run
para iniciar un contenedor a partir de tu imagen web-test
.
container run --name my-web-server --detach --rm web-test
Analicemos esas banderas:
-name my-web-server
: Le da a nuestro contenedor un nombre fácil de recordar.-detach
(od
): Ejecuta el contenedor en segundo plano.-rm
: Elimina automáticamente el registro del contenedor cuando se detiene, manteniendo las cosas ordenadas.
Comprobar 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
).
Acceder a tu Servidor Web: Abre un navegador web y navega a la dirección IP mostrada en el paso anterior. Deberías ver tu mensaje "Hello, Apple Container!".
# Replace the IP with the one from `container ls`
open <http://192.168.64.3>
Paso 4: Interactuar con el Contenedor
container
proporciona herramientas potentes para interactuar con tus contenedores en ejecución.
Ejecutar un Comando: Puedes ejecutar comandos directamente dentro del contenedor usando container exec
. Vamos a listar los archivos en el directorio de contenido de nuestro servidor web.
container exec my-web-server ls /content
# Output: index.html
Abrir una Shell Interactiva: Para depuraciones más complejas, puedes obtener una shell interactiva dentro del contenedor.
container exec -it my-web-server sh
Las banderas -it
(--interactive
y --tty
) son cruciales para conectar tu terminal a la shell dentro del contenedor. Entrarás en un prompt de shell dentro del WORKDIR
de tu contenedor. Puedes mirar alrededor, comprobar procesos y luego escribir exit
para volver al terminal de tu Mac.
Paso 5: Publicar tu Imagen
Compartir tu trabajo es fácil. Vamos a subir nuestra imagen a un registro de contenedores. Este ejemplo usa Docker Hub, pero cualquier registro OCI funcionará. (Esto asume que tienes una cuenta de Docker Hub con nombre de usuario fido
).
Iniciar Sesión en el Registro:
# This will prompt for your username and password/token
container registry login docker.io
Etiquetar la Imagen para Publicar: Los registros requieren que las imágenes se nombren en formato registro/nombredeusuario/imagen:etiqueta
. Vamos a crear una nueva etiqueta para nuestra imagen.
container images tag web-test docker.io/fido/web-test:latest
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!
Paso 6: Limpieza
Una vez que hayas terminado, puedes detener el contenedor y apagar el servicio.
# Stop the container
container stop my-web-server
# Stop all container services
container system stop
Más allá de lo básico
El tutorial cubre el flujo de trabajo principal, pero container
puede hacer más. Aquí tienes algunas características de la documentación how-to.md
:
Gestión de Recursos: Puedes controlar los recursos asignados a tus contenedores. Para construcciones que requieren mucha memoria, puedes dar al constructor más RAM y CPUs:
container builder start --cpus 8 --memory 16g
Compartir Archivos: Puedes montar un directorio de tu Mac dentro del contenedor usando la bandera -volume
, lo cual es esencial para flujos de trabajo de desarrollo donde quieres editar código en el host y ver los cambios en vivo en el contenedor.
container run --volume ${HOME}/my-project:/app my-image
Construcciones Multiplataforma: Puedes construir imágenes que se ejecuten tanto en arquitecturas Apple Silicon (arm64
) como Intel (amd64
) en un solo comando, perfecto para desplegar 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, lo cual es útil para scripting y automatización.
Conclusión
container
de Apple es más que una simple herramienta nueva; es una declaración. Señala un compromiso con la provisión de herramientas para desarrolladores de primera clase e integradas para la era moderna del desarrollo cloud-native. Al construir un tiempo de ejecución de contenedores ligero, seguro y de alto rendimiento directamente en el sistema operativo, Apple está reduciendo la barrera de entrada para la contenerización en el Mac y ofreciendo una alternativa convincente a las soluciones existentes.
Si bien el proyecto aún es joven, su base es sólida, su arquitectura es robusta y su adhesión a los estándares abiertos garantiza que será un actor valioso en el ecosistema de contenedores más amplio. Si eres un desarrollador en un Mac con Apple Silicon, container
es un proyecto que deberías seguir —y probar— hoy mismo.
¿Quieres una plataforma integrada y todo en uno para que tu equipo de desarrolladores trabaje en conjunto con la máxima productividad?
Apidog cumple con todas tus demandas, ¡y reemplaza a Postman a un precio mucho más asequible!