<?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>Forem: Kevin Jimenez</title>
    <description>The latest articles on Forem by Kevin Jimenez (@akevinieron).</description>
    <link>https://forem.com/akevinieron</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%2F255933%2F49aae83c-ca72-4c08-b130-e4d14ebe3ad9.jpeg</url>
      <title>Forem: Kevin Jimenez</title>
      <link>https://forem.com/akevinieron</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/akevinieron"/>
    <language>en</language>
    <item>
      <title>Docker - Introducción parte 2</title>
      <dc:creator>Kevin Jimenez</dc:creator>
      <pubDate>Mon, 28 Oct 2019 08:04:48 +0000</pubDate>
      <link>https://forem.com/akevinieron/docker-introduccion-parte-2-15l2</link>
      <guid>https://forem.com/akevinieron/docker-introduccion-parte-2-15l2</guid>
      <description>&lt;p&gt;En éste artículo hablaremos sobre cuales son los elementos con los que interactuamos al trabajar con Docker. Los principales elementos al trabajar con Docker son:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Contenedores&lt;/li&gt;
&lt;li&gt;Imágenes&lt;/li&gt;
&lt;li&gt;Volúmenes&lt;/li&gt;
&lt;li&gt;Redes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los &lt;strong&gt;contenedores&lt;/strong&gt; son cada uno de los ambientes dentro de nuestro sistema operativo donde se están ejecutando las aplicaciones de forma aislada. Estos ambientes tienen disponible todos los recursos de nuestro sistema (CPU, Ram, Red con salida a internet) a no ser que le hayamos especificado límites. Los contenedores se crean a partir de las imágenes y están llamados a ser &lt;strong&gt;efímeros&lt;/strong&gt; y &lt;strong&gt;"stateless"&lt;/strong&gt; (sin estado), es decir, no deberían alojar datos que necesiten persistir (ver Volúmenes más abajo).&lt;/p&gt;

&lt;p&gt;Las &lt;strong&gt;imágenes&lt;/strong&gt; son los paquetes donde se encuentran la aplicación que podemos ejecutar junto con todas sus dependencias. Los contenedores son instancias de imágenes en ejecución y se pueden crear N cantidad de estas. Las imagenes se crean a partir de un simple archivo de definición llamado Dockerfile, el cual contiene una sintáxis muy sencilla y unas pocos comandos o palabras clave.&lt;/p&gt;

&lt;p&gt;Los &lt;strong&gt;volúmenes&lt;/strong&gt; son el mecanismo de agregar persistencia de datos a los contenedores. En ocasiones estos volúmenes son un enlace entre un directorio del sistema de archivos principal y el del contenedor. Cuando un contenedor es eliminado el volumen sobrevive y seremos capaces de adjuntarlo a un nuevo contenedor para que tenga disponible los datos allí guardados. También es muy utilizado cuando se requiere compartir datos entre contenedores.&lt;/p&gt;

&lt;p&gt;Las &lt;strong&gt;redes&lt;/strong&gt; son el mecanismo que se utiliza para habilitar la comunicación entre dos o más contenedores. Una vez dos contendores conviven en la misma red estos se pueden comunicar a través del nombre del contenedor o algún alias configurable.&lt;/p&gt;

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

&lt;p&gt;Sabiendo lo básico de Docker procedamos a instalarlo.&lt;/p&gt;

&lt;p&gt;El proceso varía de un sistema operativo a otro. Aquí puedes ir a la documentación oficial y buscar el procedimiento en tu sistema operativo: &lt;a href="https://docs.docker.com/v17.09/engine/installation/#supported-platforms"&gt;https://docs.docker.com/v17.09/engine/installation/#supported-platforms&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Manos a la obra
&lt;/h2&gt;

&lt;p&gt;Una vez tengamos instalado Docker, vamos a ejecutar contenedores y veamos lo rápido y fácil que es todo esto.&lt;/p&gt;

