<?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: Ruslan Gonzalez</title>
    <description>The latest articles on DEV Community by Ruslan Gonzalez (@ruslangonzalez).</description>
    <link>https://dev.to/ruslangonzalez</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%2F205982%2Fbad66505-0893-4c33-bfc2-92af012548e4.png</url>
      <title>DEV Community: Ruslan Gonzalez</title>
      <link>https://dev.to/ruslangonzalez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruslangonzalez"/>
    <language>en</language>
    <item>
      <title>Configurar YARN en tus proyectos de Angular - VIDEO</title>
      <dc:creator>Ruslan Gonzalez</dc:creator>
      <pubDate>Wed, 15 Apr 2020 15:09:50 +0000</pubDate>
      <link>https://dev.to/ruslangonzalez/configurar-yarn-en-tus-proyectos-de-angular-video-goj</link>
      <guid>https://dev.to/ruslangonzalez/configurar-yarn-en-tus-proyectos-de-angular-video-goj</guid>
      <description>&lt;p&gt;Voy a enseñarte a configurar Yarn en tus proyectos de Angular y qué mejor que a través de un vídeo de Youtube.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://angular.io"&gt;Angular&lt;/a&gt; es un framework para desarrollo de aplicaciones basado en Typescript y mantenido por la comunidad de Google y utilizado por muchas empresas en el sector tecnológico sobre todo para soluciones empresariales robustas, confiables y con gran performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://https://classic.yarnpkg.com/"&gt;Yarn&lt;/a&gt; es un gestor de paquetes de NodeJS, super rápido, que te permitirá usar proyectos como de JavaScript o TypeScript con otros programadores de una manera eficiente y segura.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/WmwNuQ7boAI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Espero que te haya gustado el vídeo, si tienes alguna pregunta por favor no dudes de escribírmela en los comentarios, estaré animado de conocer tus opiniones al respecto.&lt;/p&gt;

&lt;p&gt;Ya lo sabes, no olvides suscribirte, darle me gusta y compartir este artículo o mi vídeo en tus redes sociales para contribuir conmigo.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Has encontrado un error en mi artículo?
&lt;/h2&gt;

&lt;p&gt;Si has encontrado un error tipográfico, expresión, referencia o cualquier cosa que debería mejorar y que debe ser actualizado en este post, puedes hacer un fork de &lt;a href="https://github.com/ruslanguns/my-dev-articles"&gt;mi repositorio&lt;/a&gt; y enviarme un Pull Request con la corrección, o bien, en lugar de hacer un comentario, ruego me lo reportes en &lt;a href="https://github.com/ruslanguns/my-dev-articles/issues"&gt;la sección de issues en el repositorio&lt;/a&gt; de mis artículos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Más artículos de Ruslán González
&lt;/h2&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/ruslangonzalez" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0AgCcUS6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--qJY-kkUx--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/205982/bad66505-0893-4c33-bfc2-92af012548e4.png" alt="ruslangonzalez"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/ruslangonzalez/argumentos-y-variables-de-entorno-en-docker-j9o" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Argumentos y variables de entorno en Docker&lt;/h2&gt;
      &lt;h3&gt;Ruslan Gonzalez ・ Mar 26 '20 ・ 8 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#arguments&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#arg&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#env&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/ruslangonzalez" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0AgCcUS6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--qJY-kkUx--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/205982/bad66505-0893-4c33-bfc2-92af012548e4.png" alt="ruslangonzalez"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/ruslangonzalez/crear-capturas-del-codigo-desde-visual-studio-code-con-codesnap-13hb" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Crear capturas del código desde Visual Studio Code con CodeSnap&lt;/h2&gt;
      &lt;h3&gt;Ruslan Gonzalez ・ Mar 29 '20 ・ 4 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#codesnap&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#visualstudiocode&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#polacode&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#carbon&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>angular</category>
      <category>development</category>
      <category>video</category>
    </item>
    <item>
      <title>Crear capturas del código desde Visual Studio Code con CodeSnap</title>
      <dc:creator>Ruslan Gonzalez</dc:creator>
      <pubDate>Sun, 29 Mar 2020 20:04:45 +0000</pubDate>
      <link>https://dev.to/ruslangonzalez/crear-capturas-del-codigo-desde-visual-studio-code-con-codesnap-13hb</link>
      <guid>https://dev.to/ruslangonzalez/crear-capturas-del-codigo-desde-visual-studio-code-con-codesnap-13hb</guid>
      <description>&lt;p&gt;Si quieres más contenido como éste por favor no dudes en suscribirte y apoyarme con un comentario o difundirlo con el mundo, muchas gracias.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;En este artículo voy a enseñarte cómo capturar el código de tu editor &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; (VSCode) de una forma elegante usando una extensión llamada "&lt;a href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap" rel="noopener noreferrer"&gt;CodeSnap&lt;/a&gt;" totalmente gratuita para nuestro editor favorito, si quieres ver una muestra del resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fruslanguns%2Fmy-dev-articles%2Fmaster%2Fblog-posts%2Fcrear-capturas-del-codigo-desde-visual-studio-code-con-codesnap%2Fassets%2Fcover_image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fruslanguns%2Fmy-dev-articles%2Fmaster%2Fblog-posts%2Fcrear-capturas-del-codigo-desde-visual-studio-code-con-codesnap%2Fassets%2Fcover_image.png" alt="alt CodeSnap"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternativas
