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

A containerização é agrupar uma aplicação, suas dependências e bibliotecas juntas para que possam ser usadas como plug-and-play em qualquer tipo de infraestrutura. Cada pacote é chamado de contêiner.

Por que containerizar um serviço Node.js?

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

  1. Portátil. Como agrupamos todos os requisitos do aplicativo em um contêiner, as mesmas imagens podem ser instaladas em desenvolvimento, homologação e produção.
  2. Rápido e leve. Os contêineres tendem a ser muito mais rápidos do que máquinas virtuais (VMs) ou bare metal, pois estão executando apenas os requisitos do aplicativo, enquanto historicamente, as VMs ou bare metal iniciariam 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)

Precisaremos 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 por meio da linha de comando.

Node.js e npm/yarn Instalados (Para Desenvolvimento/Teste Inicial)

Vamos precisar do Node.js e do 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 da 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 Docker Básicos e Sintaxe do Dockerfile

Comandos Docker:

Shell

 

Instruções principais do Dockerfile:

Shell

 

Tanto as tabelas abordadas quanto a estrutura do Node.js são suficientes para começar a contêinerização e implantar seu serviço Node.js.

Configurando o Serviço Node.js

Configurando 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 seu 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 assim:

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á ativo e 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, conforme 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éseuprojeto e execute o seguintecomando:

Shell

 

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

Uma vez que a imagem estiver construída, vamos criar o contêiner e executar o aplicativo Node.js com o seguinte comando:

Shell

 

Após o sucesso do acima, vocêpode verificar que o serviço está em execução executando o comando docker ps e, em seguida, acessando a mesma URL localhost como 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 construídas localmente podem ser adicionadas como:

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 forma:

Shell

 

Conclusão

Como podemos ver, a conteinerização torna 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 disso.Eu o encorajo a explorar os recursos avançados como builds de múltiplas etapas 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 trabalho de desenvolvimento.

Apêndice

  1. Como instalar o node e o npm nasua máquina

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