Oxcart Descargar
Menú

Desarrollar para Azure Container Apps y AKS en local desde un Mac

Obtén resultados rápidos sobre tus cargas de trabajo de Azure antes de desplegar: ejecuta las imágenes de tu app con Docker Compose en tu Mac, usa Azurite para Azure Storage y envía a Azure Container Registry cuando estés listo. Oxcart ejecuta tus servicios locales e imágenes amd64 de Azure Functions mediante Rosetta, mientras kubectl y k9s conectan tu Mac con AKS.

Actualizado

Qué se ejecuta y dónde

Servicios de contenedores Azure y sus equivalentes locales en Oxcart
Servicio AzureEquivalente localTu flujo de trabajo local
Container AppsDocker Compose con las imágenes de la appEjecutar tus servicios juntos con comprobaciones de salud y puertos publicados
Blob StorageAzuriteUsar Blob Storage local en el puerto 10000
Azure Functions (contenedor)Imagen base de FunctionsEjecutar la imagen amd64 de Functions mediante Rosetta
AKSkubectl y k9s contra AKS; kwok para una API localCompilar y probar en local, después usar kubectl y k9s con tu clúster

Container Apps: prueba los contenedores, no un simulador

Una Container App ejecuta uno o varios contenedores con variables de entorno, secretos, un puerto de entrada, sondas y reglas de escalado. Los contenedores son la parte que puede fallar, y se comportan igual en tu Mac que en Azure cuando ejecutas la misma imagen. Las reglas de escalado, revisiones e identidad administrada se quedan en Azure; todo lo que hay dentro del contenedor puedes probarlo en local.

Ejecutar en local los contenedores de una Azure Container App con Compose y Azurite

  1. Describe la app en Compose. Escribe un servicio Compose por contenedor de tu Container App (el principal y los sidecars), con las mismas imágenes, variables de entorno, puerto de entrada y sondas de salud.
  2. Añade Azurite para almacenamiento. Añade un servicio de mcr.microsoft.com/azure-storage/azurite que publique los puertos 10000 (Blob), 10001 (Queue) y 10002 (Table), y dirige hacia él la cadena de conexión de almacenamiento de la app.
  3. Fija amd64 donde sea necesario. Establece platform: linux/amd64 en cualquier servicio cuya imagen no tenga compilación arm64, como las imágenes base de Azure Functions. Se ejecutará mediante Rosetta.
  4. Inicia y espera. Ejecuta docker compose up -d --wait. Termina cuando todos los servicios con comprobación de salud están saludables.
  5. Prueba y después envía. Llama a la app en localhost. Cuando funcione, inicia sesión con az acr login --name REGISTRY, etiqueta la imagen y envíala con docker push para Container Apps o AKS.
services:
  web:
    image: myregistry.azurecr.io/web:2.1.0
    environment:
      AZURE_STORAGE_CONNECTION_STRING: >-
        DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=REPLACE_WITH_AZURITE_DEV_KEY;BlobEndpoint=http://azurite:10000/devstoreaccount1;
    ports: ["8080:8080"]
    depends_on: [azurite]
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    ports: ["10000:10000", "10001:10001", "10002:10002"]

La clave conocida de la cuenta de desarrollo de Azurite está en la documentación de Azurite de Microsoft; cópiala desde allí. Dentro de la red Compose, la app llega a Azurite por el nombre de servicio (azurite:10000), y desde tu Mac está en localhost:10000.

Azurite en Oxcart

Azurite es el emulador de código abierto de Azure Storage de Microsoft, con Blob, Queue y Table (Table en versión preliminar) en los puertos 10000 a 10002. Iniciamos el servicio Blob y lo llamamos desde el Mac:

docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite \
  azurite-blob --blobHost 0.0.0.0
curl -i "http://127.0.0.1:10000/devstoreaccount1?comp=list"
# 403 AuthorizationFailure, Server: Azurite-Blob/3.37.0  (expected for an unsigned request)

El código 403 es la respuesta correcta a una solicitud sin firma: el endpoint está activo y es accesible. Tu SDK, con la cadena de conexión de desarrollo, firma sus solicitudes.

Azure Functions en un contenedor

Las imágenes base de Azure Functions que probamos solo publican una compilación amd64, así que una compilación normal en un Mac con chip de Apple falla con «no match for platform in manifest». Compílalas y ejecútalas como linux/amd64; Oxcart las ejecuta mediante Rosetta:

# Dockerfile
FROM mcr.microsoft.com/azure-functions/python:4-python3.12
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    AzureWebJobsFeatureFlags=EnableWorkerIndexing
COPY . /home/site/wwwroot

docker build --platform linux/amd64 -t my-func .
docker run -d --platform linux/amd64 -p 7071:80 my-func
curl localhost:7071/api/hello

En nuestra ejecución, una función activada por HTTP respondió desde x86_64 unos 13 segundos después de docker run, y el registro del host de Functions mostró la ruta asignada y la llamada correcta. Pasa también --platform linux/amd64 a docker run: una imagen local solo para amd64 únicamente se encuentra cuando se indica la plataforma. Azure Functions Core Tools puede desplegar después la misma imagen con func azurecontainerapps deploy o func kubernetes deploy.

Enviar a Azure Container Registry

az acr login --name myregistry
docker buildx build --platform linux/amd64 --load -t myregistry.azurecr.io/web:2.1.0 .
docker push myregistry.azurecr.io/web:2.1.0

Compila para la arquitectura que use tu entorno Container Apps o tu grupo de nodos AKS. No se admite enviar una imagen multiplataforma desde Oxcart, así que envía una etiqueta por arquitectura o publica manifiestos multi-arquitectura desde la CI.

