Ce qui tourne où
| Service Azure | Équivalent local | Votre workflow local |
|---|---|---|
| Container Apps | Docker Compose avec les images de l'application | Exécuter vos services ensemble avec des contrôles de santé et des ports publiés |
| Blob Storage | Azurite | Utiliser Blob Storage en local sur le port 10000 |
| Azure Functions (conteneur) | Image de base Functions | Exécuter l'image Functions amd64 via Rosetta |
| AKS | kubectl et k9s avec AKS ; kwok pour une API locale | Construire et tester en local, puis utiliser kubectl et k9s avec votre cluster |
Container Apps : tester les conteneurs, pas un simulateur
Une Container App exécute un ou plusieurs conteneurs avec des variables d'environnement, des secrets, un port d'entrée, des sondes et des règles de mise à l'échelle. Les conteneurs sont la partie qui peut tomber en panne, et ils se comportent sur votre Mac comme dans Azure lorsque vous exécutez la même image. Les règles de mise à l'échelle, les révisions et l'identité managée restent dans Azure ; tout ce qui se trouve dans le conteneur peut être testé localement.
Exécuter localement les conteneurs d'une Azure Container App avec Compose et Azurite
- Décrivez l'application dans Compose. Écrivez un service Compose par conteneur de votre Container App (le conteneur principal et les éventuels sidecars), avec les mêmes images, variables d'environnement, port d'entrée et sondes de santé.
- Ajoutez Azurite pour le stockage. Ajoutez un service depuis
mcr.microsoft.com/azure-storage/azuritepubliant les ports 10000 (Blob), 10001 (Queue) et 10002 (Table), et dirigez la chaîne de connexion de stockage de l'application vers lui. - Imposez amd64 si nécessaire. Définissez
platform: linux/amd64sur tout service dont l'image n'a pas de version arm64, comme les images de base Azure Functions. Elle s'exécute via Rosetta. - Démarrez et attendez. Exécutez
docker compose up -d --wait. La commande se termine lorsque chaque service doté d'un contrôle de santé est sain. - Testez, puis envoyez. Appelez l'application sur
localhost. Lorsqu'elle fonctionne, connectez-vous avecaz acr login --name REGISTRY, ajoutez un tag à l'image et envoyez-la avecdocker pushpour Container Apps ou 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 clé bien connue du compte de développement d'Azurite figure dans la documentation Azurite de Microsoft ; copiez-la depuis cette source. Dans le réseau Compose, l'application atteint Azurite par son nom de service (azurite:10000) ; depuis votre Mac, il est sur localhost:10000.
Azurite sur Oxcart
Azurite est l'émulateur open source Azure Storage de Microsoft, avec Blob, Queue et Table (Table en préversion) sur les ports 10000 à 10002. Nous avons démarré le service Blob et l'avons appelé depuis le 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) Le code 403 est la bonne réponse à une requête sans signature : le point d'accès fonctionne et est joignable. Votre SDK, avec la chaîne de connexion de développement, signe ses requêtes.
Azure Functions dans un conteneur
Les images de base Azure Functions que nous avons testées ne proposent qu'une version amd64 : une construction ordinaire sur un Mac à puce Apple échoue donc avec « no match for platform in manifest ». Construisez-les et exécutez-les en linux/amd64 ; Oxcart les fait fonctionner via 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 Dans notre exécution, une fonction déclenchée par HTTP a répondu depuis x86_64 environ 13 secondes après docker run, et le journal de l'hôte Functions montrait la route associée et la réussite de l'appel. Passez aussi --platform linux/amd64 à docker run : une image exclusivement amd64 construite localement n'est trouvée que si la plateforme est précisée. Azure Functions Core Tools peut ensuite déployer la même image avec func azurecontainerapps deploy ou func kubernetes deploy.
Envoyer vers 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 Construisez pour l'architecture utilisée par votre environnement Container Apps ou le pool de nœuds AKS. L'envoi d'une image multiplateforme depuis Oxcart n'est pas pris en charge : envoyez un tag par architecture ou publiez des manifestes multiarchitectures depuis la CI.
AKS depuis votre Mac
az aks get-credentials --resource-group RG --name CLUSTER ajoute AKS à votre kubeconfig pour utiliser kubectl et k9s depuis macOS. Développez vos services localement avec Oxcart et déployez les mêmes images sur AKS. Pour tester les API et contrôleurs localement, kwok fonctionne sur Oxcart avec un vrai plan de contrôle et des nœuds simulés. Voir le guide Kubernetes sur Mac pour ces workflows.
Pourquoi l'exécuter sur Oxcart
Les tests locaux ne sont rentables que si le cycle est court. Oxcart a mesuré 42 ms pour docker run --rm et 77 ms pour arrêter et supprimer 20 conteneurs, les meilleurs résultats des trois environnements testés. Les connexions sortantes des conteneurs sont ouvertes par votre Mac : un VPN ou une route vers un point de terminaison privé dans votre réseau Azure s'y applique donc aussi. Voir Réseau des conteneurs sur Mac.
Questions
Existe-t-il un émulateur local pour Azure Container Apps ?
Nous n'avons trouvé aucun émulateur local officiel de Container Apps dans la documentation Microsoft en octobre 2026 ; Microsoft renvoie vers az containerapp up pour déployer depuis du code source local et vers Aspire pour l'orchestration locale. Une Container App est un ensemble de conteneurs : l'équivalent local pratique est donc ces mêmes conteneurs dans un projet Compose, avec Azurite pour le stockage.
Azurite fonctionne-t-il sur un Mac à puce Apple ?
Oui. Sur Oxcart, docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 a démarré Azurite 3.37.0 et son point d'accès Blob a répondu sur localhost:10000.
Puis-je exécuter Azure Functions dans un conteneur sur Mac ?
Oui, avec --platform linux/amd64. L'image de base Python d'Azure Functions testée (mcr.microsoft.com/azure-functions/python:4-python3.12) n'a pas de version arm64 : une construction ordinaire échoue donc avec « no match for platform in manifest ». Construite et exécutée en linux/amd64 sur Oxcart, elle a fonctionné via Rosetta et une fonction déclenchée par HTTP a répondu sur localhost.
Comment envoyer vers Azure Container Registry depuis un Mac ?
Exécutez az acr login --name REGISTRY, puis docker tag et docker push REGISTRY.azurecr.io/app:TAG. Sur Oxcart, les identifiants enregistrés via docker login vont dans le Trousseau macOS.
Comment développer pour AKS sur mon Mac ?
Construisez et testez votre application et ses dépendances localement avec Oxcart. Connectez kubectl et k9s à AKS avec az aks get-credentials, et utilisez kwok sur Oxcart pour vérifier les manifestes avec une API Kubernetes locale à nœuds simulés. Voir Kubernetes sur Mac.
Et l'émulateur Cosmos DB ?
Microsoft publie une image d'émulateur Cosmos DB basée sur Linux (vNext, API pour NoSQL). Nous ne l'avons pas testée sur Oxcart : essayez-la donc avec votre projet pendant l'essai gratuit avant de vous y fier.
Sources et méthode
- Exemples testés avec Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Blob d'Azurite 3.37.0, image Python 4 d'Azure Functions en 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 (aucun émulateur local trouvé) : https://learn.microsoft.com/en-us/azure/container-apps/quickstart-code-to-cloud. Émulateur Linux Cosmos DB : https://learn.microsoft.com/en-us/azure/cosmos-db/emulator-linux. Vérifié le 2026-10-10.
- Vitesse des conteneurs : Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU et 12 GiB, médianes de cinq échantillons ; les autres environnements ont été mesurés plus tôt le même jour sur le même Mac et avec le même dispositif de mesure, avec le client docker 29.4.