<?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: Lucas Stellet</title>
    <description>The latest articles on DEV Community by Lucas Stellet (@lucasstellet).</description>
    <link>https://dev.to/lucasstellet</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%2F270698%2F448f833c-994b-4bcd-b10e-1bea0262b779.jpeg</url>
      <title>DEV Community: Lucas Stellet</title>
      <link>https://dev.to/lucasstellet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucasstellet"/>
    <language>en</language>
    <item>
      <title>Construindo um ambiente Node.js com Docker</title>
      <dc:creator>Lucas Stellet</dc:creator>
      <pubDate>Mon, 14 Sep 2020 14:16:20 +0000</pubDate>
      <link>https://dev.to/lucasstellet/construindo-um-ambiente-node-js-com-docker-4fm2</link>
      <guid>https://dev.to/lucasstellet/construindo-um-ambiente-node-js-com-docker-4fm2</guid>
      <description>&lt;p&gt;Eae dev!&lt;/p&gt;

&lt;p&gt;Meu nome é Lucas e tenho 27 anos, pouco mais de 3 anos entre estudante de desenvolvimento e programador de verdade. &lt;br&gt;
O que me motivou a escrever esse artigo foi a vontade de mostrar como criar um ambiente de desenvolvimento que é utilizado também em ambientes de produção, usando containers e especialmente Docker. Esse artigo é um pouco mais prático, não se atentará a explicar como Docker funciona e o contexto dos containers e imagens. Não que não seja importante conhecer os fundamentos, mas para começar a utilizar não é necessário. No final deixarei alguns vídeos e outros artigos caso você tenha esse intuito. &lt;/p&gt;

&lt;p&gt;Docker é um gerenciador de containers criado por Solomon Hykes e que, na minha opinião, mudou a forma de desenvolver, sendo utilizado tanto no ambiente de desenvolvimento quanto de produção.&lt;br&gt;
Depois que conheci, o Docker e resolvi aplica-lo no meu dia-dia, não o abandonei mais. Depois do ar condicionado, a melhor invenção do homem foi o Docker. &lt;br&gt;
Você consegue criar um ambiente em poucos segundos e pode começar a desenvolver um sistema que será facilmente utilizado tanto no servidor quanto em outro computador.&lt;br&gt;
Sim, aquela frase "no meu computador funciona" não será mais dita.&lt;/p&gt;
&lt;h1&gt;
  
  
  Pré-requisitos
&lt;/h1&gt;

&lt;p&gt;Antes de começarmos de fato a utilizar o Docker, alguns pré-requisitos precisam ser preenchidos. São eles:&lt;/p&gt;

&lt;p&gt;1 - Ter o Docker instalado em sua máquina. Caso não tenha, segue alguns links ensinando como instalar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-pt"&gt;https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-pt&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.mundodocker.com.br/tag/docker-no-windows/"&gt;https://www.mundodocker.com.br/tag/docker-no-windows/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - Ter o Node.js instalado em seu computador. Deixarei apenas o link de como instalar no Linux devido à facilidade de instalação no Winodws.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-pt"&gt;https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-pt&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  1º Passo - Criar um projeto Node.js com NPM
&lt;/h1&gt;

&lt;p&gt;Escolha um diretório de sua preferência e no terminal, digite o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir node_project&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Navegue para esse diretório utilizando o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd node_project&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Inicie um projeto node lembrando de colocar a tag "-y" no final para que não haja a necessidade de preenchimento dos campos:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm init -y&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  2º Passo - Criando o arquivo do projeto e instalando Koa.js
&lt;/h1&gt;

&lt;p&gt;O nosso app será bem básico, utilizando uma biblioteca conhecida no mundo JS chamada Koa.js. Esse lib surgiu de uma galera que se desvencilhou de um outro projeto, Express. Ele também é baseado em middlewares e facilita bastante a criação de um servidor HTTP com o Node.js. No final, deixarei alguns links falando mais sobre o Koa caso você tenha interesse em se aprofundar mais.&lt;/p&gt;

&lt;p&gt;Bom, antes de criar o nosso arquivo, vamos instalar o Koa como dependência do nosso projeto para podermos utilizá-lo.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install koa&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Além do Koa, vamos instalar o Nodemon como uma dependência de desenvolvimento, que nos permitirá atualizar a nossa aplicação e ver o efeito dessa atualização em tempo real.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install nodemon -D&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Sem mais delongas, vamos criar o nosso app.js. (FINALMENTE!)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Koa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;koa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Koa&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1&amp;gt;Hello from my first Node.js Docker app!&amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para que consiga testar, basta digitar no diretório do arquivo o comando a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;node app.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Acesse o seu navegador preferido, digite "localhost:3000" e &lt;em&gt;voilá&lt;/em&gt; ... &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_6IIrydv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kj1xqa5u55unfm14ummx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_6IIrydv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kj1xqa5u55unfm14ummx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos um servidor rodando em nosso computador. Vamos agora para a última etapa e mais importante, colocar o servidor para rodar em um container Docker.&lt;/p&gt;

