{"id":2985,"date":"2017-04-04T08:00:22","date_gmt":"2017-04-04T15:00:22","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2985"},"modified":"2025-06-13T20:15:22","modified_gmt":"2025-06-14T03:15:22","slug":"deploy-node-js-couchbase-web-application-docker-containers","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/deploy-node-js-couchbase-web-application-docker-containers\/","title":{"rendered":"Implanta\u00e7\u00e3o do Docker Node.js com o Couchbase"},"content":{"rendered":"<p>O Docker est\u00e1 se tornando cada vez mais popular e eu o tenho introduzido lentamente em meus projetos.  Ele facilita a distribui\u00e7\u00e3o dos seus aplicativos porque, independentemente de onde voc\u00ea implantar os cont\u00eaineres, a experi\u00eancia ser\u00e1 a mesma. <span style=\"font-weight: 400\">Vamos ver como isso funciona usando o Docker e o Node.js, que tem muitas varia\u00e7\u00f5es. Embora eles geralmente funcionem <\/span><span style=\"font-weight: 400\">independentemente do<\/span><span style=\"font-weight: 400\"> cen\u00e1rio de aplicativos Web, n\u00e3o \u00e9 poss\u00edvel ter certeza ao usar o tempo de execu\u00e7\u00e3o do Node.js.<\/span><\/p>\n<p>Veremos como criar um <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/resources\/why-nosql\/\">NoSQL<\/a> e implant\u00e1-lo junto com um cont\u00eainer de aplicativo da Web personalizado que usa o Node e o Docker para encapsular o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a> fun\u00e7\u00f5es.<\/p>\n<h2>O que \u00e9 o Node.js?<\/h2>\n<p>Antes de come\u00e7armos o tutorial, vamos dedicar um minuto para definir <strong>Node.js<\/strong>. Em vez de ser executado em um navegador, o Node \u00e9 um tempo de execu\u00e7\u00e3o de c\u00f3digo 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\u00edvel para os usu\u00e1rios, mas que fornecem funcionalidade crucial para as empresas modernas. O Couchbase \u00e9 otimizado para executar aplicativos criados com o Node.js. Este tutorial demonstra como aproveitar esse recurso emparelhando o Node.js e os cont\u00eaineres do Docker.<\/p>\n<p><!--more--><\/p>\n<p>Se esta \u00e9 a primeira vez que voc\u00ea est\u00e1 sendo exposto a <a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker<\/a> vamos detalhar o que esperamos alcan\u00e7ar.  O Couchbase publicou uma imagem oficial do Docker para <a href=\"https:\/\/hub.docker.com\/_\/couchbase\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker Hub<\/a> para os desenvolvedores do Node.js, mas a imagem n\u00e3o \u00e9 pr\u00e9-provisionada.  Isso n\u00e3o \u00e9 ruim e \u00e9 definitivamente o que esperamos de um cont\u00eainer de banco de dados.  Isso significa que precisamos criar uma imagem personalizada com base na imagem oficial, caso contr\u00e1rio, quando implantarmos o Couchbase, ele n\u00e3o ter\u00e1 sido configurado.  Vamos usar <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/containerize-node-js-application-communicates-couchbase-server\/\">escrever um aplicativo em Node.js e \"Dockeriz\u00e1-lo\"<\/a> em um pacote de cont\u00eainer.  Esses dois cont\u00eaineres do Docker do Couchbase e do Node.js poder\u00e3o se comunicar entre si.<\/p>\n<h2>Cria\u00e7\u00e3o de uma imagem e um cont\u00eainer do Docker do Couchbase Server personalizado<\/h2>\n<p>Crie um diret\u00f3rio em algum lugar do seu computador e inclua os dois arquivos a seguir:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">Dockerfile\r\nconfigure.sh<\/pre>\n<p>O arquivo de dockerfile de exemplo - <strong>Dockerfile<\/strong> - representar\u00e1 nossa imagem personalizada, e o <strong>configure.sh<\/strong> ser\u00e1 um script de tempo de execu\u00e7\u00e3o para quando implantarmos o nosso cont\u00eainer.<\/p>\n<p>Abra o\u00a0<strong>Dockerfile<\/strong> e inclua o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">DE couchbase\r\n\r\nCOPIAR configure.sh \/opt\/couchbase\r\n\r\nCMD [\"\/opt\/couchbase\/configure.sh\"]<\/pre>\n<p>Nossa imagem personalizada usar\u00e1 a imagem oficial do Couchbase como base.  No momento da compila\u00e7\u00e3o, o script de configura\u00e7\u00e3o ser\u00e1 copiado para a imagem.  Quando for executado, o script ser\u00e1 executado.  Vamos dar uma olhada nesse script.<\/p>\n<p>Abra o\u00a0<strong>configure.sh<\/strong> e inclua o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">set -m\r\n\r\n\/entrypoint.sh couchbase-server &amp;\r\n\r\nsleep 15\r\n\r\ncurl -v -X POST https:\/\/127.0.0.1:8091\/pools\/default -d memoryQuota=512 -d indexMemoryQuota=512\r\n\r\ncurl -v https:\/\/127.0.0.1:8091\/node\/controller\/setupServices -d services=kv%2cn1ql%2Cindex\r\n\r\ncurl -v https:\/\/127.0.0.1:8091\/settings\/web -d port=8091 -d username=$COUCHBASE_ADMINISTRATOR_USERNAME -d password=$COUCHBASE_ADMINISTRATOR_PASSWORD\r\n\r\ncurl -i -u $COUCHBASE_ADMINISTRATOR_USERNAME:$COUCHBASE_ADMINISTRATOR_PASSWORD -X POST https:\/\/127.0.0.1:8091\/settings\/indexes -d 'storageMode=memory_optimized'\r\n\r\ncurl -v -u $COUCHBASE_ADMINISTRATOR_USERNAME:$COUCHBASE_ADMINISTRATOR_PASSWORD -X POST https:\/\/127.0.0.1:8091\/pools\/default\/buckets -d name=$COUCHBASE_BUCKET -d bucketType=couchbase -d ramQuotaMB=128 -d authType=sasl -d saslPassword=$COUCHBASE_BUCKET_PASSWORD\r\n\r\nsleep 15\r\n\r\ncurl -v https:\/\/127.0.0.1:8093\/query\/service -d \"statement=CREATE PRIMARY INDEX ON \\`$COUCHBASE_BUCKET\\`\"\r\n\r\nfg 1<\/pre>\n<p>Novamente, o objetivo do\u00a0<strong>configure.sh<\/strong> \u00e9 provisionar o servidor depois que ele for iniciado.  Para fazer isso, podemos usar a API RESTful do Couchbase.  A configura\u00e7\u00e3o inclui a cria\u00e7\u00e3o de um cluster, a ativa\u00e7\u00e3o dos servi\u00e7os do Couchbase, a defini\u00e7\u00e3o de credenciais de administra\u00e7\u00e3o, a cria\u00e7\u00e3o de um bucket e a cria\u00e7\u00e3o de um \u00edndice N1QL no bucket.<\/p>\n<p>No script de configura\u00e7\u00e3o, voc\u00ea notar\u00e1 que v\u00e1rias vari\u00e1veis de ambiente est\u00e3o sendo usadas, por exemplo, a vari\u00e1vel\u00a0<code>$COUCHBASE_ADMINISTRATOR_USERNAME<\/code> vari\u00e1vel.  Isso nos poupar\u00e1 de codificar informa\u00e7\u00f5es potencialmente confidenciais na imagem.  Em vez disso, podemos definir essas vari\u00e1veis na implanta\u00e7\u00e3o.<\/p>\n<p>Agora vamos criar a imagem personalizada do Couchbase para o nosso projeto.  No Docker Shell, execute o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">docker build -t couchbase-custom \/path\/to\/directory\/with\/dockerfile<\/pre>\n<p>No comando acima, o\u00a0<code>couchbase-custom<\/code> text \u00e9 o nome da nossa imagem, enquanto o path \u00e9 o caminho para a nossa\u00a0<strong>Dockerfile<\/strong> e\u00a0<strong>configure.sh<\/strong> arquivos.<\/p>\n<p>Com a imagem personalizada criada para o Couchbase, execute o seguinte comando para execut\u00e1-la:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">docker run -d \\\r\n-p 8091-8093:8091-8093 \\\r\n-e COUCHBASE_ADMINISTRATOR_USERNAME=Administrator \\\r\n-e COUCHBASE_ADMINISTRATOR_PASSWORD=password \\\r\n-e COUCHBASE_BUCKET=default \\\r\n-e COUCHBASE_BUCKET_PASSWORD= \\\r\n--network=\"docker_default\" \\\r\n--name couchbase \\\r\ncouchbase-custom<\/pre>\n<p>O comando acima diz que queremos implantar um cont\u00eainer, mapeando cada uma das portas necess\u00e1rias do Couchbase.  Passamos as vari\u00e1veis de ambiente que s\u00e3o encontradas em nosso\u00a0<strong>configure.sh<\/strong> e definimos em qual rede queremos que o cont\u00eainer seja executado.  O cont\u00eainer ter\u00e1 o nome de\u00a0<code>couchbase<\/code>que tamb\u00e9m ser\u00e1 o nome do host do cont\u00eainer.<\/p>\n<h2>Cria\u00e7\u00e3o de um aplicativo da Web de API RESTful do Node.js<\/h2>\n<p>Com o Couchbase instalado e em execu\u00e7\u00e3o, podemos desenvolver um aplicativo Node.js simples.  Crie um diret\u00f3rio em algum lugar do seu computador para representar nosso projeto.  Dentro desse projeto, crie um arquivo\u00a0<strong>app.js<\/strong> arquivo.  Vamos instalar pacotes privados com o NPM em um cont\u00eainer do Docker. No prompt de comando ou no terminal, execute o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">npm init --y<\/pre>\n<p>O comando acima criar\u00e1 um arquivo\u00a0<strong>package.json<\/strong> que ser\u00e1 a base do nosso aplicativo Node.js.  H\u00e1 algumas depend\u00eancias que precisam ser instaladas, portanto, vamos executar o seguinte para obt\u00ea-las:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">npm install express couchbase body-parser uuid --save<\/pre>\n<p>Estaremos usando <code>expresso<\/code>\u00a0para criar nossa API, <code>couchbase<\/code>\u00a0como nosso SDK,\u00a0<code>analisador de corpo<\/code> para trabalhar com corpos POST, e\u00a0<code>uuid<\/code> para gerar valores de identifica\u00e7\u00e3o exclusivos que representar\u00e3o as chaves do documento.<\/p>\n<p>Com a base do aplicativo pronta, podemos come\u00e7ar a desenvolver o aplicativo.  Abra a se\u00e7\u00e3o\u00a0<strong>app.js<\/strong> e inclua o seguinte c\u00f3digo:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">var Couchbase = require(\"couchbase\");\r\nvar Express = require(\"express\");\r\nvar BodyParser = require(\"body-parser\");\r\nvar UUID = require(\"uuid\");\r\n\r\nvar app = Express();\r\nvar N1qlQuery = Couchbase.N1qlQuery;\r\nvar bucket = (new Couchbase.Cluster(\"couchbase:\/\/\" + process.env.COUCHBASE_HOST)).openBucket(process.env.COUCHBASE_BUCKET, process.env.COUCHBASE_BUCKET_PASSWORD);\r\n\r\napp.use(BodyParser.json());\r\n\r\napp.get(\"\/\", function(request, response) {\r\n    response.send(\"Try using the `\/get` or `\/save` endpoints!\");\r\n});\r\n\r\napp.get(\"\/get\", function(request, response) {\r\n    var query = N1qlQuery.fromString(\"SELECT `\" + bucket._name + \"`.* FROM `\" + bucket._name + \"`\");\r\n    bucket.query(query, function(error, result) {\r\n        if(error) {\r\n            return response.status(500).send(error);\r\n        }\r\n        response.send(result);\r\n    });\r\n});\r\n\r\napp.post(\"\/save\", function(request, response) {\r\n    bucket.insert(UUID.v4(), request.body, function(error, result) {\r\n        if(error) {\r\n            return response.status(500).send(error);\r\n        }\r\n        response.send(result);\r\n    });\r\n});\r\n\r\nvar server = app.listen(process.env.APPLICATION_PORT || 3000, function() {\r\n    console.log(\"Listening on port \" + server.address().port + \"...\");\r\n});<\/pre>\n<p>Ent\u00e3o, o que est\u00e1 acontecendo no c\u00f3digo acima?<\/p>\n<p>Primeiro, importamos todas as depend\u00eancias baixadas e, em seguida, estabelecemos uma conex\u00e3o com o Couchbase.  Voc\u00ea perceber\u00e1 que estamos usando\u00a0<code>process.env<\/code> em todo o c\u00f3digo.  Isso nos permite ler as vari\u00e1veis de ambiente.  Usaremos uma abordagem semelhante \u00e0 que vimos na imagem do Couchbase.<\/p>\n<p>A API tem dois pontos de extremidade que realmente fazem alguma coisa.  O\u00a0<code>\/salvar<\/code> inserir\u00e1 o que estiver no corpo da solicita\u00e7\u00e3o e o ponto de extremidade\u00a0<code>\/get<\/code> consultar\u00e1 o que estiver salvo no Couchbase.<\/p>\n<h2>Containeriza\u00e7\u00e3o do aplicativo da Web Node.js<\/h2>\n<p>Com o aplicativo criado, precisamos coloc\u00e1-lo em um cont\u00eainer para que possa ser implantado facilmente com o Docker.  No mesmo diret\u00f3rio que seu\u00a0<strong>package.json<\/strong> adicione os dois arquivos a seguir:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">Dockerfile\r\n.dockerignore<\/pre>\n<p>O plano \u00e9 criar uma imagem personalizada com base na imagem oficial do Docker do Node.js.  Dentro da imagem\u00a0<strong>Dockerfile<\/strong> inclua o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">FROM node:6-alpine\r\n\r\nCOPY . \/srv\/\r\nWORKDIR \/srv\r\n\r\nRUN \/usr\/local\/bin\/npm install\r\n\r\nCMD \/usr\/local\/bin\/node app.js<\/pre>\n<p>Durante o tempo de cria\u00e7\u00e3o da imagem, copiaremos nosso projeto para o sistema de arquivos da imagem e alteraremos o diret\u00f3rio de trabalho.  Em seguida, instalaremos todas as depend\u00eancias encontradas no diret\u00f3rio\u00a0<strong>package.json<\/strong> arquivo.  Quando o cont\u00eainer \u00e9 implantado, o arquivo\u00a0<strong>app.js<\/strong> ser\u00e1 executado.<\/p>\n<p>Voc\u00ea deve estar se perguntando por que estamos fazendo uma instala\u00e7\u00e3o quando criamos a imagem.  Estamos fazendo isso porque n\u00e3o queremos copiar as depend\u00eancias para a imagem, pois pode haver incompatibilidades de sistema operacional e arquitetura.  Para excluir as\u00a0<strong>m\u00f3dulos_n\u00f3<\/strong> de nossa imagem, inclua o seguinte no diret\u00f3rio\u00a0<strong>.dockerignore<\/strong> file:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">m\u00f3dulos_n\u00f3<\/pre>\n<p>Tudo o que voc\u00ea quiser excluir da imagem pode ir para esse arquivo.<\/p>\n<p>Para criar essa imagem, execute o seguinte no Docker Shell:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">docker build -t nodejs-custom \/path\/to\/directory\/with\/dockerfile<\/pre>\n<p>O nome da imagem para nosso aplicativo Node.js ser\u00e1 chamado\u00a0<code>nodejs-custom<\/code> e ser\u00e1 baseado no diret\u00f3rio que cont\u00e9m o arquivo\u00a0<strong>Dockerfile<\/strong> arquivo.  Mais informa\u00e7\u00f5es sobre a cria\u00e7\u00e3o de imagens personalizadas do Docker podem ser encontradas em um <a href=\"https:\/\/www.thepolyglotdeveloper.com\/2017\/03\/build-custom-docker-image-containerized-web-application\/\" target=\"_blank\" rel=\"noopener noreferrer\">Artigo anterior<\/a> que eu escrevi.<\/p>\n<p>Com a imagem dispon\u00edvel, precisamos execut\u00e1-la.  No Docker Shell, execute o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">docker run -d \\\r\n-p 3000:3000 \\\r\n-e COUCHBASE_HOST=couchbase \\\r\n-e COUCHBASE_BUCKET=default \\\r\n-e COUCHBASE_BUCKET_PASSWORD= \\\r\n-e APPLICATION_PORT=3000 \\\r\n--network=\"docker_default\" \\\r\n--name nodejs \\\r\nnodejs-custom<\/pre>\n<p>O comando acima deve parecer familiar ao que vimos na implanta\u00e7\u00e3o do Couchbase.  Estamos definindo o mapeamento de portas do nosso aplicativo, passando as vari\u00e1veis de ambiente que s\u00e3o usadas no\u00a0<strong>app.js<\/strong> definindo a rede do cont\u00eainer e o nome da imagem.<\/p>\n<p>Se voc\u00ea acessar o navegador da Web e navegar para qualquer um dos endpoints do aplicativo da Web, ele dever\u00e1 funcionar bem.<\/p>\n<h2>Uso de um arquivo Compose para implanta\u00e7\u00e3o de cont\u00eaineres do Docker<\/h2>\n<p>Ter que lembrar de todas as vari\u00e1veis de ambiente e de tudo no comando para implementar os cont\u00eaineres pode ser doloroso.  Criar um arquivo Compose pode tornar as coisas muito mais simples.<\/p>\n<p>Depois de criar suas duas imagens personalizadas, crie um arquivo\u00a0<strong>docker-compose.yml<\/strong> em algum lugar de seu computador.  Esse arquivo deve conter o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">version: '2'\r\n\r\nservices:\r\n    couchbase:\r\n        image: couchbase-custom\r\n        ports:\r\n            - 8091:8091\r\n            - 8092:8092\r\n            - 8093:8093\r\n        environment:\r\n            - COUCHBASE_ADMINISTRATOR_USERNAME=Administrator\r\n            - COUCHBASE_ADMINISTRATOR_PASSWORD=password\r\n            - COUCHBASE_BUCKET=default\r\n            - COUCHBASE_BUCKET_PASSWORD=\r\n\r\n    nodejs:\r\n        image: nodejs-custom\r\n        ports:\r\n            - 3000:3000\r\n        environment:\r\n            - COUCHBASE_HOST=couchbase\r\n            - COUCHBASE_BUCKET=default\r\n            - COUCHBASE_BUCKET_PASSWORD=\r\n            - APPLICATION_PORT=3000\r\n        restart: always<\/pre>\n<p>Ao usar o Compose, voc\u00ea n\u00e3o precisa se preocupar em definir a rede, pois tudo no arquivo estar\u00e1 na mesma rede.  Para iniciar qualquer um dos cont\u00eaineres, execute o seguinte:<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">docker-compose run -d --service-ports --name couchbase couchbase<\/pre>\n<p>Com o Couchbase, voc\u00ea n\u00e3o pode rodar tudo junto porque o Couchbase n\u00e3o tem um m\u00e9todo para informar quando est\u00e1 pronto.  Por isso, o aplicativo Node.js pode tentar se conectar antes que o Couchbase esteja pronto para aceitar conex\u00f5es.<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">docker-compose up -d<\/pre>\n<p>O comando acima geralmente ativa todos os cont\u00eaineres no arquivo Compose, mas n\u00e3o podemos us\u00e1-lo neste cen\u00e1rio.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Se estiver se perguntando como pode implantar seu aplicativo da Web Node.js com Couchbase, o Docker \u00e9 uma solu\u00e7\u00e3o f\u00e1cil.  Depois de criar imagens do Couchbase ou do Node.js, voc\u00ea pode confiar que ele funcionar\u00e1 da mesma forma em qualquer servidor ou computador que esteja executando o Docker Engine.<\/p>\n<p>Para obter mais informa\u00e7\u00f5es sobre como usar o SDK do Couchbase Node.js, consulte a se\u00e7\u00e3o <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/sdk\/nodejs\/start-using-sdk.html\" target=\"_blank\" rel=\"noopener noreferrer\">Portal do desenvolvedor do Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Docker is becoming increasingly popular and I&#8217;ve been slowly introducing it into my projects. \u00a0It makes it easy to distribute your applications because regardless of where you deploy your containers to, the experience will be the same. Let\u2019s see how [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,9327,1822],"tags":[1520,1519,1896,1543,1776],"ppma_author":[9032],"class_list":["post-2985","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-javascript","category-node-js","tag-containers","tag-docker","tag-docker-compose","tag-javascript","tag-web-application"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Node.js Deployment With Couchbase Web Application<\/title>\n<meta name=\"description\" content=\"Create a Node.js application that uses Couchbase Server along with Docker containers for web app deployment. \u2713 Learn more with Couchbase!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/deploy-node-js-couchbase-web-application-docker-containers\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Node.js Deployment With Couchbase\" \/>\n<meta property=\"og:description\" content=\"Create a Node.js application that uses Couchbase Server along with Docker containers for web app deployment. \u2713 Learn more with Couchbase!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/deploy-node-js-couchbase-web-application-docker-containers\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-04T15:00:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:15:22+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Docker Node.js Deployment With Couchbase\",\"datePublished\":\"2017-04-04T15:00:22+00:00\",\"dateModified\":\"2025-06-14T03:15:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/\"},\"wordCount\":1402,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"containers\",\"docker\",\"docker-compose\",\"javascript\",\"web application\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"JavaScript\",\"Node.js\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/\",\"name\":\"Docker Node.js Deployment With Couchbase Web Application\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-04-04T15:00:22+00:00\",\"dateModified\":\"2025-06-14T03:15:22+00:00\",\"description\":\"Create a Node.js application that uses Couchbase Server along with Docker containers for web app deployment. \u2713 Learn more with Couchbase!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Node.js Deployment With Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker Node.js Deployment With Couchbase Web Application","description":"Crie um aplicativo Node.js que use o Couchbase Server junto com cont\u00eaineres do Docker para implanta\u00e7\u00e3o de aplicativos Web. Saiba mais sobre o Couchbase!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/deploy-node-js-couchbase-web-application-docker-containers\/","og_locale":"pt_BR","og_type":"article","og_title":"Docker Node.js Deployment With Couchbase","og_description":"Create a Node.js application that uses Couchbase Server along with Docker containers for web app deployment. \u2713 Learn more with Couchbase!","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/deploy-node-js-couchbase-web-application-docker-containers\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-04-04T15:00:22+00:00","article_modified_time":"2025-06-14T03:15:22+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Docker Node.js Deployment With Couchbase","datePublished":"2017-04-04T15:00:22+00:00","dateModified":"2025-06-14T03:15:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/"},"wordCount":1402,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["containers","docker","docker-compose","javascript","web application"],"articleSection":["Best Practices and Tutorials","Couchbase Server","JavaScript","Node.js"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/","url":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/","name":"Docker Node.js Deployment With Couchbase Web Application","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-04-04T15:00:22+00:00","dateModified":"2025-06-14T03:15:22+00:00","description":"Crie um aplicativo Node.js que use o Couchbase Server junto com cont\u00eaineres do Docker para implanta\u00e7\u00e3o de aplicativos Web. Saiba mais sobre o Couchbase!","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/deploy-node-js-couchbase-web-application-docker-containers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Node.js Deployment With Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, defensor dos desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy \u00e9 um defensor das modernas tecnologias de desenvolvimento m\u00f3vel e da Web. Ele tem experi\u00eancia em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experi\u00eancias de desenvolvimento relacionadas a tornar o desenvolvimento m\u00f3vel e da Web mais f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy \u00e9 um defensor das modernas tecnologias de desenvolvimento m\u00f3vel e da Web. Ele tem experi\u00eancia em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experi\u00eancias de desenvolvimento relacionadas a tornar o desenvolvimento m\u00f3vel e da Web mais f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2985"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2985\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2985"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2985"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2985"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}