<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Higor Morais</title>
    <description>The latest articles on DEV Community by Higor Morais (@higorae).</description>
    <link>https://dev.to/higorae</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F369030%2F276e7c7f-c8ba-4cf6-b03e-82d9439e9d7e.jpeg</url>
      <title>DEV Community: Higor Morais</title>
      <link>https://dev.to/higorae</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/higorae"/>
    <language>en</language>
    <item>
      <title>Resgatando a Performance do Meu Macos com Docker Distribuído</title>
      <dc:creator>Higor Morais</dc:creator>
      <pubDate>Mon, 13 Oct 2025 13:40:20 +0000</pubDate>
      <link>https://dev.to/higorae/resgatando-a-performance-do-meu-macos-com-docker-distribuido-3kd4</link>
      <guid>https://dev.to/higorae/resgatando-a-performance-do-meu-macos-com-docker-distribuido-3kd4</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo 1: A Solução de Performance – Contextos Docker para Alívio de Recursos
&lt;/h3&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como configurar o Contexto Docker:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gere as Chaves SSH&lt;/strong&gt; (Conforme o Passo 2, abaixo).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crie o Contexto Remoto:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context create homeserver &lt;span class="nt"&gt;--docker&lt;/span&gt; &lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ssh://user@homeserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para usar o servidor remoto:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context use homeserver
&lt;span class="c"&gt;# Agora, 'docker ps' mostra os containers do servidor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para voltar à sua máquina local (e reverter o consumo de recursos):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context use default
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Passo 2: O Fim das Senhas – Chaves SSH para Autenticação Rápida
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gerar o par de chaves (local):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Copiar a chave pública (para o servidor):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id user@homeserver
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;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.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Passo 3: Acessando os Serviços Docker como "Localhost" com &lt;code&gt;~/.ssh/config&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Minha configuração no arquivo &lt;code&gt;~/.ssh/config&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ssh"&gt;&lt;code&gt;&lt;span class="k"&gt;Host&lt;/span&gt; homeserver
    &lt;span class="c1"&gt;# O endereço IP ou DNS real do seu servidor (Substitua!)&lt;/span&gt;
    &lt;span class="k"&gt;HostName&lt;/span&gt; [IP-DO-HOMESERVER] 

    &lt;span class="c1"&gt;# Usuário SSH na máquina remota&lt;/span&gt;
    &lt;span class="k"&gt;User&lt;/span&gt; user

    &lt;span class="c1"&gt;# Porta SSH (padrão)&lt;/span&gt;
    &lt;span class="k"&gt;Port&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt; 

    &lt;span class="c1"&gt;# 1. Túnel para a porta 5432 (Ex: PostgreSQL)&lt;/span&gt;
    &lt;span class="c1"&gt;# Porta local 5432 aponta para a porta 5432 no homeserver&lt;/span&gt;
    &lt;span class="k"&gt;LocalForward&lt;/span&gt; &lt;span class="m"&gt;5432&lt;/span&gt; localhost:5432 

    &lt;span class="c1"&gt;# 2. Túnel para a porta 4566 (Ex: Serviço AWS Localstack)&lt;/span&gt;
    &lt;span class="c1"&gt;# Porta local 4566 aponta para a porta 4566 no homeserver&lt;/span&gt;
    &lt;span class="k"&gt;LocalForward&lt;/span&gt; &lt;span class="m"&gt;4566&lt;/span&gt; localhost:4566 

    &lt;span class="c1"&gt;# Garante que a conexão não caia por inatividade&lt;/span&gt;
    &lt;span class="k"&gt;ServerAliveInterval&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;
    &lt;span class="k"&gt;ServerAliveCountMax&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

    &lt;span class="c1"&gt;# Opcional: Não abre um terminal, apenas mantém o túnel ativo&lt;/span&gt;
    &lt;span class="k"&gt;RequestTTY&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;

    &lt;span class="c1"&gt;# Opcional: Configuração para autenticação de host (em caso de IP estático)&lt;/span&gt;
    &lt;span class="k"&gt;StrictHostKeyChecking&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Para ativar o túnel e acessar os serviços:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-N&lt;/span&gt; homeserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Ao combinar a conveniência dos &lt;strong&gt;Contextos Docker&lt;/strong&gt; para o gerenciamento de containers e a segurança dos &lt;strong&gt;Túneis SSH configurados&lt;/strong&gt; 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.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>performance</category>
      <category>productivity</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