&lt;p&gt;Abre la terminal y ejecuta el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;El resultado debería ser algo como esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Docker version 19.03.4, build 9013bf583a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Si es así, tienes Docker correctamente instalado. Sino, debes regresar a la documentación y seguir los pasos con cuidado, atento a cualquier error que podría aparecer en el proceso.&lt;/p&gt;

&lt;p&gt;Ahora vamos a ejecutar el famoso NGINX con el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;¡Listo! Tenemos nuestro primer contenedor ejecutandose.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Y ahora qué sigue?
&lt;/h2&gt;

&lt;p&gt;Entendamos qué ha pasado aquí.&lt;/p&gt;

&lt;p&gt;La primera palabra del comando &lt;em&gt;docker&lt;/em&gt; hacer referencia al binario de docker que no es más que el cliente que le envía órdenes al servidor Docker desde nuestra línea de comandos. La segunda palabra &lt;em&gt;run&lt;/em&gt; es el comando que indica que se debe crear e inmediatamente iniciar un contenedor a partir de una imagen. La última palabra hace referencia a la imagen de Docker que queremos ejecutar, en este caso &lt;em&gt;nginx&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Con este comando y sin necesitar nada más podemos decir que tenemos instalado en nuetro computador un servidor de Nginx. &lt;/p&gt;

&lt;p&gt;¿Cómo comprobamos eso?&lt;/p&gt;

&lt;p&gt;Abriremos otra terminal y ejecutaremos el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Nos saldrá algo como ésto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                          PORTS                  NAMES
946cf26c846b        nginx                        "nginx -g 'daemon of…"   14 seconds ago      Up 13 seconds                   80/tcp                 lucid_lichterman

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



&lt;p&gt;Éste comando nos indica los atributos de nuestro contendor: el Id, la imagen del que fue creado, el tiempo ejecutándose, un nombre que docker le otorgó de manera aleatoria y el puerto en el que está ejecutandose la aplicación. Pero si tratamos de acceder a Nginx por el puerto 80 con nuestro navegador o con curl veremos que NO obtendremos la respuesta que esperabamos debido a que, como hemos mencionado en algunas ocasiones de esta serie de artículos, los contenedores están aislados hasta que definamos lo contrario.&lt;/p&gt;

&lt;p&gt;¡Vamos a hacerlo! Primero detengamos nuestro contenedor con el comando &lt;em&gt;docker stop &lt;/em&gt; y &lt;em&gt;docker rm &lt;/em&gt;, en mi caso sería:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop lucid_lichterman
docker &lt;span class="nb"&gt;rm &lt;/span&gt;lucid_lichterman
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Si volvemos a ejecutar &lt;em&gt;docker ps&lt;/em&gt; veremos el listado de contenedores ejecutandose vacío.&lt;/p&gt;

&lt;p&gt;Ahora ejecutaremos nueva vez el contenedor de Nginx pero en esta ocasion especificaremos que queremos mapear o redirigir el puerto 8085 de nuestro sistema al puerto 80 del contenedor y además le pondremos el nombre &lt;em&gt;server&lt;/em&gt; a nuestro contenedor de Nginx de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--name&lt;/span&gt; server &lt;span class="nt"&gt;-p&lt;/span&gt; 8085:80 nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;¡Ahora si! Si vamos a nuestro navegador y colocamos &lt;em&gt;localhost:8085&lt;/em&gt; veremos la respuesta de Nginx desde nuestro contenedor.&lt;/p&gt;

&lt;p&gt;En el siguiente artículo veremos más detalles sobre cómo esto fué posible y trabajaremos con las imágenes.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>beginners</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Docker - Introducción</title>
      <dc:creator>Kevin Jimenez</dc:creator>
      <pubDate>Wed, 23 Oct 2019 06:34:04 +0000</pubDate>
      <link>https://forem.com/akevinieron/docker-introduccion-kbk</link>
      <guid>https://forem.com/akevinieron/docker-introduccion-kbk</guid>
      <description>&lt;p&gt;Docker ha causado gran revuelo en la comunidad de tecnología mundialmente en los últimos años. Son muchos quienes lo aman y otros sus detractores. Hoy hablaremos un poco sobre este.&lt;/p&gt;

