<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="https://glabrego.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://glabrego.github.io/" rel="alternate" type="text/html" /><updated>2022-06-28T19:30:46+00:00</updated><id>https://glabrego.github.io/feed.xml</id><title type="html">Guilherme Labrego</title><subtitle>Esse é o canto da internet onde um desenvolvedor aprende enquanto compartilha.</subtitle><author><name>Guilherme Labrego</name></author><entry><title type="html">Resolvendo problemas do *Docker for Mac* com containers</title><link href="https://glabrego.github.io/resolvendo-problemas-do-docker-para-mac-com-containers/" rel="alternate" type="text/html" title="Resolvendo problemas do *Docker for Mac* com containers" /><published>2017-07-31T18:00:00+00:00</published><updated>2017-07-31T18:00:00+00:00</updated><id>https://glabrego.github.io/resolvendo-problemas-do-docker-para-mac-com-containers</id><content type="html" xml:base="https://glabrego.github.io/resolvendo-problemas-do-docker-para-mac-com-containers/">&lt;p&gt;Por muito tempo o Docker não utilizou a virtualização nativa do &lt;em&gt;macOS&lt;/em&gt;, o que o &lt;em&gt;Docker Machine&lt;/em&gt; fazia na realidade era criar uma máquina virtual no &lt;em&gt;VirtualBox&lt;/em&gt; e executar seus containers dentro da mesma, o que nem de longe é uma solução boa e realmente estável se comparado aos containers nativos do Linux, isso trazia muitos problemas de performance e te obrigava a utilizar comandos pouco intuitivos para utilizar containers no &lt;em&gt;macOS&lt;/em&gt;, mas ainda assim era uma opção que funcionava.&lt;/p&gt;

&lt;p&gt;Com a chegada do &lt;em&gt;Docker for Mac&lt;/em&gt; os containers continuam sendo virtualizados, porém de forma nativa através do &lt;em&gt;HyperKit&lt;/em&gt; do &lt;em&gt;macOS&lt;/em&gt;, isso melhorou muito o funcionamento do Docker no sistema e acabou de vez com o &lt;em&gt;Docker Machine&lt;/em&gt;, mas isso não quer dizer que todos os problemas do Docker no &lt;em&gt;macOS&lt;/em&gt; foram extintos e nas últimas semanas de trabalho me deparei um com deles.&lt;/p&gt;

&lt;p&gt;Os sintoma que eu mais enfrentei era a lentidão para conectar o container da minha aplicação com os containers de serviços dos quais ela depende, como &lt;a href=&quot;https://redis.io/&quot;&gt;Redis&lt;/a&gt; e &lt;a href=&quot;https://www.postgresql.org/&quot;&gt;PostgreSQL&lt;/a&gt;. No pior dos casos os serviços não conectavam nunca e no melhor demorava mais de 10 minutos para que o meu ambiente de desenvolvimento estivesse em pé e funcionando. Podemos concordar que isso é bem demorado, já que para subir todo o ambiente localmente eu levaria muito menos tempo.&lt;/p&gt;

&lt;p&gt;Com a ajuda de um amigo de trabalho começamos a procurar uma solução para esse problema, nós apanhamos bastante até descobrirmos essa página com alguns &lt;a href=&quot;https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues&quot;&gt;problemas conhecidos do Docker for Mac&lt;/a&gt;. Sendo mais preciso, o seguinte problema nos chamou a atenção:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;docker-compose 1.7.1 performs DNS unnecessary lookups for localunixsocket.local which can take 5s to timeout on some networks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como um último teste antes de partir para a solução sugerida desligamos todas as interfaces de rede da máquina e executamos novamente o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker-compose start app&lt;/code&gt; com as imagens cacheadas e todos os contairners subiram maravilhosamente rápido.&lt;/p&gt;

&lt;p&gt;O problema que enfrentamos está relacionando com consultas desnecessárias ao DNS que o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; 1.7.1 realiza e o mais interessante desse problema é exatamente a frase &lt;strong&gt;em algumas redes&lt;/strong&gt;, pois eu uso macOS tanto no trabalho quanto em casa e na máquina do trabalho o problema era constante, já em casa o Docker funcionava perfeitamente.&lt;/p&gt;