&lt;/h2&gt;

&lt;p&gt;Esta no es la única herramienta con la que puedes realizar capturas de código, por ello antes te mostraré un par de alternativas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carbon 😯
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fruslanguns%2Fmy-dev-articles%2Fmaster%2Fblog-posts%2Fcrear-capturas-del-codigo-desde-visual-studio-code-con-codesnap%2Fassets%2Fcarbon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fruslanguns%2Fmy-dev-articles%2Fmaster%2Fblog-posts%2Fcrear-capturas-del-codigo-desde-visual-studio-code-con-codesnap%2Fassets%2Fcarbon.png" alt="alt Carbon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://carbon.now.sh/" rel="noopener noreferrer"&gt;Carbon&lt;/a&gt; es una aplicación web pionera de esta moda, en la que tenemos que copiar el código visitar su web, elegir el lenguaje de nuestro código y posteriormente exportar la imagen, sin duda el resultado es impresionante con más de 25 temas y que soporta muchos lenguajes, puedes también puedes exportar el resultado de la imagen o copiarla mediante una opción que nos ofrece en el portapapeles, compartirla en tu red social de twitter y alguna cosa más. En el caso que se me olvide mencionar algo interesante de esta herramienta, te pido que me lo dejes en los comentarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  Polacode 🤩
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Foctref%2Fpolacode%2Fmaster%2Fdemo%2F2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Foctref%2Fpolacode%2Fmaster%2Fdemo%2F2.png" alt="alt Image polacode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;Polacode&lt;/a&gt; es una extensión de &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt; que la descubrí podo después de comenzar a usar Carbon, básicamente es una herramienta que nos permite tener resultados similares pero que funciona directamente desde el mismo VScode, ésta nos permite a partir de una selección de código generar una imagen con la misma fuente de letras que usamos en nuestro editor, sin duda una de las herramientas más populares de su tipo. Solo puede usarse dentro de VScode por lo que no te será compatible con otros editores de texto. Ésta extensión nos permite personalizar el fondo de pantalla, la transparencia y a lo mejor un par de cosas más.&lt;/p&gt;

&lt;h3&gt;
  
  
  CodeSpap 😱
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkufii%2FCodeSnap%2Fmaster%2Fexamples%2Fmaterial_operator-mono.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkufii%2FCodeSnap%2Fmaster%2Fexamples%2Fmaterial_operator-mono.png" alt="Codesnap"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap" rel="noopener noreferrer"&gt;CodeSnap&lt;/a&gt;, es un proyecto que basado en Polacode por lo que funcionan de la misma manera pero su diferencia está principalmente en las configuraciones avanzadas y en el valor agregado que éste ofrece.&lt;/p&gt;

&lt;h4&gt;
  
  
  Características de CodeSnap
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Guarda capturas de tu pantalla de forma rápida.&lt;/li&gt;
&lt;li&gt;Puedes copiar la imagen a tu portapapeles.&lt;/li&gt;
&lt;li&gt;Puedes mostrar o no las lineas con números.&lt;/li&gt;
&lt;li&gt;Rápido acceso con el botón derecho del ratón (botón secundario)&lt;/li&gt;
&lt;li&gt;Posibilidad de configurar un atajo de teclado,&lt;/li&gt;
&lt;li&gt;y muchas otras configuraciones.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;En los pocos días que llevo probando a &lt;a href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap" rel="noopener noreferrer"&gt;CodeSnap&lt;/a&gt; creo que, y sin lugar a dudas, es mi extensión favorita para compartir trazas de código con mis amigos. Si te gusta VScode tanto como a mi, no querás perder la oportunidad de probar esta increíble extensión.&lt;/p&gt;

&lt;p&gt;Las tres herramientas que les he traído son totalmente open source y seguro que ustedes podrán contribuir con estos proyectos si así lo desean.&lt;/p&gt;

&lt;p&gt;En el caso que no uses &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt; y uses &lt;a href="https://www.sublimetext.com/" rel="noopener noreferrer"&gt;Sublime Text&lt;/a&gt;, &lt;a href="https://atom.io/" rel="noopener noreferrer"&gt;Atom&lt;/a&gt;, o cualquier otro, no cabe duda que la herramienta que yo elegiría sería &lt;a href="https://carbon.now.sh/" rel="noopener noreferrer"&gt;Carbon&lt;/a&gt; ya que es muy fácil de usar y está al alcance de un Copy &amp;amp; Paste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notas finales
&lt;/h2&gt;

&lt;p&gt;Espero que te haya gustado mi artículo no olvides darme un me gusta y compartirlo con otros, déjame en los comentarios tus opiniones, y en el caso que conozcas otras alternativas déjalo en los comentarios, ¡gracias!. 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  Leer más
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Descarga &lt;a href="https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap" rel="noopener noreferrer"&gt;CodeSnap&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Descarga &lt;a&gt;Polacode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Página oficial de &lt;a href="https://carbon.now.sh/" rel="noopener noreferrer"&gt;Carbon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Página oficial de &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Página oficial de &lt;a href="https://atom.io/" rel="noopener noreferrer"&gt;Atom&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Página oficial de &lt;a href="https://www.sublimetext.com/" rel="noopener noreferrer"&gt;Sublime Text&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Has encontrado un error en mi artículo?
&lt;/h2&gt;

&lt;p&gt;Si has encontrado un error tipográfico, expresión, referencia o cualquier cosa que debería mejorar y que debe ser actualizado en este post, puedes hacer un fork de &lt;a href="https://github.com/ruslanguns/my-dev-articles" rel="noopener noreferrer"&gt;mi repositorio&lt;/a&gt; y enviarme un Pull Request con la corrección, o bien, en lugar de hacer un comentario, ruego me lo reportes en &lt;a href="https://github.com/ruslanguns/my-dev-articles/issues" rel="noopener noreferrer"&gt;la sección de issues en el repositorio&lt;/a&gt; de mis artículos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Más artículos de Ruslán González
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/ruslangonzalez/argumentos-y-variables-de-entorno-en-docker-j9o"&gt;Argumentos y variables de entorno en Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codesnap</category>
      <category>visualstudiocode</category>
      <category>polacode</category>
      <category>carbon</category>
    </item>
    <item>
      <title>Argumentos y variables de entorno en Docker</title>
      <dc:creator>Ruslan Gonzalez</dc:creator>
      <pubDate>Thu, 26 Mar 2020 22:39:19 +0000</pubDate>
      <link>https://dev.to/ruslangonzalez/argumentos-y-variables-de-entorno-en-docker-j9o</link>
      <guid>https://dev.to/ruslangonzalez/argumentos-y-variables-de-entorno-en-docker-j9o</guid>
      <description>&lt;p&gt;En la parte inferior del artículo colocaré el enlace al repositorio con el código resultante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;Este artículo esta dirigido para personas que tienen experiencia básica con Docker, o bien desean repasar un poco las bondades que nos ofrece este sistema de contenedores.&lt;/p&gt;

