Oxcart Herunterladen
Menü

Lokal auf dem Mac für Azure Container Apps und AKS entwickeln

Erhalte schnelle Rückmeldung zu Azure-Workloads vor dem Deployment: Führe die Images deiner App mit Docker Compose auf deinem Mac aus, nutze Azurite für Azure Storage und pushe nach Azure Container Registry, wenn du bereit bist. Oxcart führt deine lokalen Services und amd64-Images von Azure Functions über Rosetta aus, während kubectl und k9s deinen Mac mit AKS verbinden.

Aktualisiert

Was wo läuft

Azure-Containerdienste und ihre lokalen Entsprechungen auf Oxcart
Azure-DienstLokale EntsprechungDein lokaler Workflow
Container AppsDocker Compose mit den Images der AppServices gemeinsam mit Healthchecks und veröffentlichten Ports ausführen
Blob StorageAzuriteLokalen Blob Storage auf Port 10000 verwenden
Azure Functions (Container)Functions-BasisimageDas amd64-Functions-Image über Rosetta ausführen
AKSkubectl und k9s mit AKS; kwok für eine lokale APILokal bauen und testen, dann kubectl und k9s mit deinem Cluster verwenden

Container Apps: Die Container testen, nicht einen Simulator

Eine Container App führt einen oder mehrere Container mit Umgebungsvariablen, Geheimnissen, einem Ingress-Port, Zustandsprüfungen und Skalierungsregeln aus. Die Container sind der Teil, in dem Fehler auftreten, und sie verhalten sich auf deinem Mac wie in Azure, wenn du dasselbe Image ausführst. Skalierungsregeln, Revisionen und verwaltete Identitäten bleiben in Azure; alles innerhalb des Containers kannst du lokal testen.

Die Container einer Azure Container App lokal mit Compose und Azurite ausführen

  1. Beschreibe die App in Compose. Schreibe einen Compose-Service pro Container deiner Container App (Hauptcontainer und alle Sidecars), mit denselben Images, Umgebungsvariablen, Ingress-Port und Zustandsprüfungen.
  2. Füge Azurite für den Speicher hinzu. Füge einen Service auf Basis von mcr.microsoft.com/azure-storage/azurite hinzu, der die Ports 10000 (Blob), 10001 (Queue) und 10002 (Table) veröffentlicht, und richte die Speicher-Verbindungszeichenfolge der App darauf aus.
  3. Lege bei Bedarf amd64 fest. Setze platform: linux/amd64 bei jedem Service, dessen Image keinen arm64-Build hat, etwa den Basisimages von Azure Functions. Es läuft über Rosetta.
  4. Starte und warte. Führe docker compose up -d --wait aus. Der Befehl kehrt zurück, wenn jeder Service mit Healthcheck gesund ist.
  5. Teste und pushe dann. Rufe die App auf localhost auf. Wenn sie funktioniert, melde dich mit az acr login --name REGISTRY an, vergib einen Tag für das Image und pushe es mit docker push für Container Apps oder 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"]

Azurites allgemein bekannter Kontoschlüssel für die Entwicklung steht in Microsofts Azurite-Dokumentation; kopiere ihn von dort. Innerhalb des Compose-Netzwerks erreicht die App Azurite über den Servicenamen (azurite:10000), von deinem Mac aus über localhost:10000.

Azurite auf Oxcart

Azurite ist Microsofts quelloffener Azure-Storage-Emulator mit Blob, Queue und Table (Table als Vorschau) auf den Ports 10000 bis 10002. Wir haben den Blob-Dienst gestartet und vom Mac aus aufgerufen:

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)

403 ist die richtige Antwort auf eine Anfrage ohne Signatur: Der Endpunkt läuft und ist erreichbar. Dein SDK signiert seine Anfragen mit der Entwicklungs-Verbindungszeichenfolge.

Azure Functions in einem Container

Die von uns getesteten Azure-Functions-Basisimages bieten nur einen amd64-Build. Ein gewöhnlicher Build auf einem Mac mit Apple-Chip scheitert daher mit „no match for platform in manifest“. Baue und starte sie als linux/amd64; Oxcart führt sie über Rosetta aus:

# 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

In unserem Durchlauf antwortete eine per HTTP ausgelöste Funktion von x86_64 etwa 13 Sekunden nach docker run. Das Log des Functions-Hosts zeigte die zugeordnete Route und den erfolgreichen Aufruf. Übergib --platform linux/amd64 auch an docker run: Ein lokal gebautes, nur für amd64 verfügbares Image wird nur gefunden, wenn die Plattform angegeben ist. Azure Functions Core Tools kann dasselbe Image anschließend mit func azurecontainerapps deploy oder func kubernetes deploy bereitstellen.

Nach Azure Container Registry pushen

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

Baue für die Architektur deiner Container-Apps-Umgebung oder deines AKS-Node-Pools. Das Pushen eines Images für mehrere Plattformen aus Oxcart wird nicht unterstützt. Pushe daher einen Tag pro Architektur oder veröffentliche Manifeste für mehrere Architekturen aus CI.

AKS von deinem Mac aus

az aks get-credentials --resource-group RG --name CLUSTER fügt AKS deiner kubeconfig hinzu, damit du kubectl und k9s von macOS aus verwenden kannst. Entwickle deine Services lokal mit Oxcart und stelle dieselben Images auf AKS bereit. Für lokale API- und Controller-Tests läuft kwok auf Oxcart mit einer echten Control Plane und simulierten Nodes. Diese Workflows findest du in der Anleitung zu Kubernetes auf dem Mac.

Warum Oxcart dafür nutzen

