O Docker está se tornando cada vez mais popular e eu o tenho introduzido lentamente em meus projetos. Ele facilita a distribuição dos seus aplicativos porque, independentemente de onde você implantar os contêineres, a experiência será a mesma. Vamos ver como isso funciona usando o Docker e o Node.js, que tem muitas variações. Embora eles geralmente funcionem independentemente do cenário de aplicativos Web, não é possível ter certeza ao usar o tempo de execução do Node.js.

Veremos como criar um NoSQL e implantá-lo junto com um contêiner de aplicativo da Web personalizado que usa o Node e o Docker para encapsular o Couchbase funções.

O que é o Node.js?

Antes de começarmos o tutorial, vamos dedicar um minuto para definir Node.js. Em vez de ser executado em um navegador, o Node é um tempo de execução de código aberto e totalmente multiplataforma para executar JavaScript em um ambiente de servidor. Com o Node.js, os desenvolvedores podem criar aplicativos totalmente em nuvem que operam de forma invisível para os usuários, mas que fornecem funcionalidade crucial para as empresas modernas. O Couchbase é otimizado para executar aplicativos criados com o Node.js. Este tutorial demonstra como aproveitar esse recurso emparelhando o Node.js e os contêineres do Docker.

Se esta é a primeira vez que você está sendo exposto a Docker vamos detalhar o que esperamos alcançar. O Couchbase publicou uma imagem oficial do Docker para Docker Hub para os desenvolvedores do Node.js, mas a imagem não é pré-provisionada. Isso não é ruim e é definitivamente o que esperamos de um contêiner de banco de dados. Isso significa que precisamos criar uma imagem personalizada com base na imagem oficial, caso contrário, quando implantarmos o Couchbase, ele não terá sido configurado. Vamos usar escrever um aplicativo em Node.js e "Dockerizá-lo" em um pacote de contêiner. Esses dois contêineres do Docker do Couchbase e do Node.js poderão se comunicar entre si.

Criação de uma imagem e um contêiner do Docker do Couchbase Server personalizado

Crie um diretório em algum lugar do seu computador e inclua os dois arquivos a seguir:

O arquivo de dockerfile de exemplo - Dockerfile - representará nossa imagem personalizada, e o configure.sh será um script de tempo de execução para quando implantarmos o nosso contêiner.

Abra o Dockerfile e inclua o seguinte:

Nossa imagem personalizada usará a imagem oficial do Couchbase como base. No momento da compilação, o script de configuração será copiado para a imagem. Quando for executado, o script será executado. Vamos dar uma olhada nesse script.

Abra o configure.sh e inclua o seguinte:

Novamente, o objetivo do configure.sh é provisionar o servidor depois que ele for iniciado. Para fazer isso, podemos usar a API RESTful do Couchbase. A configuração inclui a criação de um cluster, a ativação dos serviços do Couchbase, a definição de credenciais de administração, a criação de um bucket e a criação de um índice N1QL no bucket.

No script de configuração, você notará que várias variáveis de ambiente estão sendo usadas, por exemplo, a variável $COUCHBASE_ADMINISTRATOR_USERNAME variável. Isso nos poupará de codificar informações potencialmente confidenciais na imagem. Em vez disso, podemos definir essas variáveis na implantação.

Agora vamos criar a imagem personalizada do Couchbase para o nosso projeto. No Docker Shell, execute o seguinte:

No comando acima, o couchbase-custom text é o nome da nossa imagem, enquanto o path é o caminho para a nossa Dockerfileconfigure.sh arquivos.

Com a imagem personalizada criada para o Couchbase, execute o seguinte comando para executá-la:

O comando acima diz que queremos implantar um contêiner, mapeando cada uma das portas necessárias do Couchbase. Passamos as variáveis de ambiente que são encontradas em nosso configure.sh e definimos em qual rede queremos que o contêiner seja executado. O contêiner terá o nome de couchbaseque também será o nome do host do contêiner.

Criação de um aplicativo da Web de API RESTful do Node.js

Com o Couchbase instalado e em execução, podemos desenvolver um aplicativo Node.js simples. Crie um diretório em algum lugar do seu computador para representar nosso projeto. Dentro desse projeto, crie um arquivo app.js arquivo. Vamos instalar pacotes privados com o NPM em um contêiner do Docker. No prompt de comando ou no terminal, execute o seguinte:

O comando acima criará um arquivo package.json que será a base do nosso aplicativo Node.js. Há algumas dependências que precisam ser instaladas, portanto, vamos executar o seguinte para obtê-las:

Estaremos usando expresso para criar nossa API, couchbase como nosso SDK, analisador de corpo para trabalhar com corpos POST, e uuid para gerar valores de identificação exclusivos que representarão as chaves do documento.

Com a base do aplicativo pronta, podemos começar a desenvolver o aplicativo. Abra a seção app.js e inclua o seguinte código:

Então, o que está acontecendo no código acima?

Primeiro, importamos todas as dependências baixadas e, em seguida, estabelecemos uma conexão com o Couchbase. Você perceberá que estamos usando process.env em todo o código. Isso nos permite ler as variáveis de ambiente. Usaremos uma abordagem semelhante à que vimos na imagem do Couchbase.

A API tem dois pontos de extremidade que realmente fazem alguma coisa. O /salvar inserirá o que estiver no corpo da solicitação e o ponto de extremidade /get consultará o que estiver salvo no Couchbase.

Containerização do aplicativo da Web Node.js

Com o aplicativo criado, precisamos colocá-lo em um contêiner para que possa ser implantado facilmente com o Docker. No mesmo diretório que seu package.json adicione os dois arquivos a seguir:

O plano é criar uma imagem personalizada com base na imagem oficial do Docker do Node.js. Dentro da imagem Dockerfile inclua o seguinte:

Durante o tempo de criação da imagem, copiaremos nosso projeto para o sistema de arquivos da imagem e alteraremos o diretório de trabalho. Em seguida, instalaremos todas as dependências encontradas no diretório package.json arquivo. Quando o contêiner é implantado, o arquivo app.js será executado.

Você deve estar se perguntando por que estamos fazendo uma instalação quando criamos a imagem. Estamos fazendo isso porque não queremos copiar as dependências para a imagem, pois pode haver incompatibilidades de sistema operacional e arquitetura. Para excluir as módulos_nó de nossa imagem, inclua o seguinte no diretório .dockerignore file:

Tudo o que você quiser excluir da imagem pode ir para esse arquivo.

Para criar essa imagem, execute o seguinte no Docker Shell:

O nome da imagem para nosso aplicativo Node.js será chamado nodejs-custom e será baseado no diretório que contém o arquivo Dockerfile arquivo. Mais informações sobre a criação de imagens personalizadas do Docker podem ser encontradas em um Artigo anterior que eu escrevi.

Com a imagem disponível, precisamos executá-la. No Docker Shell, execute o seguinte:

O comando acima deve parecer familiar ao que vimos na implantação do Couchbase. Estamos definindo o mapeamento de portas do nosso aplicativo, passando as variáveis de ambiente que são usadas no app.js definindo a rede do contêiner e o nome da imagem.

Se você acessar o navegador da Web e navegar para qualquer um dos endpoints do aplicativo da Web, ele deverá funcionar bem.

Uso de um arquivo Compose para implantação de contêineres do Docker

Ter que lembrar de todas as variáveis de ambiente e de tudo no comando para implementar os contêineres pode ser doloroso. Criar um arquivo Compose pode tornar as coisas muito mais simples.

Depois de criar suas duas imagens personalizadas, crie um arquivo docker-compose.yml em algum lugar de seu computador. Esse arquivo deve conter o seguinte:

Ao usar o Compose, você não precisa se preocupar em definir a rede, pois tudo no arquivo estará na mesma rede. Para iniciar qualquer um dos contêineres, execute o seguinte:

Com o Couchbase, você não pode rodar tudo junto porque o Couchbase não tem um método para informar quando está pronto. Por isso, o aplicativo Node.js pode tentar se conectar antes que o Couchbase esteja pronto para aceitar conexões.

O comando acima geralmente ativa todos os contêineres no arquivo Compose, mas não podemos usá-lo neste cenário.

Conclusão

Se estiver se perguntando como pode implantar seu aplicativo da Web Node.js com Couchbase, o Docker é uma solução fácil. Depois de criar imagens do Couchbase ou do Node.js, você pode confiar que ele funcionará da mesma forma em qualquer servidor ou computador que esteja executando o Docker Engine.

Para obter mais informações sobre como usar o SDK do Couchbase Node.js, consulte a seção Portal do desenvolvedor do Couchbase.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

3 Comentários

  1. [...] há muito tempo, escrevi sobre a conteinerização de uma API RESTful do Node.js e do Couchbase Server para demonstrar como é fácil implementar aplicativos da Web de forma rápida e confiável. Naquele [...]

  2. [...] Se você estiver interessado em implantar um aplicativo da Web Node.js em contêineres que usa contêineres do Couchbase, confira este artigo que escrevi anteriormente chamado Implantar um aplicativo da Web Node.js com Couchbase como contêineres do Docker. [...]

Deixar uma resposta