<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Johan Giraldo</title>
    <description>The latest articles on DEV Community by Johan Giraldo (@jsgiraldoh).</description>
    <link>https://dev.to/jsgiraldoh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F694479%2F39d83317-b2c8-4dbe-aff1-66908ddf0490.jpeg</url>
      <title>DEV Community: Johan Giraldo</title>
      <link>https://dev.to/jsgiraldoh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jsgiraldoh"/>
    <language>en</language>
    <item>
      <title>Desplegar un servicio web con node.js y crear un contenedor que despligue el servicio</title>
      <dc:creator>Johan Giraldo</dc:creator>
      <pubDate>Fri, 27 Aug 2021 14:50:49 +0000</pubDate>
      <link>https://dev.to/docker/desplegar-un-servicio-web-con-node-js-y-crear-un-contenedor-que-despligue-el-servicio-3eo5</link>
      <guid>https://dev.to/docker/desplegar-un-servicio-web-con-node-js-y-crear-un-contenedor-que-despligue-el-servicio-3eo5</guid>
      <description>&lt;p&gt;JavaScript ha pasado de ser un lenguaje utilizado para brindar interactividad a las páginas web, a ser utilizado ahora también en el lado de los servidores gracias a Node.js. Si aún no tienes claro qué es Node.js, puedes revisar este artículo sobre &lt;a href="https://devcode.la/blog/que-es-nodejs/"&gt;qué es Node.js&lt;/a&gt;, donde aprenderás los conceptos básicos que necesitas saber sobre él. Dentro de Node, el código se organiza por módulos o paquetes, así que al momento de trabajar con él va a ser necesario agregar más módulos, es aquí donde entra npm, es el ecosistema más grande de librerías de código abierto en el mundo.&lt;/p&gt;

&lt;p&gt;Node.js permite crear un servidor web, para crearlo, vamos a utilizar NPM (Node Package Manager) y express.js un frawework web.&lt;/p&gt;

&lt;p&gt;Crear un nuevo directorio llamado Node-js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir Node-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;acceder a este directorio&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd Node-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;iniciar el proyecto&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego obtendra la siguiente salida y debera ingresar algunos datos, como muestra la siguiente imagen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C6pf3qm---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b70ttz2brmo39922t31f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C6pf3qm---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b70ttz2brmo39922t31f.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;npm init&lt;/strong&gt; genera un archivo &lt;strong&gt;package.json&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f7_C1nZx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6mto3ifl4879cejq9yko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f7_C1nZx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6mto3ifl4879cejq9yko.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este fichero contiene la información anteriormente proporcionada y además se encarga de controlar los paquetes que instalamos para el proyecto. Por ejemplo, para poder crear nuestro servidor rápidamente, vamos a instalar un paquete llamado &lt;strong&gt;express.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express --save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando instala &lt;strong&gt;express.js&lt;/strong&gt; y además actualiza nuestro archivo package.json gracias al parámetro --save&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8jyLCGwW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tqd7e0abufb4fucfxwk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8jyLCGwW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tqd7e0abufb4fucfxwk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hay una parte importante que nos permitirá ver el funcionamiento del servidor web&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.use(express.static(__dirname + '/public/'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;__dirname&lt;/code&gt; es la raíz del proyecto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta línea le indica al servidor que cuando un usuario haga una petición de archivos estáticos, por ejemplo, &lt;code&gt;http://localhost:8080/index.html&lt;/code&gt; enviará como respuesta el contenido de &lt;code&gt;./public/index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Luego, se crear la carpeta &lt;code&gt;public&lt;/code&gt; y el archivo &lt;code&gt;index.html&lt;/code&gt; con el editor de preferencia o en línea de comandos.&lt;/p&gt;

&lt;p&gt;Para ejecutar el servidor web, se posiciona dentro del directorio &lt;strong&gt;Node-js&lt;/strong&gt; y se ejecuta el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se observara el siguiente mensaje por consola&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IQJXUrBW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8mq2i8ibjtnd1nmrlgf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IQJXUrBW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8mq2i8ibjtnd1nmrlgf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último, abrir el navegador web y se obtendra el index.html, utilizando &lt;code&gt;http://localhost:8080&lt;/code&gt; o &lt;code&gt;http://localhost:8080/index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RMT8-pVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cgup3bs3oer2ewap5jth.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RMT8-pVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cgup3bs3oer2ewap5jth.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Crea un Dockerfile para Node.js
&lt;/h1&gt;

&lt;p&gt;Un Dockerfile es un documento de texto que contiene todos los comandos que un usuario puede llamar en la línea de comandos para ensamblar una imagen. Cuando le decimos a Docker que cree nuestra imagen ejecutando el comando &lt;code&gt;docker build&lt;/code&gt;, Docker lee estas instrucciones y las ejecuta una por una y crea una imagen de Docker como resultado.&lt;/p&gt;

&lt;p&gt;Repasemos el proceso de creación de un &lt;a href="https://jsgiraldoh.io/Blog/Dockerfile"&gt;Dockerfile&lt;/a&gt; para nuestra aplicación. En la raíz de su directorio de trabajo, cree un archivo llamado &lt;code&gt;Dockerfile&lt;/code&gt; y abra este archivo en su editor de texto.&lt;/p&gt;

&lt;p&gt;Lo primero que debemos hacer es agregar una línea en nuestro Dockerfile que le diga a Docker qué imagen base nos gustaría usar para nuestra aplicación.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:carbon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para facilitar las cosas al ejecutar el resto de nuestros comandos, creemos un directorio de trabajo. Esto le indica a Docker que use esta ruta como la ubicación predeterminada para todos los comandos posteriores. De esta manera, no tenemos que escribir las rutas de archivo completas, pero podemos usar rutas relativas basadas en el directorio de trabajo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WORKDIR /usr/src/app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por lo general, lo primero que hace una vez que ha descargado un proyecto escrito en Node.js es instalar paquetes npm. Esto asegura que su aplicación tenga todas sus dependencias instaladas en el directorio &lt;code&gt;node_modules&lt;/code&gt; donde el tiempo de ejecución de Node podrá encontrarlas.&lt;/p&gt;

&lt;p&gt;Antes de que podamos ejecutar &lt;code&gt;npm install&lt;/code&gt;, necesitamos incluir nuestros archivos &lt;code&gt;package.json&lt;/code&gt; y &lt;code&gt;package-lock.json&lt;/code&gt; en nuestras imágenes. Usamos el COPYcomando para hacer esto. El comando &lt;code&gt;COPY&lt;/code&gt; toma dos parámetros. El primer parámetro le dice a Docker qué archivo (s) le gustaría copiar en la imagen. El segundo parámetro le dice a Docker dónde desea que se copien esos archivos. Copiaremos el archivo &lt;code&gt;package.json&lt;/code&gt; y &lt;code&gt;package-lock.json&lt;/code&gt; en nuestro directorio de trabajo &lt;code&gt;/usr/src/app&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COPY . .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez que tenemos nuestros archivos &lt;code&gt;package.json&lt;/code&gt; dentro de la imagen, podemos usar el comando &lt;code&gt;RUN&lt;/code&gt; para ejecutar el comando npm install. Esto funciona exactamente igual que si estuviéramos ejecutando npm install localmente en nuestra máquina, pero esta vez estos módulos de nodo se instalarán en el directorio &lt;code&gt;node_modules&lt;/code&gt; dentro de nuestra imagen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RUN npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora, todo lo que tenemos que hacer es decirle a Docker qué comando queremos ejecutar cuando nuestra imagen se ejecuta dentro de un contenedor. Hacemos esto con el comando &lt;code&gt;CMD.&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CMD ["npm", "start"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí está el Dockerfile completo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:carbon

WORKDIR /usr/src/app

COPY . .

RUN npm install

EXPOSE 8080

CMD ["npm", "start"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego, se procede a contruir la imagen de Docker a partir del fichero Dockerfile que hemos realizado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t node-js-server-web-blog ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para finalizar, se debe ejecutar el contenedor de Docker con la imagen anteriormente creada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --name=node-js-server-web-blog -p 8080:8080 -d node-js-server-web-blog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Abrir el navegador web y se obtendrá el index.html, utilizando &lt;code&gt;http://localhost:8080&lt;/code&gt; o &lt;code&gt;http://localhost:8080/index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RMT8-pVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cgup3bs3oer2ewap5jth.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RMT8-pVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cgup3bs3oer2ewap5jth.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jsgiraldoh/Node-js-server-web-blog.git"&gt;Aquí&lt;/a&gt; se puede encontrar una aplicación de ejemplo que ejercita todos los aspectos que se discutieron.&lt;/p&gt;

&lt;p&gt;Si desea, observar el resultado final, sin necesidad de hacer todo el proceso, ya he preparado una imagen de Docker, la cual puede ejecutar con el siguiente comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --name=node-js-server-web-blog -p 8080:8080 -d jsgiraldoh/node-js-server-web-blog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Referencias
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://devcode.la/blog/que-es-npm/"&gt;https://devcode.la/blog/que-es-npm/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devcode.la/blog/que-es-nodejs/"&gt;https://devcode.la/blog/que-es-nodejs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/es/"&gt;https://nodejs.org/es/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pensemosweb.com/como-crear-servidor-web-5-minutos-nodejs/"&gt;https://www.pensemosweb.com/como-crear-servidor-web-5-minutos-nodejs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/juanda99/curso-node-js/blob/master/5-express.md"&gt;https://github.com/juanda99/curso-node-js/blob/master/5-express.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://expressjs.com/es/guide/using-middleware.html"&gt;https://expressjs.com/es/guide/using-middleware.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/language/nodejs/build-images/"&gt;https://docs.docker.com/language/nodejs/build-images/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/como-crear-una-aplicacion-node-js-con-docker-es"&gt;https://www.digitalocean.com/community/tutorials/como-crear-una-aplicacion-node-js-con-docker-es&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
