DEV Community

Cover image for Reinicio automático de uma aplicação Nodejs com Docker
Guilherme Gomes
Guilherme Gomes

Posted on • Edited on

Reinicio automático de uma aplicação Nodejs com Docker

Este Artigo tem objetivo agilizar o desenvolvimento de uma aplicação Nodejs sem ter a necessidade de subir o container a cada alteração feita no código.

Nodemon

Nodemon é uma ferramenta para Node.js que reinicia automaticamente a aplicação sempre que detecta alterações nos arquivos do projeto, facilitando o desenvolvimento. Para usá-lo, podemos instalar o nodemon como uma dependência global ou localmente no projeto. Depois, basta ajustar o script no package.json, trocando o comando node por nodemon para que ele gerencie a execução da aplicação automaticamente.

Instalação Global

npm install -g nodemon
Enter fullscreen mode Exit fullscreen mode

Instalação Local

npm install --save-dev nodemon
Enter fullscreen mode Exit fullscreen mode

package.json

{
  "scripts": {
    "start": "nodemon index.js"
  }
}

Enter fullscreen mode Exit fullscreen mode

DockerFile

O Dockerfile é um arquivo de configuração onde definimos todas as intruções para criar uma imagem Docker. Essa imagem servirá como modelo para criação de containers.
Vamos realizar a criação de uma imagem do Docker onde será executado na aplicação, que irá seguir as definições do nosso Dockerfile.

# Usar a imagem base node:16-alpine
FROM node:16-alpine

# Definir o diretório de trabalho dentro do container
WORKDIR /app

# Copiar o arquivo package.json para o diretório de trabalho
COPY package*.json ./

# Instalar as dependências da aplicação
RUN npm install

# Copiar o restante dos arquivos da aplicação para o diretório de trabalho
COPY . .

# Expor a porta que a aplicação irá rodar (ex: 3000)
EXPOSE 3000

# Comando para iniciar a aplicação
CMD ["npm", "start"]
Enter fullscreen mode Exit fullscreen mode

Docker-compose

Docker-compose é uma ferramenta que ajuda a definir e compartilhar aplicativos entre vários containers. Com o docker-compose, você pode definir todos os serviços que compõem a sua aplicação como (Servidores web, banco de dados, cache) em um único arquivo docker-compose.yml.

Vamos criar um arquivo docker-compose.yml para definir esses serviços e gerenciar eles com mais facilidade.

version: '3.8'  

services:
  app:
    image: node:16-alpine  
    working_dir: /app  
    volumes:
      - .:/app  
    ports:
      - "3000:3000"  
    environment:
      - NODE_ENV=development  
    depends_on:
      - db  
    command: npm start 

  db:
    image: mysql:8.0  
    environment:
      MYSQL_ROOT_PASSWORD: example  
      MYSQL_DATABASE: my_database  
    volumes:
      - db_data:/var/lib/mysql  

volumes:
  db_data:

Enter fullscreen mode Exit fullscreen mode
  • version: '3.8': Especifica a versão do Docker Compose.
  • services:: Define os serviços da aplicação.

    • app:: Serviço Node.js.
    • image:: Usa a imagem node:16-alpine.
    • working_dir:: Define o diretório de trabalho no container.
    • volumes:: Sincroniza o diretório atual com o container.
    • ports:: Mapeia a porta 3000 do host para o container.
    • environment:: Define variáveis de ambiente, como NODE_ENV.
    • depends_on:: Estabelece dependência do serviço db.
    • command:: Executa o comando npm start.
    • db:: Serviço MySQL.
    • image:: Usa a imagem mysql:8.0.
    • environment:: Configura a senha do MySQL e o banco de dados.
    • volumes:: Monta um volume para persistência dos dados.
  • volumes:: Define o volume para armazenar dados do banco de dados.

Por fim, executamos o comando:

docker-compose up -d --build
Enter fullscreen mode Exit fullscreen mode

Conclusão

Rodamos uma aplicação em Nodejs em um container Docker e, com a ajuda do nodemon, somo capazes de desenvolver nossa aplicação executada dentro do container sem a necessidade de subir o container toda vez que é feita alguma alteração.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay