Containerização de um Serviço Node.js

A containerização consiste em agrupar um aplicativo, suas dependências e bibliotecas juntas para que possam ser usadas como plug-and-play em qualquer tipo de infraestrutura. Cada agrupamento é chamado de container.

Por que Containerizar um Serviço Node.js?

Conforme discutido na última seção, containerizar um serviço Node.js significaria agrupar o aplicativo, suas dependências, bibliotecas e até configuração em um único container.A containerização tem os seguintes benefícios:

  1. Portátil. Uma vez que agrupamos todos os requisitos do aplicativo em um container, as mesmas imagens podem ser instaladas em desenvolvimento, staging e produção.
  2. Rápido e leve. Os containers tendem a ser muito mais rápidos do que máquinas virtuais (VMs) ou hardware dedicado, pois estão executando apenas os requisitos do aplicativo, enquanto historicamente as VMs ou hardware dedicado inicializariam toda a máquina e todos os aplicativos.
  3. Escalável. Com os dois benefícios acima, a escalabilidade se torna muito fácil, pois os contêineres são rápidos, eficientes e fáceis de implantar. 

Neste artigo, vamos nos concentrar especificamente em containerizar um aplicativo Node.js. 

Pré-requisitos

Ferramentas e Software

Docker (Docker Engine e Docker CLI)

Vamos precisar instalar o Docker para gerenciar nossos contêineres. O Docker Engine lida com o tempo de execução, e o CLI pode ser usado para interagir via linha de comando.

Node.js e npm/yarn Instalados (Para Desenvolvimento/Testes Iniciais)

Vamos precisar do Node.js e npm instalados para instalar as dependências das bibliotecas e executar o serviço.

Kubernetes ou Docker Compose para Gerenciar Múltiplos Contêineres (Opcional)

Vamos precisar do Kubernetes ou Docker Compose para gerenciar vários contêineres. 

Fundamentos

Estrutura de aplicação Node.js:

  • É esperado que o leitor já entenda o papel do arquivo principal (app.js ou index.js) no projeto, juntamente com o papel de outros arquivos como package.json e yarn.lock.
  • Este artigo também não abordará outros aspectos do projeto, como controladores, middleware e rotas. 

Comandos Básicos do Docker e Sintaxe do Dockerfile

Comandos do Docker:

Shell

 

Instruções principais do Dockerfile:

Shell

 

Ambas as tabelas abordadas e a estrutura do Node.js são suficientes para começar a containerizar e implantar seu serviço Node.js.

Configurando o Serviço Node.js

Configurar o ambiente Node.jsé um processo simples. Certifique-se de que você tenha o Node.js instalado em sua máquina.Se você tiver alguma dúvida, consulte o apêndice (1). Uma vez instalado, abra o seu terminal e verifique a instalação digitando

Shell

 

Crie um diretório de projeto e inicialize o projeto da seguinte maneira:

Shell

 

Instale o módulo express

Shell

 

Crie um arquivo de servidor, vamos chamá-lo de server.mjs, onde podemos adicionar a rota e a lógica correspondente à rota. Como este artigo é mais sobre containerização, manteremos a lógica do endpoint muito simples. Algo como isto:

JavaScript

 

Agora seu serviço está pronto para ser iniciado, navegue até o diretório do projeto no terminal e execute este comando:

Shell

 

O serviço está funcionando; se visitarmos  http://localhost:3000,  veremos:

“Bem-vindo ao meu servidor” 

Criando o Dockerfile

Vamos revisar o que é um Dockerfile, ele contém as instruções para construir a imagem do docker. Vamos criar um Dockerfile no diretório raiz. Durante esta etapa, como discutimos nas instruções do Dockerfile, precisamos fazer as seguintes coisas:

Plain Text

 

Construindo e Executando a Imagem do Docker

A partir da raiz do terminal, navegue atéseu projeto e execute o seguinte comando:

Shell

 

Onde nome-da-imagem é o nome da imagem Docker. O . no final define o contexto para o diretório atual.

Uma vez que a imagem esteja construída, criaremos o contêiner e executaremos o aplicativo Node.js usando o seguinte comando:

Shell

 

Após o sucesso do processo acima, você pode verificar se o serviço está em execução executando o comando docker ps e, em seguida, acessando a mesma URL localhost que antes.

Enviando Imagens para um Registro

Agora que sua imagem está pronta, é hora de enviá-la para um registro. Para o escopo deste artigo, vamos enviar apenas para o Docker Hub. O Docker Hub é um serviço baseado em nuvem para armazenar, compartilhar e gerenciar imagens de contêineres Docker.

Crie uma conta em https://hub.docker.com/ e faça login com sua conta.

Shell

 

Depois de fazer login, imagens criadas localmente podem ser adicionadas assim:

Shell

 

Onde:

  • tag é ou latest ou um número de versão.
  • nome-do-repositório é o nome do repositório desejado.

Em seguida, envie a imagem da seguinte maneira:

Shell

 

Conclusão

Como podemos ver, a containerização torna os fluxos de trabalho e serviços complexos rápidos, portáteis e escaláveis ao separar as dependências. Uma vez implementado, toda a equipe se beneficia.Encorajo você a explorar os recursos avançados como compilações de vários estágios e redes de contêineres. Além disso, considere aprender sobre ferramentas de orquestração (por exemplo, Kubernetes) e integrar pipelines de CI/CD para otimizar seu fluxo de desenvolvimento.

Apêndice

  1. Como instalar o node e o npm em seu computador

Source:
https://dzone.com/articles/containerization-of-a-nodejs-service