DescubreApple

Apple, Mac, iPhone, iPad

macOS

Como usar o Docker Desktop no MacBook com Apple Silicon sem que fique lento

Guia prática para tirar o máximo proveito do Docker Desktop em Macs com chip M1, M2 e M3: ajustes de VirtioFS, Rosetta 2, memória e alternativas como OrbStack ou Colima quando o Docker fica aquém.

Cómo usar Docker Desktop en MacBook con Apple Silicon sin que se ralentice
Como Usar Docker Desktop En Macbook Con Apple Silicon Sin Que Se Ralentice

Se você trabalha com contêineres num MacBook com Apple Silicon, já sabe que o Docker Desktop nem sempre funciona bem. Ele demora a iniciar, consome muita RAM, a ventoinha liga quando você constrói uma imagem um pouco maior e, se a sua imagem for linux/amd64, a situação piora. Este guia trata disso: como deixar o Docker Desktop utilizável num Mac M1, M2 ou M3, quais ajustes fazer, quando aceitar que o Docker não é a melhor opção e quais alternativas valem a pena.

Tudo o que está aqui foi testado no macOS Sequoia 15.1 com Docker Desktop 4.35 em um MacBook Pro M3 Pro de 18 GB de RAM e um MacBook Air M2 de 16 GB. Os princípios valem da mesma forma para o M1.

Por que o Docker Desktop fica lento no Apple Silicon

O Docker não roda nativamente no macOS. Nunca rodou. O Docker precisa de um kernel Linux, e o macOS não tem um. O que o Docker Desktop faz é iniciar uma máquina virtual Linux leve usando o framework de virtualização da Apple (Virtualization.framework no Apple Silicon) e executar o daemon do Docker dentro dela.

Isso significa duas coisas: existe uma camada de virtualização constante e existe uma ponte entre o seu sistema de arquivos macOS e o sistema de arquivos da VM. Essa ponte tem sido historicamente o grande gargalo.

Some a isso as imagens linux/amd64. O seu Mac é ARM64. Se você iniciar um contêiner x86_64, o Docker o emula via Rosetta 2 ou QEMU. Emular uma arquitetura inteira tem um custo: entre 30% e 60% de desempenho perdido, dependendo da carga.

Pré-requisitos

  • macOS 13 Ventura ou superior (Sequoia recomendado para um VirtioFS estável).
  • Docker Desktop 4.25 ou superior. A versão 4.35 traz melhorias notáveis no gerenciador de recursos.
  • Mac com chip M1, M2, M3 (ou superior) e no mínimo 16 GB de RAM se você for trabalhar com mais de dois contêineres ao mesmo tempo.
  • Rosetta 2 instalado: softwareupdate --install-rosetta --agree-to-license.

Instalar o Docker Desktop em Mac Apple Silicon

Baixe o instalador para Apple Silicon em docker.com. Atenção: existem duas versões, a de Intel e a de Apple Silicon. Se você baixar a de Intel por engano, tudo passará pelo Rosetta e você perderá desempenho sem motivo.

Arraste o aplicativo para /Applications, abra-o, aceite as permissões de rede privilegiada e aguarde a baleia aparecer na barra de menus.

Ajustes essenciais para o Docker não ficar lento

Aqui está 80% do artigo. Estes são os ajustes que realmente fazem diferença.

Ativar o VirtioFS como sistema de arquivos

O VirtioFS substituiu o gRPC-FUSE. Ele é entre 2x e 5x mais rápido para ler e escrever em volumes montados a partir do macOS. Atualmente é o valor padrão, mas se você vem de uma instalação antiga pode ainda estar usando o gRPC-FUSE.

Caminho: Docker Desktop → Settings → General → Virtual Machine Options → VirtioFS.

Reinicie o Docker depois de alterar. Você notará a diferença em qualquer projeto Node, PHP ou Python que monte node_modules ou vendor a partir da sua pasta local.

Usar o novo Virtualization Framework da Apple

Na mesma tela, marque Use Virtualization framework (o da Apple, não o QEMU). É ele que aproveita a aceleração por hardware do chip M.

