Reinicio automático de uma aplicação Nodejs com Docker
Guilherme Gomes
Posted on September 9, 2024
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
Instalação Local
npm install --save-dev nodemon
package.json
{
"scripts": {
"start": "nodemon index.js"
}
}
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"]
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:
-
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 imagemnode:16-alpine
. -
working_dir:
: Define o diretório de trabalho no container. -
volumes:
: Sincroniza o diretório atual com o container. -
ports:
: Mapeia a porta3000
do host para o container. -
environment:
: Define variáveis de ambiente, comoNODE_ENV
. -
depends_on:
: Estabelece dependência do serviçodb
. -
command:
: Executa o comandonpm start
. -
db:
: Serviço MySQL. -
image:
: Usa a imagemmysql: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
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.
Posted on September 9, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.