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.

Top comments (0)