X

Introducción a Docker para principiantes

Docker es relativamente nuevo y un proyecto que ha crecido de forma rápida dado a que permite crear «Maquinas Virtuales» muy ligeras (en términos de uso de recursos y tiempo de respuesta). Hemos escrito «Máquinas Virtuales» con comillas pues realmente Docker no crea maquinas virtuales en si, sino que son como entornos virtuales enjaulados. Hoy comenzaremos a explorar una introducción a Docker desde cero, para principiantes, para ver por qué Docker se está volviendo tan popular entre la comunidad de desarrolladores.

[wp-svg-icons icon=»stack» wrap=»i»]  Introducción a Docker desde cero

Vamos a explorar algunos principios básicos de Docker, definir como y para que funciona cada propiedad de este potente proyecto que está cambiando la forma en que virtualizamos entornos a nivel de desarrollo web.

Los contenedores son la vía que nos coloca Docker para tener el mismo uso que con las maquinas virtuales creadas de la forma tradicional. Docker utiliza estos contenedores para aislar uno o más procesos. Estos procesos en el Host necesitan Memoria, CPU, Acceso a la Red y espacio en disco.

Es un ambiente perfecto para que las aplicaciones puedes funcionar de forma correcta. Esto incluye algunos ejecutables y librerías específicas, además de la librería estándar de C (libc). Obviamente el Kernel está detrás de muchos de estos componentes y todo el acceso al Kernel es abstracta mediante la librería libc.

 

[wp-svg-icons icon=»disk» wrap=»i»] ¿Qué es una Imagen en Docker?

Una parte básica de la introducción a Docker es entender qué es una imágen. Ya comentamos que Docker y toda su funcionalidad depende o esta principalmente en el manejo de Contenedores ahora bien si bien los contenedores son muy importantes debemos conocer de donde nacen y para esto conoceremos el concepto «Imagen» que viene siendo en si nuestro «sistema operativo» osea podemos decir que tenemos una imagen de Centos, Ubuntu o Debian.

Ahora bien lo bueno de las imágenes es que pueden ser más que solo un sistema operativo y podemos decir que tenemos una imagen de Nginx o una imagen de MySQL o de Memcached ,que estos últimos en si son servicios pero en Docker podemos crear imágenes a partir de unos servicios ya instalados y hasta configurados.

 

[wp-svg-icons icon=»drawer-2″ wrap=»i»] ¿Qué es un Contenedor en Docker?

Los contenedores de Docker nacen a partir de una imagen y en estos contenedores podemos solo ejecutar e instalar servicios, viene siendo como crear una maquina virtual a partir de una imagen (snapshot) pero muchísimo más ligera. Viene siendo como el siguiente ejemplo: tenemos una Imagen de Ubuntu 14.04 con Django instalado y vamos a crear 3 Contenedores a partir de esta imagen de Ubuntu seria algo como esto.

 

 

Ahora los contenedores al igual que las maquinas virtuales tradicionales están aisladas del host, luego cada contenedor debe tener su ID único y un nombre que sea legible por cualquier humano esto es netamente para identificar cada contenedor y luego es necesario que cada contenedor exponga los servicios que necesite y Docker permite exponer puertos del contenedor para que el Host identifique cuando tratemos de entrar a cada puerto lo que es conocido como el port forwarding  podemos ver un ejemplo en la siguiente imagen con los contenedores que hemos creado en el ejemplo anterior

 

Los contenedores están diseñados para ejecutar aplicaciones, es decir, no están originalmente pensados para ejecutar todo lo que lleva una máquina aunque si se puede utilizar los contenedores como máquinas virtuales, pero como veremos perderemos gran flexibilidad ya que la principal funcionalidad que queremos es poder separar la parte de ejecución con los datos.

Esto permite actualizar los servicios de forma rápida y ligera sin afectar los datos de tu aplicación por ejemplo tienes tus datos de tu aplicación en tu máquina Host, luego crear un contenedor y colocar compartida esta carpeta dentro del contenedor, para finalmente después en este contenedor administrar cómo se ejecutarán por ejemplo servicios como Nginx o Apache, y que estos últimos puedan despachar los archivos que están en la carpeta compartida.

Características de una Imagen

  • Portátil: pueden ser versionadas en los repositorios de Docker Hub, o guardarse como un archivo tar.
  • Estática: el contenido no se puede cambiar, a menos que hagas una nueva imagen.

Características de un Contenedor

  • Tiempo de ejecución: cada contenedor se ejecuta en un solo proceso.
  • Permisos de escritura: sólo tendrá permiso a sus propios archivos y a los volúmenes asociados .
  • Capas: es en una imagen en base a un sistema operativo.

Estos términos aparecen en diversos contextos, y es importante ver cómo se relacionan entre sí. Ahora que tenemos estos fundamentos básicos, podemos pasar a conocer más sobre otro importante concepto de Docker: los volúmenes.

[wp-svg-icons icon=»disk» wrap=»i»] ¿Qué son los Volúmenes en Docker?

Los volúmenes son para mantener los datos más allá de la vida útil de su contenedor. Son espacios dentro del contenedor que almacenan datos fuera de ella, lo que le permite destruir / reconstruir / cambiar  las veces que queramos nuestro contenedor y se mantendrán intactos sus datos.

Docker permite definir qué partes son la aplicación y qué partes son sus datos. Uno de los mayores cambios en la mentalidad de que hay que hacer cuando se trabaja con Docker es que los contenedores deben ser efímeros y desechables.

Los volúmenes son específicos de cada contenedor, puedes crear varios contenedores de una sola imagen y definir el volumen para cada uno. Los volúmenes se almacenan en el sistema de archivos del servidor que ejecuta el Docker. Todo lo que no es un volumen se almacena en otro tipo de sistema de archivos, pero lo veremos más adelante, aquí podemos ver un ejemplo en la siguiente imagen.

Conclusión

Ahora hemos visto que es el Docker, cuales son sus principales características, asi pudimos conocer desde donde nacen los Contenedores y a que llamamos Imágenes para luego integrarlo con nuestros Volúmenes de datos con estos conceptos bastante claros podemos pasar a la parte practica de como administrar nuestro Docker para esto vamos a crear un articulo completo en donde podremos aprender cada comando para comenzar a trabajar con Docker.

Si te gustó esta introducción primaria, sígue con la parte 02:

 

Otras lecturas recomendadas:

Cuéntanos: ¿Que te pareció la parte teórica de nuestra Introducción a Docker? ¿Crees que te cambiarías de la maquina virtual tradicional para desarrollar a Docker?

 

Artículos relacionados