&lt;p&gt;Com o diagnóstico do problema partimos para a solução, nesta mesma página ele sugere que você crie uma entrada no seu &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/hosts&lt;/code&gt; com a seguinte configuração&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;127.0.0.1 localunixsocket.local
127.0.0.1 [seu_hostname].local
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Isso faz com que as consultas ao localunixsocket.local sejam redirecionadas para o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost&lt;/code&gt;. Isso por si só não resolveu meu problema, então segui para o segundo passo, adicionar o seguinte comando ao seu arquivo de configuração do shell:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:1234:1234 bobrik/socat TCP-LISTEN:1234,fork UNIX-CONNECT:/var/run/docker.sock &amp;amp;&amp;gt;/dev/null; export DOCKER_HOST=tcp://localhost:1234&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Isso vai criar um proxy TCP em um container que vai ser onde o Docker vai criar suas networks. Acredito que essa seja uma boa solução enquanto não resolvem o problema de forma definitiva, eu adaptei um pouco o código do comando para suprimir os erros ao executar o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker run&lt;/code&gt;, pois uma vez que o container &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bobrik/socat&lt;/code&gt; estiver rodando, ao iniciar uma nova sessão do shell uma excessão seria lançada pois a porta 1234 do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost&lt;/code&gt; já está sendo utilizada.&lt;/p&gt;

&lt;p&gt;Depois de aplicar essa correção o Docker voltou a ser utilizável no meu ambiente de desenvolvimento. Agora vocês sabem o porquê do &lt;strong&gt;resolvendo problemas de &lt;em&gt;Docker for Mac&lt;/em&gt; com o containers&lt;/strong&gt; 😋&lt;/p&gt;</content><author><name>Guilherme Labrego</name></author><summary type="html">Por muito tempo o Docker não utilizou a virtualização nativa do macOS, o que o Docker Machine fazia na realidade era criar uma máquina virtual no VirtualBox e executar seus containers dentro da mesma, o que nem de longe é uma solução boa e realmente estável se comparado aos containers nativos do Linux, isso trazia muitos problemas de performance e te obrigava a utilizar comandos pouco intuitivos para utilizar containers no macOS, mas ainda assim era uma opção que funcionava.</summary></entry><entry><title type="html">Olá, Mundo!</title><link href="https://glabrego.github.io/ola-mundo/" rel="alternate" type="text/html" title="Olá, Mundo!" /><published>2017-03-05T18:00:00+00:00</published><updated>2017-03-05T18:00:00+00:00</updated><id>https://glabrego.github.io/ola-mundo</id><content type="html" xml:base="https://glabrego.github.io/ola-mundo/">&lt;p&gt;O começo de algo novo é sempre muito estranho, não sabemos como começar, qual caminho trilhar… erramos muito, mas aprendemos muito também. Minha jornada como desenvolvedor começou dessa maneira, cerca de 1 ano e meio atrás, estava terminando a faculdade e ainda não tinha claro como ingressaria no mundo do desenvolvimento, até que conheci o programa &lt;a href=&quot;http://queroserdevlocaweb.com.br/&quot;&gt;Quero Ser Dev Locaweb&lt;/a&gt;, um programa que visa treinar novos desenvolvedores e tornar esse caminho um pouco mais claro. Foi dessa maneira que me tornei desenvolvedor.&lt;/p&gt;

&lt;p&gt;Hoje, depois de passar por todas as etapas do processo e ser contratado, estou prestes a completar 1 ano de jornada como desenvolvedor na Locaweb. Nesse meio tempo aprendi muito sobre Ruby On Rails e toda a cultura de desenvolvimento que foi construída em torno desse framework, também tive contato com outras linguagens, tecnologias e boas práticas que me ajudaram muito nesse caminho.&lt;/p&gt;

&lt;p&gt;Confesso que ainda tenho muito o que aprender, mas consigo perceber o quanto o Guilherme de 1 ano atrás iria se beneficiar se soubesse o que sei hoje, portanto, espero que esse espaço aqui na internet possa ajudar outros Guilhermes que assim como eu estão sempre buscando se aprimorar e, agora, ensinar também.&lt;/p&gt;

&lt;p&gt;Aqui prentendo compartilhar de tudo, desde comandos de terminal que possam te ajudar a ficar mais rápido até problemas que encontrei, apanhei e descobri como resolver. Sejam bem-vindos a minha nova jornada, dessa vez compartilhando conhecimento!&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ESC ESC :wq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>Guilherme Labrego</name></author><summary type="html">O começo de algo novo é sempre muito estranho, não sabemos como começar, qual caminho trilhar… erramos muito, mas aprendemos muito também. Minha jornada como desenvolvedor começou dessa maneira, cerca de 1 ano e meio atrás, estava terminando a faculdade e ainda não tinha claro como ingressaria no mundo do desenvolvimento, até que conheci o programa Quero Ser Dev Locaweb, um programa que visa treinar novos desenvolvedores e tornar esse caminho um pouco mais claro. Foi dessa maneira que me tornei desenvolvedor.</summary></entry></feed>