DEV Community

Higor Morais
Higor Morais

Posted on

Resgatando a Performance do Meu Macos com Docker Distribuído

Trabalhar com Docker é essencial para o desenvolvimento moderno, mas, em máquinas com recursos limitados, a ferramenta pode se tornar um pesadelo. Recentemente, enfrentei o desafio de conciliar a praticidade dos containers com a performance sofrível do meu macbook.

Com pouco espaço em disco e o alto consumo de recursos gerado pelo docker desktop, o sistema operacional e outras ferramentas essenciais, como o cursor (que também demanda memória), frequentemente sofriam. O resultado era um dia a dia de trabalho marcado por lentidão e travamentos.

A solução? Mover o processamento. Decidi transformar uma pequena máquina que eu tinha parada em casa em um servidor docker dedicado, aliviando a carga do meu mac e recuperando a performance.

Adotei uma estratégia para gerenciar meus containers no servidor remoto (homeserver) com a mesma facilidade de um ambiente local, baseada em recursos nativos do sistema: contextos docker e chaves SSH configuradas.

Abaixo, detalho os caminhos que tomei para alcançar um acesso remoto rápido, seguro e eficiente, liberando os recursos do meu Mac para o que realmente importa.


Passo 1: A Solução de Performance – Contextos Docker para Alívio de Recursos

O primeiro passo foi abraçar a ferramenta nativa do Docker para alternar entre ambientes: Contextos Docker. Esta foi a escolha ideal, pois me permite gerenciar meus containers no servidor remoto (homeserver) com os mesmos comandos que uso localmente, mantendo a flexibilidade de voltar para o ambiente default (minha máquina) quando necessário, como em viagens.

Ao fazer isso, movi o pesado gerenciamento da virtual machine do docker desktop e o consumo de recursos dos containers para o servidor dedicado, deixando o mac livre.

Como configurar o Contexto Docker:

  1. Gere as Chaves SSH (Conforme o Passo 2, abaixo).

  2. Crie o Contexto Remoto:

    docker context create homeserver --docker host=ssh://user@homeserver
    
  3. Para usar o servidor remoto:

    docker context use homeserver
    # Agora, 'docker ps' mostra os containers do servidor
    
  4. Para voltar à sua máquina local (e reverter o consumo de recursos):

    docker context use default
    

Passo 2: O Fim das Senhas – Chaves SSH para Autenticação Rápida

Para garantir que a troca de contexto fosse instantânea — e para permitir que o Contexto Docker funcionasse sem interrupções —, a autenticação por senha precisava ser eliminada. A solução foi o uso de chaves SSH.

Após gerar meu par de chaves, eu copiei a chave pública para o servidor remoto, permitindo que a conexão fosse estabelecida instantaneamente:

  1. Gerar o par de chaves (local):

    ssh-keygen -t rsa -b 4096
    
  2. Copiar a chave pública (para o servidor):

    ssh-copy-id user@homeserver
    

    Com as chaves configuradas, o Docker pode se conectar ao daemon remoto sem me pedir a senha, tornando a alternância de contexto imediata e fluida.

Passo 3: Acessando os Serviços Docker como "Localhost" com ~/.ssh/config

Mudar o Docker para o servidor resolve o problema de performance, mas eu ainda precisava acessar os serviços (como um banco de dados ou um Localstack) de forma conveniente.

Para isso, configurei o arquivo ~/.ssh/config para automatizar a criação de túneis SSH (Port Forwarding), permitindo que eu acesse, por exemplo, o PostgreSQL rodando no servidor simplesmente digitando localhost:5432 no meu cliente local.

Minha configuração no arquivo ~/.ssh/config:

Host homeserver
    # O endereço IP ou DNS real do seu servidor (Substitua!)
    HostName [IP-DO-HOMESERVER] 

    # Usuário SSH na máquina remota
    User user

    # Porta SSH (padrão)
    Port 22 

    # 1. Túnel para a porta 5432 (Ex: PostgreSQL)
    # Porta local 5432 aponta para a porta 5432 no homeserver
    LocalForward 5432 localhost:5432 

    # 2. Túnel para a porta 4566 (Ex: Serviço AWS Localstack)
    # Porta local 4566 aponta para a porta 4566 no homeserver
    LocalForward 4566 localhost:4566 

    # Garante que a conexão não caia por inatividade
    ServerAliveInterval 60
    ServerAliveCountMax 5

    # Opcional: Não abre um terminal, apenas mantém o túnel ativo
    RequestTTY no

    # Opcional: Configuração para autenticação de host (em caso de IP estático)
    StrictHostKeyChecking no
Enter fullscreen mode Exit fullscreen mode

Para ativar o túnel e acessar os serviços:

ssh -f -N homeserver
Enter fullscreen mode Exit fullscreen mode

Conclusão

Ao combinar a conveniência dos Contextos Docker para o gerenciamento de containers e a segurança dos Túneis SSH configurados para o acesso aos serviços, consegui não apenas um ambiente de desenvolvimento mais saudável, mas também salvei meu tempo de vida evitando irritações desnecessárias com a falta de recursos da minha máquina.

Top comments (0)