&lt;h1&gt;
  
  
  Último Passo - Criando uma imagem Docker e subindo um container com o nosso servidor
&lt;/h1&gt;

&lt;p&gt;Agora que temos o projeto instalado, vamos criar um novo arquivo no nosso diretório chamado Dockerfile. Com ele será possível criar uma imagem e posteriormente, subir o container com a aplicação rodando via localhost.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IKZRUQGO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ukkyvbt7m11iyby36sjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IKZRUQGO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ukkyvbt7m11iyby36sjf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma dica importante, se você é como a maioria dos devs hoje em dia e utiliza o VSCode como ferramenta para desenvolver, instale a extensão do Docker para ter acesso a várias coisas legais como syntax highlighting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker"&gt;https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o arquivo Dockerfile criado, digite a receita abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight docker"&gt;&lt;code&gt;// Dockerfile
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:12.18.3-alpine3.12&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/node/app/node_modules &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; node:node /home/node/app

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /home/node/app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --chown=node:node . .&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; node&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; [ "node", "app.js" ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Pronto, vamos fazer mágica acontecer. Em seu terminal, no diretório do projeto, digite:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build . -t node-app&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Aguarde alguns segundos, dependendo da velocidade da sua conexão, para que a imagem Node seja baixada e se a mensagem abaixo aparecer no seu terminal, está tudo ok para seguirmos adiante.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DUEXQcjY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ta7m9bafz2ylf15872jp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DUEXQcjY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ta7m9bafz2ylf15872jp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com a imagem criada, vamos criar o nosso container e colocar ele para rodar.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run --name my-node -p 3000:3000 -v "${PWD}:/home/node/app" node-app&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Se não houve nenhum erro ao final do processo, acesse novamente o seu navegador preferido, digite "localhost:3000" e novamente... &lt;strong&gt;VOILÁ&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_6IIrydv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kj1xqa5u55unfm14ummx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_6IIrydv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kj1xqa5u55unfm14ummx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pronto. Temos um servidor Node rodando em Docker. Viu como é fácil? Quer ver outra coisa sensacional? &lt;br&gt;
Vá até o arquivo app.js no seu editor ou IDE preferido e mude o texto dentro da tag H1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z92Hiu7l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6cx44oom56hl7xtcq02a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z92Hiu7l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6cx44oom56hl7xtcq02a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acesse o navegador e atualize a página para ver a mágica acontecer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E5N0XlJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gy71fmqb9ze4lugsotnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E5N0XlJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gy71fmqb9ze4lugsotnx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conseguimos realizar tal façanha utlizando um recurso do Docker que cria volumes e reflete toda alteração feita no arquivo que está na pasta automaticamente no containter. &lt;/p&gt;

&lt;p&gt;Com mais algumas linhas de código, estudo sobre Docker, você será capaz de subir uma aplicação dessas em produção.&lt;/p&gt;

&lt;p&gt;Espero que tenha gostado dessa artigo prático e que tenha coçado o seu cerebelo para ir cada vez mais fundo nesse mundo Docker. &lt;/p&gt;

&lt;p&gt;Como prometido, segue links de outros materiais que irão te ajudar a seguir adiante:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como criar um servidor HTTP com KoaJS - CollabCode&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=D780xIvOBPk&amp;amp;t=2s"&gt;https://www.youtube.com/watch?v=D780xIvOBPk&amp;amp;t=2s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-build-a-hello-world-application-with-koa"&gt;https://www.digitalocean.com/community/tutorials/how-to-build-a-hello-world-application-with-koa&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker em 22 minutos - teoria e prática - Programador a Bordo&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=Kzcz-EVKBEQ"&gt;https://www.youtube.com/watch?v=Kzcz-EVKBEQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ambiente de desenvolvimento NodeJS com Docker e Docker Compose - Rocketseat&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=AVNADGzXrrQ&amp;amp;t=611s"&gt;https://www.youtube.com/watch?v=AVNADGzXrrQ&amp;amp;t=611s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ambientes Back-End com Docker + VS Code - Código Fonte TV&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=97jWpWp4Pnc"&gt;https://www.youtube.com/watch?v=97jWpWp4Pnc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como configurar seu ambiente de desenvolvimento Javascript para usar Docker - Erick Wendel&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=Bp2bU6fQcSo&amp;amp;t=468s"&gt;https://www.youtube.com/watch?v=Bp2bU6fQcSo&amp;amp;t=468s&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>docker</category>
      <category>koa</category>
      <category>nodemon</category>
    </item>
  </channel>
</rss>