&lt;p&gt;Voy a mostrarte aquí un breve ejemplo para usar los argumentos y variables de entorno en el despliegue de contenedores en Docker, asimismo te enseñaré cómo configurarlas para que sean dinámicas y fáciles de gestionar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pero antes de todo, &lt;strong&gt;¿qué es una variable de entorno?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Una variable de entorno según la &lt;a href="https://en.wikipedia.org/wiki/Environment_variable" rel="noopener noreferrer"&gt;wikipedia&lt;/a&gt; — es un valor con nombre dinámico que puede afectar la forma en que los procesos en ejecución se comportarán en una computadora. Son parte del entorno en el que se ejecuta un proceso —. En otras palabras, imaginemos estamos creando un contenedor que despliegue una imagen con base de datos como MySQL o Postgres, si vamos a las documentaciones oficiales notaremos que para crear una contraseña o un nombre para una base de datos debemos enviarle unos parámetros mediante variables con nuestros valores, pues éstas variables son argumentos la imagen de docker recibirá a través de las variables de entorno.&lt;/p&gt;

&lt;p&gt;Es importante que sepamos qué es un argumento, según nuestra &lt;a href="https://es.wikipedia.org/wiki/Argumento_(inform%C3%A1tica)" rel="noopener noreferrer"&gt;wikipedia&lt;/a&gt;, — un parámetro es una variable utilizada para recibir valores de entrada en una rutina, subrutina o método. Dichos valores, que serán enviados desde la rutina invocante, son llamados argumentos —. Entonces es un argumento que "recibe" el valor del parámetro por parte de las variables de entorno para ejecutar una rutina, o un proceso.&lt;/p&gt;

&lt;p&gt;Si estos conceptos no están aún claros, no te preocupes, intentaré explicártelo en el resto del artículo, pero ahora, con un breve ejemplo, en el que tú podrás diferenciar el uno del otro.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker run &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mi-contraseña mysql


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Ve a &lt;a href="https://hub.docker.com/_/mysql" rel="noopener noreferrer"&gt;este enlace&lt;/a&gt; para saber cómo construir un contenedor de Mysql&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si ejecutamos este comando, notaremos intuitivamente que si pasamos el valor a la variable &lt;code&gt;MYSQL_ROOT_PASSWORD=mi-contraseña&lt;/code&gt; siendo 'mi-contraseña' la contraseña ROOT que estamos asignando a nuestra base de datos y ésta variable de entorno y el parámetro resultante es el que usaremos a continuación para comunicarnos con la base de datos.&lt;/p&gt;

&lt;p&gt;Lo más probable que hayas configurado cientos de veces este tipo de variables, y puede que a lo mejor te preguntes cómo instalar en nuestra imagen el argumento para que esté a la escucha de estos parámetros, pues hoy es tu día de suerte, justamente es eso lo que intentaré enseñarte a continuación.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiración
&lt;/h2&gt;

&lt;p&gt;Cuando programas y haces el deploy de una aplicación, te enfrentas a diferentes retos y procesos, que en este oficio, siempre van en aumento. Hace un tiempo atrás miraba la necesidad de crear una configuración, que sin las variables de entorno, hubiera sido imposible lograr el cometido.&lt;/p&gt;

&lt;p&gt;El uso de argumentos y variables de entorno nos trae un excelente beneficio para comunicarnos con la aplicación mediante parámetros de configuración, data que preferiblemente, y en la mayoría de los casos, debe ser secreta, incluso nos puede ayudar a crear diferentes entornos de programación utilizando una sola configuración.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos a la práctica
&lt;/h2&gt;

&lt;p&gt;Vamos a crear una imagen que nos devuelva un Hola mundo en Docker que nos será suficiente para aprender a utilizar esta técnica.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creación de nuestro entorno de trabajo
&lt;/h3&gt;

&lt;p&gt;Creamos una carpeta en nuestro ordenador en el lugar que queramos, accedemos a ella y dentro creamos un archivo llamado "Dockerfile".&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;docker-env &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;docker-env
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;Dockerfile


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A continuación vamos a introducirle los siguientes datos al archivo Dockerfile:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

// Dockerfile
FROM alpine:3.7
ARG NAME
CMD &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hola &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;¿Qué tenemos aquí?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FROM alpine:3.7&lt;/strong&gt;: Con esto vamos a indicarle a Docker la fuente o sistema operativo de nuestra imagen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ARG NAME&lt;/strong&gt;: Con la opción ARG indicamos el argumento que deseamos para nuestra imagen. Con esto le decimos a Docker, tu esperarás un argumento personalizado al momento de crear la imagen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CMD echo "Hola ${NAME}!"&lt;/strong&gt; Finalmente con esto estamos diciéndole a Docker el comando que queremos que ejecute al momento de lanzar la imagen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En esta configuración lo que hemos logrado, es crearnos una imagen con un sistema operativo basado en la imagen alpine desde su versión 3.7, puedes encontrár más información sobre esta imagen haciendo &lt;a href="https://hub.docker.com/_/alpine" rel="noopener noreferrer"&gt;click aquí&lt;/a&gt;, &lt;/p&gt;

