Oxcart Baixar
Menu

Desenvolva para Azure Container Apps e AKS localmente no Mac

Obtenha feedback rápido sobre cargas Azure antes de implantar: execute as imagens do app com Docker Compose no Mac, use Azurite para Azure Storage e envie ao Azure Container Registry quando estiver pronto. O Oxcart executa seus serviços locais e imagens amd64 do Azure Functions pelo Rosetta, enquanto kubectl e k9s conectam seu Mac ao AKS.

Atualizado

O que roda onde

Serviços de contêineres Azure e seus equivalentes locais no Oxcart
Serviço AzureEquivalente localSeu fluxo local
Container AppsDocker Compose com as imagens do appExecute seus serviços juntos, com healthchecks e portas publicadas
Blob StorageAzuriteUse Blob Storage local na porta 10000
Azure Functions (contêiner)Imagem-base FunctionsExecute a imagem amd64 do Functions pelo Rosetta
AKSkubectl e k9s no AKS; kwok para uma API localCompile e teste localmente, depois use kubectl e k9s no seu cluster

Container Apps: teste os contêineres, não um simulador

Um Container App executa um ou mais contêineres com variáveis de ambiente, segredos, porta de entrada, probes e regras de escala. Os contêineres são a parte sujeita a falhas e se comportam no Mac como no Azure quando você usa a mesma imagem. Regras de escala, revisões e identidade gerenciada ficam no Azure; tudo dentro do contêiner pode ser testado localmente.

Execute os contêineres de um Azure Container App localmente com Compose e Azurite

  1. Descreva o app no Compose. Escreva um serviço Compose para cada contêiner do Container App (principal e sidecars), com as mesmas imagens, variáveis de ambiente, porta de entrada e probes de saúde.
  2. Adicione Azurite para armazenamento. Adicione um serviço de mcr.microsoft.com/azure-storage/azurite publicando as portas 10000 (Blob), 10001 (Queue) e 10002 (Table) e aponte a string de conexão de armazenamento do app para ele.
  3. Fixe amd64 onde necessário. Defina platform: linux/amd64 em serviços cuja imagem não tenha build arm64, como as imagens-base Azure Functions. Elas rodam pelo Rosetta.
  4. Inicie e aguarde. Execute docker compose up -d --wait. Ele retorna quando todos os serviços com healthcheck estão saudáveis.
  5. Teste e depois envie. Acesse o app em localhost. Quando funcionar, entre com az acr login --name REGISTRY, adicione uma tag à imagem e envie com docker push para 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"]

A chave conhecida da conta de desenvolvimento do Azurite está na documentação da Microsoft; copie de lá. Dentro da rede Compose, o app acessa Azurite pelo nome do serviço (azurite:10000); pelo Mac, fica em localhost:10000.

Azurite no Oxcart

Azurite é o emulador de código aberto da Microsoft para Azure Storage, com Blob, Queue e Table (Table em prévia) nas portas 10000 a 10002. Iniciamos o serviço Blob e o acessamos pelo 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)

403 é a resposta correta para uma solicitação sem assinatura: o endpoint está ativo e acessível. Seu SDK, com a string de conexão de desenvolvimento, assina as solicitações.

Azure Functions em um contêiner

As imagens-base Azure Functions que testamos só oferecem build amd64, então um build comum em Mac com Apple silicon falha com “no match for platform in manifest”. Compile e execute como linux/amd64; o Oxcart usa 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

Na nossa execução, uma função acionada por HTTP respondeu em x86_64 cerca de 13 segundos após docker run, com o log do host Functions mostrando a rota mapeada e a chamada bem-sucedida. Passe --platform linux/amd64 também no docker run: uma imagem local exclusiva de amd64 só é encontrada quando a plataforma é informada. O Azure Functions Core Tools pode implantar a mesma imagem com func azurecontainerapps deploy ou func kubernetes deploy.

Envie ao 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

Compile para a arquitetura usada pelo ambiente Container Apps ou pool de nós AKS. O envio de uma imagem multiplataforma pelo Oxcart não é suportado; envie uma tag por arquitetura ou publique manifestos multi-arquitetura pelo CI.

AKS a partir do Mac

az aks get-credentials --resource-group RG --name CLUSTER adiciona o AKS ao kubeconfig para você usar kubectl e k9s pelo macOS. Desenvolva seus serviços localmente com Oxcart e implante as mesmas imagens no AKS. Para testar APIs e controllers localmente, o kwok roda no Oxcart com um plano de controle real e nós simulados. Consulte esses fluxos no guia Kubernetes no Mac.

Por que executar no Oxcart