E logo abaixo, ative Use Rosetta for x86_64/amd64 emulation. Isso substitui a emulação QEMU pelo Rosetta 2 quando você executar imagens amd64. A melhora em imagens x86_64 é enorme: em testes com contêineres de MySQL 8 amd64, o tempo de inicialização caiu de 40 segundos para menos de 15.

Ajustar recursos de CPU, memória e disco

Caminho: Settings → Resources → Advanced.

Por padrão, o Docker Desktop reserva uma fração conservadora. Em um Mac de 16 GB, aumente a memória para 8 GB se for trabalhar com bancos de dados. Em um de 18 GB ou mais, entre 8 e 10 GB. Não passe de 50% da RAM total: o macOS precisa respirar.

CPU: deixe pelo menos 2 núcleos livres para o sistema. Em um M3 Pro de 12 núcleos, você pode alocar 8 para o Docker sem problemas.

Disco: o disco virtual cresce sob demanda. Defina um limite razoável (64 GB geralmente basta) e remova imagens antigas com docker system prune -a a cada duas semanas.

Desative os recursos que você não usa

Em Settings → General, desmarque Send usage statistics, Open Docker Dashboard at startup se não precisar, e SBOM indexing se não analisar vulnerabilidades. Cada um consome ciclos.

Em Settings → Kubernetes, mantenha o Kubernetes desativado, a menos que você realmente o use. Um cluster K8s local consome 2 GB de RAM mesmo sem você fazer nada.

Trabalhar com imagens ARM64 sempre que possível

A forma mais rápida de fazer o Docker voar no seu Mac é não emular nada. Muitas imagens oficiais já têm builds linux/arm64: PostgreSQL, Redis, Nginx, Node, Python, Ruby, Go, a maioria dos bancos de dados modernos.

Verifique as arquiteturas disponíveis antes de fazer o pull:

docker manifest inspect postgres:16 | grep architecture

Se você vir arm64, use essa versão sem forçar a plataforma. Se só existir amd64, aí sim você precisará do Rosetta.

Para forçar uma plataforma específica:

docker run --platform linux/arm64 postgres:16
docker run --platform linux/amd64 mysql:5.7

No seu docker-compose.yml, adicione platform: linux/arm64 em cada serviço para evitar surpresas.

Quando o Rosetta 2 salva o dia e quando não

O Rosetta 2 funciona bem com binários estáticos e aplicações que fazem computação de propósito geral. Para bancos de dados antigos, ferramentas legadas ou imagens corporativas que só existem em amd64, ativar o Rosetta resolve o problema.

Onde o Rosetta ainda tem dificuldades: cargas com muita I/O intensiva, JVMs antigas (o Java 8 amd64 pode falhar) e alguns binários que fazem syscalls exóticas. Se um contêiner amd64 apresentar erros estranhos com o Rosetta ativo, tente desativá-lo e voltar ao QEMU apenas para esse caso.

Otimizar o uso de volumes

A montagem de pastas do macOS dentro do contêiner continua sendo a operação mais cara, mesmo com o VirtioFS. Três regras:

  1. Não monte node_modules, vendor ou .git se puder evitar. Use volumes nomeados do Docker para esses diretórios: eles ficam dentro da VM e são ordens de magnitude mais rápidos.
  2. Use :delegated ou :cached em montagens que não exijam consistência estrita. Com o VirtioFS o impacto é menor do que antes, mas ainda existe.
  3. Evite watchers de arquivos em massa. Se o seu framework recompila a cada alteração de arquivo, limite os caminhos monitorados.

Exemplo de volume nomeado para node_modules:

services:
  app:
    build: .
    volumes:
      - .:/app
      - node_modules:/app/node_modules
volumes:
  node_modules:

Alternativas ao Docker Desktop no Mac

O Docker Desktop não é a única opção, e em alguns casos nem é a melhor. Três alternativas sérias:

OrbStack

OrbStack é o mais parecido com “Docker Desktop, mas rápido”. Consome menos RAM (inicia com cerca de 400 MB, contra 1,5 GB do Docker Desktop), inicia em 2 a 3 segundos e usa sua própria implementação de virtualização sobre o Apple Silicon. É compatível com a CLI do Docker sem alterações.