&lt;p&gt;A lo mejor te estas preguntando, ¿qué pasaría si no se define el argumento? bueno, Docker lo único que hace es ignorar y continuar con la ejecución del programa, lo que nos quiere decir que esta variable es undefined, o bien, es como si nunca hubiera existido. Podríamos crear una condición para validar y evitar que el programa se ejecute, o al menos introducirle un valor por defecto, te lo explicaré más adelante en este artículo.&lt;/p&gt;

&lt;p&gt;Ya llego el momento de probar esto en la práctica. Lo primero es crear la imagen con el nombre 'saludo', para ello ejecutaremos la siguiente instrucción:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker build &lt;span class="nt"&gt;-t&lt;/span&gt; saludo &lt;span class="nb"&gt;.&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Después de ejecutarlo, Docker comenzará a descargar las dependencias y creará la imagen en nuestro sistema operativo, y si no nos lanza ningún error raro quiere decir que la imagen ya está lista.&lt;/p&gt;

&lt;p&gt;Ejemplo de lo que obtendremos por consola:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM alpine:3.7
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 6d1ef012b567
Step 2/3 : ARG NAME
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 0cd8f552966f
Step 3/3 : CMD &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hola &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; dc225ab6e03c
Successfully built dc225ab6e03c
Successfully tagged saludo:latest


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ya tenemos nuestra imagen compilada y lista para usarse, ejecuta el siguiente comando con las instrucciones a continuación, para crearnos un contenedor con nombre 'mi-contenedor':&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker run &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Ruslan &lt;span class="nt"&gt;--name&lt;/span&gt; mi-contenedor saludo

// output: Hola Ruslan!


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Si el mensaje de salida es 'Hola Ruslan!', lo has logrado. Y has conseguido configurar un contenedor con una imagen que recibe un argumento dinámicamente.&lt;/p&gt;

&lt;p&gt;Ahora probaremos con el docker-compose, si no le conoces, es una herramienta que nos facilita la vida, nos simplifica la manera de cómo trabajamos con Docker, con él podemos configurar un script con todas las configuraciones para administrar los contenedores de Docker.&lt;/p&gt;

&lt;p&gt;Es momento de probar nuestro argumento dinámico con docker-compose, para esto utilizaremos la instrucción environment.&lt;/p&gt;

&lt;p&gt;Crea un archivo en la raíz de la carpeta con el nombre 'docker-compose.yml, con el contenido siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="s"&gt;// docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.7"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NAME=Ruslan&lt;/span&gt; &lt;span class="c1"&gt;# Aquí estamos haciendo uso del argumento&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Hay muchas formas para invocar las variables de entorno desde docker-compose, yo he elegido la forma más sencilla para evitar complicaciones, si quieres leer más sobre esto, ve a &lt;a href="https://docs.docker.com/compose/environment-variables/" rel="noopener noreferrer"&gt;éste enlace&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Perfecto, ya tenemos lista la configuración y ahora vamos a usarla, ejecuta el siguiente comando en la consola:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker-compose up


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Esta instrucción nos tiene que devolver algo como esto:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

Recreating docker-env_app_1 ... &lt;span class="k"&gt;done
&lt;/span&gt;Attaching to docker-env_app_1
app_1  | Hola Ruslan!
docker-env_app_1 exited with code 0


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Listo!, ya has conseguido configurar variables de entorno en un docker-compose pasándole parámetros mediante los argumentos creados en el Dockerfile de nuestra imagen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repaso
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Hemos creado un Dockerfile que recibe un argumento dinámico&lt;/li&gt;
&lt;li&gt;Hemos lanzado la imagen y nos ha devuelto el valor que hemos pasado con Docker.&lt;/li&gt;
&lt;li&gt;Y finalmente hemos configurado un archivo docker-compose con el mismo objetivo.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;Para proteger nuestra imagen para que no se configure sin un parámetro — en el momento del build — podemos darle un valor por defecto a ese argumento. Veámoslo en código:&lt;/p&gt;