Lokale Tests lohnen sich nur, wenn der Zyklus kurz ist. Oxcart erreichte 42 ms für docker run --rm und 77 ms zum Stoppen und Entfernen von 20 Containern, am schnellsten unter den drei getesteten Laufzeitumgebungen. Ausgehende Verbindungen von Containern werden von deinem Mac geöffnet. Ein VPN oder eine Route zu einem privaten Endpunkt in deinem Azure-Netzwerk gilt daher ebenfalls für sie. Siehe Containernetzwerke auf dem Mac.

Fragen

Gibt es einen lokalen Emulator für Azure Container Apps?

Mit Stand Oktober 2026 haben wir in Microsofts Dokumentation keinen offiziellen lokalen Container-Apps-Emulator gefunden. Microsoft verweist auf az containerapp up für Deployments aus lokalem Quellcode und auf Aspire für lokale Orchestrierung. Eine Container App besteht aus mehreren Containern. Die praktische lokale Entsprechung sind daher dieselben Container in einem Compose-Projekt, mit Azurite für den Speicher.

Läuft Azurite auf einem Mac mit Apple-Chip?

Ja. Auf Oxcart startete docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 Azurite 3.37.0, und sein Blob-Endpunkt antwortete auf localhost:10000.

Kann ich Azure Functions in einem Container auf dem Mac ausführen?

Ja, mit --platform linux/amd64. Das von uns getestete Python-Basisimage von Azure Functions (mcr.microsoft.com/azure-functions/python:4-python3.12) hat keinen arm64-Build. Ein gewöhnlicher Build scheitert daher mit „no match for platform in manifest“. Auf Oxcart als linux/amd64 gebaut und gestartet, lief es über Rosetta, und eine per HTTP ausgelöste Funktion antwortete auf localhost.

Wie pushe ich vom Mac nach Azure Container Registry?

Führe az acr login --name REGISTRY aus, dann docker tag und docker push REGISTRY.azurecr.io/app:TAG. Auf Oxcart landen über docker login gespeicherte Zugangsdaten im macOS-Schlüsselbund.

Wie entwickle ich auf meinem Mac für AKS?

Baue und teste deine App und ihre Abhängigkeiten lokal mit Oxcart. Verbinde kubectl und k9s über az aks get-credentials mit AKS und nutze kwok auf Oxcart, um Manifeste gegen eine lokale Kubernetes-API mit simulierten Nodes zu prüfen. Siehe Kubernetes auf dem Mac.

Was ist mit dem Cosmos-DB-Emulator?

Microsoft veröffentlicht ein Linux-basiertes Image des Cosmos-DB-Emulators (vNext, API für NoSQL). Wir haben es nicht auf Oxcart getestet. Probiere es daher während der kostenlosen Testphase mit deinem Projekt aus, bevor du dich darauf verlässt.

Quellen und Methode

  • Beispiele getestet mit Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Azurite 3.37.0 Blob, Python-4-Image von Azure Functions als linux/amd64, 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 (kein lokaler Emulator gefunden): https://learn.microsoft.com/en-us/azure/container-apps/quickstart-code-to-cloud. Cosmos-DB-Emulator für Linux: https://learn.microsoft.com/en-us/azure/cosmos-db/emulator-linux. Geprüft am 2026-10-10.
  • Containergeschwindigkeit: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPUs und 12 GiB, Mediane aus fünf Messungen; die anderen Laufzeitumgebungen wurden früher am selben Tag auf demselben Mac mit demselben Messaufbau und dem docker-Client 29.4 gemessen.

Teste Oxcart mit deinen eigenen Projekten

60 Tage kostenlos. Danach $20 pro Person und Hauptversion. Kein Abo.

Apple silicon · macOS 26 oder neuer

Weiterlesen

Versionshinweise

Oxcart 0.1.4

Neueste Version

Lizenzierung und Verbesserungen.

  • Lizenzaktivierung über sichere E-Mail-Links.
  • Lizenz- und Mac-Verwaltung in Settings.
  • Offline-Lizenzprüfung.
  • Leistungsverbesserungen, Feinschliff an der Benutzeroberfläche und Fehlerbehebungen.

Erfordert macOS 26.0 oder neuer

Oxcart 0.1.3

Arbeitsspeicherfreigabe im Leerlauf.

  • Gibt VM-Arbeitsspeicher frei, wenn keine Container laufen.
  • Container, Images, Volumes und Netzwerke bleiben erhalten.

Erfordert macOS 26.0 oder neuer

Oxcart 0.1.2

Integration von Kommandozeilenwerkzeugen.

  • Zwischen den mit Oxcart gelieferten Docker-Werkzeugen und einer vorhandenen Installation wechseln.
  • Feinschliff an der Benutzeroberfläche.

Erfordert macOS 26.0 oder neuer

Oxcart 0.1.1

Mitgelieferte Docker-Werkzeuge und Agentensteuerung.

  • Docker CLI 29.9, Compose 5.6 und Buildx 0.38 enthalten.
  • Docker-Kontextintegration und sichere Zugangsdaten im Schlüsselbund.
  • MCP-Agentenverbindungen mit Berechtigungen und Sperrfunktion pro Agent.

Erfordert macOS 26.0 oder neuer

Oxcart 0.1.0

Docker-kompatible Container für Apple silicon.

  • Kompatibilität mit Docker CLI, Compose und Buildx.
  • Offline-Einrichtung mit mitgelieferten Laufzeitkomponenten.
  • Ports nach Projekt und Git-Branch gruppiert.
  • MCP-Integration mit standardmäßig reinem Lesezugriff.
  • Verifizierte automatische Updates.

Erfordert macOS 26.0 oder neuer