Oxcart Télécharger
Menu

Développer pour Azure Container Apps et AKS en local sur Mac

Obtenez un retour rapide sur vos workloads Azure avant de déployer : exécutez les images de votre application avec Docker Compose sur votre Mac, utilisez Azurite pour Azure Storage et envoyez vers Azure Container Registry quand vous êtes prêt. Oxcart exécute vos services locaux et les images amd64 d'Azure Functions via Rosetta, tandis que kubectl et k9s connectent votre Mac à AKS.

Mis à jour

Ce qui tourne où

Services de conteneurs Azure et leurs équivalents locaux sur Oxcart
Service AzureÉquivalent localVotre workflow local
Container AppsDocker Compose avec les images de l'applicationExécuter vos services ensemble avec des contrôles de santé et des ports publiés
Blob StorageAzuriteUtiliser Blob Storage en local sur le port 10000
Azure Functions (conteneur)Image de base FunctionsExécuter l'image Functions amd64 via Rosetta
AKSkubectl et k9s avec AKS ; kwok pour une API localeConstruire 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

  1. 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é.
  2. Ajoutez Azurite pour le stockage. Ajoutez un service depuis mcr.microsoft.com/azure-storage/azurite publiant les ports 10000 (Blob), 10001 (Queue) et 10002 (Table), et dirigez la chaîne de connexion de stockage de l'application vers lui.
  3. Imposez amd64 si nécessaire. Définissez platform: linux/amd64 sur tout service dont l'image n'a pas de version arm64, comme les images de base Azure Functions. Elle s'exécute via Rosetta.
  4. 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.
  5. Testez, puis envoyez. Appelez l'application sur localhost. Lorsqu'elle fonctionne, connectez-vous avec az acr login --name REGISTRY, ajoutez un tag à l'image et envoyez-la avec docker push pour 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.

Essayez Oxcart avec vos propres projets

Gratuit pendant 60 jours. Puis $20 par personne et par version majeure, sans abonnement.

Apple silicon · macOS 26 ou ultérieur

À lire ensuite

Notes de version

Oxcart 0.1.4

Dernière version

Licences et améliorations.

  • Activation des licences par lien sécurisé envoyé par e-mail.
  • Gestion des licences et des Mac depuis Settings.
  • Vérification des licences hors ligne.
  • Améliorations des performances et de l’interface, et corrections de bugs.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.3

Libération de mémoire au repos.

  • Libère la mémoire de la VM lorsqu’aucun conteneur ne s’exécute.
  • Conserve les conteneurs, images, volumes et réseaux.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.2

Intégration des outils en ligne de commande.

  • Passez des outils Docker fournis avec Oxcart à une installation existante, et inversement.
  • Améliorations de l’interface.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.1

Outils Docker inclus et gestion des agents.

  • Docker CLI 29.9, Compose 5.6 et Buildx 0.38 inclus.
  • Intégration des contextes Docker et identifiants sécurisés dans le Trousseau.
  • Connexions d’agents MCP avec autorisations et blocage par agent.

Nécessite macOS 26.0 ou version ultérieure

Oxcart 0.1.0

Conteneurs compatibles Docker pour Apple silicon.

  • Compatibilité avec Docker CLI, Compose et Buildx.
  • Configuration hors ligne avec les composants d’exécution inclus.
  • Ports organisés par projet et branche Git.
  • Intégration MCP avec accès en lecture seule par défaut.
  • Mises à jour automatiques vérifiées.

Nécessite macOS 26.0 ou version ultérieure