&lt;p&gt;Vamos a editar el archivo Dockerfile y cambiaremos de esto:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

// Dockerfile
FROM alpine:3.7
ARG NAME
CMD &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hola &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;a esto:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

// Dockerfile
FROM alpine:3.7
ARG &lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mundo
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hola &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;
CMD &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hola &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;¿Qué ha pasado? hemos añadido el valor mundo al argumento NAME. Y he añadido una linea más a la instrucción &lt;code&gt;RUN echo "Hola ${NAME}!"&lt;/code&gt; para que nos imprima en el texto del build el valor que hemos puesto, ya que éste solo quedará para reservada para el momento del build de la imagen únicamente guardándose en ella el valor en la configuración por defecto, permitiéndonos a nosotros siempre reconstruir la imagen con otro valor si es necesario.&lt;/p&gt;

&lt;p&gt;Lo primero es recrear la imagen:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker build &lt;span class="nt"&gt;-t&lt;/span&gt; saludo &lt;span class="nb"&gt;.&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Analicemos con atención el output de este comando:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fruslanguns%2Fmy-dev-articles%2Fmaster%2Fblog-posts%2Fdocker-arg-y-variables-de-entorno%2Fassets%2Fdocker2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fruslanguns%2Fmy-dev-articles%2Fmaster%2Fblog-posts%2Fdocker-arg-y-variables-de-entorno%2Fassets%2Fdocker2.jpg" title="Imagen de consola de docker" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notemos que el paso 3/4 nos ha devuelto el Hola mundo!, con total seguridad sabemos que la imagen ha sido creada con esa variable tomada en consideración.&lt;/p&gt;

&lt;p&gt;Sabiendo eso, ahora vamos a consumir la imagen en un contenedor:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker run &lt;span class="nt"&gt;--name&lt;/span&gt; mi-contenedor-2 saludo
// output: Hola &lt;span class="o"&gt;!&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Notemos que a la instrucción sin proveer una variable de entorno, con el nombre "mi-contenedor-2" el output de la consola nos ha devuelto solo 'Hola !', pero no nos ha devuelto el mundo. Esto es un comportamiento esperado, la imagen solo en el momento de crearse ha a alojado el valor del argumento por defecto, y la ha usado para configurar el sistema.&lt;/p&gt;

&lt;p&gt;Si deseamos crear una imagen pero que use otro valor, simplemente debemos proveer la variable de entorno.&lt;/p&gt;

&lt;p&gt;Vamos a probarlo entonces, ejecuta la siguiente instrucción en la consola:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

docker run &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Alexander &lt;span class="nt"&gt;--name&lt;/span&gt; mi-contenedor-3 saludo
// &lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; Hola Alexander!


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Excelente, el contenedor nos ha enviado el resultado que esperábamos y con esto, creo que ya estas listo para que con tu creatividad crees entornos personalizados para tus desarrollos con docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Creo que esta bastante claro que Docker es una solución completa y muy personalizable, el uso de las variables de entorno apenas constituye una pequeña parte de todo lo que Docker puede hacer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leer más
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Documentación oficial: &lt;a href="https://docs.docker.com/engine/reference/builder/#arg" rel="noopener noreferrer"&gt;Argumentos en Docker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Repositorio con el código: &lt;a href="https://github.com/ruslanguns/online-resources/tree/master/articles/docker-arg-y-variables-de-entorno" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Has encontrado un error en mi artículo?
&lt;/h2&gt;

&lt;p&gt;Si has encontrado un error tipográfico, expresión, referencia o cualquier cosa que debería mejorar y que debe ser actualizado en este post, puedes hacer un fork de &lt;a href="https://github.com/ruslanguns/my-dev-articles" rel="noopener noreferrer"&gt;mi repositorio&lt;/a&gt; y enviarme un Pull Request con la corrección, o bien, en lugar de hacer un comentario, ruego me lo reportes en &lt;a href="https://github.com/ruslanguns/my-dev-articles/issues" rel="noopener noreferrer"&gt;la sección de issues en el repositorio&lt;/a&gt; de mis artículos.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>arguments</category>
      <category>arg</category>
      <category>env</category>
    </item>
  </channel>
</rss>