Custa 8 dólares por mês para uso comercial e é gratuito para uso pessoal. Se você trabalha o dia todo com contêineres, a economia de bateria já compensa o valor.

Colima

Colima é gratuito, de código aberto e funciona pela linha de comando. Ele inicia uma VM Linux com Lima e expõe um socket do Docker. Zero interface gráfica.

Instalação:

brew install colima docker
colima start --cpu 4 --memory 8 --vm-type vz --vz-rosetta

A flag --vz-rosetta ativa o Rosetta para amd64. É ideal se você vive no terminal e não quer um aplicativo rodando permanentemente.

Podman

Podman é a abordagem da Red Hat: sem daemon, sem root, compatível com a CLI do Docker por meio de aliases. No Apple Silicon funciona bem, mas o ecossistema de imagens e a integração com ferramentas como o docker-compose ainda são menos polidos.

Bom se você vem de ambientes RHEL ou quer alinhar-se com a produção em Kubernetes/OpenShift.

Comandos úteis para diagnosticar o desempenho

Ver qual contêiner está consumindo os recursos:

docker stats

Ver o tamanho real de imagens, contêineres e volumes:

docker system df

Limpar tudo o que não está em uso (cuidado, remove imagens sem contêiner associado):

docker system prune -a --volumes

Problemas comuns e como resolvê-los

O Docker Desktop não inicia após atualizar o macOS. Reinicie o serviço: killall Docker && open /Applications/Docker.app. Se persistir, vá em Troubleshoot → Reset to factory defaults.

A ventoinha dispara ao construir imagens. Reduza a CPU alocada ao Docker em Settings → Resources. Se continuar igual, verifique se o seu Dockerfile tem RUN com processos que paralelizam (npm install, cargo build).

Os volumes montados são muito lentos. Verifique se o VirtioFS está ativo e considere mover diretórios pesados para volumes nomeados.

Um contêiner amd64 não inicia. Confirme que o Rosetta está instalado (arch -x86_64 uname -m deve retornar x86_64). Se ainda falhar, esse binário específico não é compatível com o Rosetta 2; use o QEMU desativando a opção do Rosetta.

O Docker Desktop consome 3 GB de RAM em repouso. É normal em versões antigas. Atualize para a 4.30 ou superior; o gerenciador de memória dinâmico devolve RAM ao sistema quando não há contêineres ativos.

FAQ

Posso usar o Docker Desktop gratuitamente para trabalho? Não, se você trabalha em uma empresa com mais de 250 funcionários ou com mais de 10 milhões de dólares de faturamento anual. Para uso pessoal, educação e pequenas startups, sim. Consulte a licença oficial do Docker.

Vale a pena migrar para o OrbStack? Se você usa contêineres diariamente e se incomoda com o consumo do Docker Desktop, sim. Para uso esporádico, o Docker Desktop atende bem.

O Rosetta 2 emula perfeitamente qualquer imagem amd64? Não. Cobre a maioria dos casos, mas binários muito específicos (JVMs antigas, ferramentas com SIMD complexo) podem falhar. O QEMU é o plano B.

É possível rodar Kubernetes num Mac M3 sem sofrer? Sim, mas é melhor com minikube ou k3d do que com o Kubernetes integrado do Docker Desktop. Ambos são mais leves. Se você precisa de um ambiente completo de desenvolvimento com Windows e Linux ao mesmo tempo, pode ser interessante dar uma olhada em como instalar o Windows 11 ARM em um Mac M3 com o Parallels Desktop 20.

De quanta RAM eu realmente preciso para trabalhar confortavelmente com Docker? 16 GB é o mínimo razoável. 24 GB ou mais se a sua stack incluir banco de dados, backend, frontend e algum serviço auxiliar ao mesmo tempo. Se você está pensando em trocar de equipamento, confira a comparação entre o MacBook Pro M4 Pro e M4 Max antes de decidir.

JG
🇵🇹 PT