AKS desde tu Mac

az aks get-credentials --resource-group RG --name CLUSTER añade AKS a tu kubeconfig para que puedas usar kubectl y k9s desde macOS. Desarrolla tus servicios en local con Oxcart y despliega las mismas imágenes en AKS. Para probar API y controladores en local, kwok se ejecuta en Oxcart con un plano de control real y nodos simulados. Consulta estos flujos de trabajo en la guía de Kubernetes en Mac.

Por qué ejecutarlo en Oxcart

Las pruebas locales solo compensan si el ciclo es corto. Oxcart registró 42 ms para docker run --rm y 77 ms para detener y eliminar 20 contenedores, los mejores resultados de los tres entornos que probamos. Tu Mac abre las conexiones salientes de los contenedores, así que una VPN o una ruta a un endpoint privado de tu red Azure también se aplica a ellas. Consulta Redes de contenedores en Mac.

Preguntas

¿Existe un emulador local de Azure Container Apps?

No encontramos un emulador local oficial de Container Apps en la documentación de Microsoft a octubre de 2026; Microsoft remite a az containerapp up para desplegar desde código fuente local y a Aspire para la orquestación local. Una Container App es un conjunto de contenedores, así que su equivalente local práctico son los mismos contenedores en un proyecto Compose, con Azurite para almacenamiento.

¿Azurite funciona en un Mac con chip de Apple?

Sí. En Oxcart, docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 inició Azurite 3.37.0 y su endpoint Blob respondió en localhost:10000.

¿Puedo ejecutar Azure Functions en un contenedor en Mac?

Sí, con --platform linux/amd64. La imagen base de Python de Azure Functions que probamos (mcr.microsoft.com/azure-functions/python:4-python3.12) no tiene compilación arm64, así que una compilación normal falla con «no match for platform in manifest». Compilada y ejecutada como linux/amd64 en Oxcart, funcionó mediante Rosetta y una función activada por HTTP respondió en localhost.

¿Cómo envío imágenes a Azure Container Registry desde un Mac?

Ejecuta az acr login --name REGISTRY, después docker tag y docker push REGISTRY.azurecr.io/app:TAG. En Oxcart, las credenciales guardadas mediante docker login van al Llavero de macOS.

¿Cómo desarrollo para AKS en mi Mac?

Compila y prueba tu app y sus dependencias en local con Oxcart. Conecta kubectl y k9s a AKS con az aks get-credentials y usa kwok en Oxcart para comprobar manifiestos contra una API Kubernetes local con nodos simulados. Consulta Kubernetes en Mac.

¿Y el emulador de Cosmos DB?

Microsoft publica una imagen del emulador de Cosmos DB basada en Linux (vNext, API para NoSQL). No la hemos probado en Oxcart, así que pruébala con tu proyecto durante el periodo gratuito antes de depender de ella.

Fuentes y método

  • Ejemplos probados con Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Blob de Azurite 3.37.0, imagen Python 4 de Azure Functions como linux/amd64 y Compose).
  • Azurite: https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite. Azure Functions Core Tools: https://learn.microsoft.com/en-us/azure/azure-functions/functions-run-local. Container Apps (no se encontró emulador local): https://learn.microsoft.com/en-us/azure/container-apps/quickstart-code-to-cloud. Emulador Linux de Cosmos DB: https://learn.microsoft.com/en-us/azure/cosmos-db/emulator-linux. Comprobado el 2026-10-10.
  • Velocidad de los contenedores: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU y 12 GiB, medianas de cinco muestras; los otros entornos se midieron antes ese mismo día en el mismo Mac, con el mismo sistema de medición y el cliente docker 29.4.

Prueba Oxcart con tus propios proyectos

Gratis durante 60 días. Después, $20 por persona y por versión principal, sin suscripción.

Apple silicon · macOS 26 o posterior

Sigue leyendo

Notas de la versión

Oxcart 0.1.4

Última versión

Licencias y mejoras.

  • Activación de licencias mediante un enlace seguro enviado por correo electrónico.
  • Gestión de licencias y Mac desde Settings.
  • Verificación de licencias sin conexión.
  • Mejoras de rendimiento, ajustes de la interfaz y correcciones de errores.

Requiere macOS 26.0 o posterior

Oxcart 0.1.3

Recuperación de memoria en reposo.

  • Recupera memoria de la VM cuando no hay contenedores en ejecución.
  • Conserva los contenedores, las imágenes, los volúmenes y las redes.

Requiere macOS 26.0 o posterior

Oxcart 0.1.2

Integración de herramientas de línea de comandos.

  • Alterna entre las herramientas Docker incluidas con Oxcart y una instalación existente.
  • Ajustes de la interfaz.

Requiere macOS 26.0 o posterior

Oxcart 0.1.1

Herramientas Docker incluidas y controles para agentes.

  • Docker CLI 29.9, Compose 5.6 y Buildx 0.38 incluidos.
  • Integración con contextos de Docker y credenciales seguras en el Llavero.
  • Conexiones de agentes MCP con permisos y bloqueo por agente.

Requiere macOS 26.0 o posterior

Oxcart 0.1.0

Contenedores compatibles con Docker para Apple silicon.

  • Compatibilidad con Docker CLI, Compose y Buildx.
  • Configuración sin conexión con los componentes de ejecución incluidos.
  • Puertos organizados por proyecto y rama de Git.
  • Integración MCP con acceso de solo lectura de forma predeterminada.
  • Actualizaciones automáticas verificadas.

Requiere macOS 26.0 o posterior