&lt;p&gt;Docker como proyecto nace en marzo de 2013 de la mano de su creador Solomon Hykes bajo la administración de la compañía llamada dotCloud que meses más tarde se convirtió en Docker, Inc.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Qué es Docker realmente?
&lt;/h1&gt;

&lt;p&gt;Docker es una herramienta que permite correr aplicaciones en el sistema operativo con la capacidad de mantener dichas aplicaciones y sus dependencias totalmente aisladas entre sí y también de todas las demás aplicaciones instaladas en dicho sistema operativo.&lt;/p&gt;

&lt;p&gt;A esta capacidad se le ha denominado "tecnología de contenedores". Docker implementa una arquitectura Cliente-Servidor que expone una API RESTful sobre un socket que puede ser UNIX o TCP.&lt;/p&gt;

&lt;p&gt;Puede que ésta explicación o definición nos haga recordar las máquinas virtuales. Se suele hacer una relacion directa entre máquinas virtuales y contenedores, como si fueran una especie de variante. Sin embargo hay diferencias importantes que las separan, tanto en su base técnica como en los casos de uso.&lt;/p&gt;

&lt;p&gt;La capacidad de aislamiento mencionada anteriormente se debe a una carácteristica de Linux llamada "Espacios de Nombres" (Namespaces), con esto se logra aislar los siguientes recursos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Red (&lt;em&gt;Net&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Identificadores de Procesos (&lt;em&gt;PID&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Identificadores de Usuarios (&lt;em&gt;UID&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Puntos de Montaje (&lt;em&gt;Mnt&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Nombres de Host o Nombres de dominio (&lt;em&gt;UTS&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;CPU y Ram (&lt;em&gt;CGroups&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Comunicación entre Procesos (&lt;em&gt;IPC&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cabe destacar que Linux crea un Namespace por defecto por cada uno de estos recursos cuando instalamos el sistema. Docker hace uso de esta característica y se encarga de crear un Namespace nuevo para cada una de las aplicaciones que ejecutemos sobre este. La creación de Namespaces es flexible y opcional, lo que quiere decir que podremos ejecutar aplicaciones con Docker tan aisladas (o poco aisladas) como necesitemos.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Es Docker multiplataforma?
&lt;/h2&gt;

&lt;p&gt;Hasta ahora se ha mencionado mucho el sistema operativo Linux. La verdad es que los Namespaces es algo que existe desde hace mucho tiempo en este sistema operativo y Docker ha venido a darle una implementación más simple, enfocándolo no solo a SysAdmins sino también a desarrolladores. Esto logró que más personas y empresas pusieran interés en esta tecnología hasta que Microsoft también quiso entrar en el juego colaborando muy de la mano con Docker Inc. para lograr ejecutar Docker en las últimas versiones de Windows Server (2016 en adelante) y Windows 10.&lt;/p&gt;

&lt;p&gt;Es interesante que Microsoft haya logrado implementar ésta tecnología de aislamiento de procesos de manera nativa en Windows Server. En el caso de Windows 10 se vale de Hyper-V para crear una máquina virtual con una imagen linux optimizada que únicamente contiene el Docker Daemon (el servidor Docker), instala el Cliente directamente sobre Win10 y lo conecta al servidor mencionado previamente. Algo similar ocurre con Docker para Mac.&lt;/p&gt;

&lt;p&gt;También es posible instalarlo sobre ediciones anteriores a Windows 10 gracias una herramienta llamada Docker Toolbox que se vale de VirtualBox en la ausencia de Hyper-V.&lt;/p&gt;

&lt;p&gt;Docker es capaz de correr sobre arquitectura ARM también.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué sigue?
&lt;/h2&gt;

&lt;p&gt;En un próximo artículo estaremos profundizando un poco más de esta maravillosa herramienta.&lt;/p&gt;

&lt;p&gt;¡Hasta luego!&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>docker</category>
      <category>containers</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