Testar localmente só compensa se o ciclo for curto. O Oxcart registrou 42 ms para docker run --rm e 77 ms para parar e remover 20 contêineres, o mais rápido dos três ambientes testados. As conexões de saída dos contêineres são abertas pelo Mac, então uma VPN ou rota de endpoint privado para sua rede Azure também se aplica. Consulte redes de contêineres no Mac.

Perguntas

Existe um emulador local para Azure Container Apps?

Não encontramos um emulador local oficial de Container Apps na documentação da Microsoft até outubro de 2026; a Microsoft indica az containerapp up para implantar a partir do código local e Aspire para orquestração local. Um Container App é um conjunto de contêineres, então o equivalente local prático são os mesmos contêineres em um projeto Compose, com Azurite para armazenamento.

O Azurite roda em um Mac com Apple silicon?

Sim. No Oxcart, docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 iniciou o Azurite 3.37.0, e o endpoint Blob respondeu em localhost:10000.

Posso executar Azure Functions em um contêiner no Mac?

Sim, com --platform linux/amd64. A imagem-base Python do Azure Functions que testamos (mcr.microsoft.com/azure-functions/python:4-python3.12) não tem build arm64, então um build comum falha com “no match for platform in manifest”. Compilada e executada como linux/amd64 no Oxcart, rodou pelo Rosetta e uma função acionada por HTTP respondeu em localhost.

Como envio ao Azure Container Registry pelo Mac?

Execute az acr login --name REGISTRY, depois docker tag e docker push REGISTRY.azurecr.io/app:TAG. No Oxcart, credenciais armazenadas por docker login vão para as Chaves do macOS.

Como desenvolvo para AKS no Mac?

Compile e teste seu app e suas dependências localmente com Oxcart. Conecte kubectl e k9s ao AKS com az aks get-credentials e use kwok no Oxcart para verificar manifestos em uma API Kubernetes local com nós simulados. Consulte Kubernetes no Mac.

E o emulador do Cosmos DB?

A Microsoft publica uma imagem de emulador Cosmos DB baseada em Linux (vNext, API para NoSQL). Não a testamos no Oxcart, então experimente no seu projeto durante o teste gratuito antes de depender dela.

Fontes e método

  • Exemplos testados com Oxcart 0.1.2, Mac17,14, macOS 27.2, 2026-10-10 (Blob do Azurite 3.37.0, imagem Python 4 do Azure Functions como 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 (nenhum emulador local encontrado): https://learn.microsoft.com/en-us/azure/container-apps/quickstart-code-to-cloud. Emulador Linux do Cosmos DB: https://learn.microsoft.com/en-us/azure/cosmos-db/emulator-linux. Verificados em 2026-10-10.
  • Velocidade dos contêineres: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPUs e 12 GiB, medianas de cinco amostras; os outros ambientes foram medidos mais cedo no mesmo dia, no mesmo Mac e com a mesma estrutura de testes, usando o cliente docker 29.4.

Experimente Oxcart nos seus projetos

Grátis por 60 dias. Depois, $20 por usuário, por versão principal: sem assinatura.

Apple silicon · macOS 26 ou posterior

Leia a seguir

Notas da versão

Oxcart 0.1.4

Versão mais recente

Licenciamento e melhorias.

  • Ativação da licença por link seguro enviado por e-mail.
  • Gerenciamento de licenças e Macs a partir de Settings.
  • Verificação de licenças offline.
  • Melhorias de desempenho, ajustes na interface e correções de bugs.

Requer macOS 26.0 ou posterior

Oxcart 0.1.3

Liberação de memória durante a inatividade.

  • Libera a memória da VM quando nenhum contêiner está em execução.
  • Preserva contêineres, imagens, volumes e redes.

Requer macOS 26.0 ou posterior

Oxcart 0.1.2

Integração de ferramentas de linha de comando.

  • Alterne entre as ferramentas Docker incluídas no Oxcart e uma instalação existente.
  • Ajustes na interface.

Requer macOS 26.0 ou posterior

Oxcart 0.1.1

Ferramentas Docker incluídas e controles para agentes.

  • Docker CLI 29.9, Compose 5.6 e Buildx 0.38 incluídos.
  • Integração com contextos Docker e credenciais protegidas no Acesso às Chaves.
  • Conexões de agentes via MCP com permissões e bloqueio por agente.

Requer macOS 26.0 ou posterior

Oxcart 0.1.0

Contêineres compatíveis com Docker para Apple silicon.

  • Compatibilidade com Docker CLI, Compose e Buildx.
  • Configuração offline com os componentes de execução incluídos.
  • Portas organizadas por projeto e branch do Git.
  • Integração MCP com acesso somente leitura por padrão.
  • Atualizações automáticas verificadas.

Requer macOS 26.0 ou posterior