Hoy es Cl0udswX, quien nos deja un post didáctico y formativo de una temática que avanza pero que no abunda la información en castellano, disfrutadlo!
Introducción

Saludos queridos underc0ders, primero aclarar que lo “dummy” esta en el sentido cariñoso de la palabra, ya que yo no soy ningún experto en la materia, simplemente me ha tocado unos trainings en el área y que mejor forma de reforzar lo aprendido que enseñando. En esta ocasión quiero presentarles un post que considero necesario, ya que en muchos ambientes se suele hablar de contenedores, de Docker, se suelen usar conceptos como “desplegar aplicaciones” ó “entrega de aplicaciones en un entorno funcional” y muchas veces creo que no todo el mundo sabe y conoce del tema en realidad, así que por eso decidí escribir sobre el tema en mi estilo sencillo y “funcional”.

¿Que es un contenedor LINUX?

Para definirlo de forma sencilla digamos que es un espacio donde se empaquetan las aplicaciones junto con todo lo que necesitan para funcionar de forma correcta, sin necesidad de instalar mas cosas (dependencias, librerias, plugins, etc..)

Supongamos que Juan Luis Guerra (pudo haber sido cualquier otro, pero como soy dominicano…) hace conciertos de ciudad en ciudad, y en cada ciudad los técnicos deben instalar las luces, el sonido y los instrumentos musicales, en algunos casos deben solicitar cosas extras para poder funcionar de forma correcta, esto es asi en la vida real, y la logística resulta un poco compleja.

Ahora supongamos que de alguna forma los técnicos logran empaquetar las luces, el sonido y los instrumentos musicales en un contenedor gigante, en el que solamente se debe pinchar un botón para que todo se despliegue sin mas complicaciones, no seria esto mas sencillo?

Pues básicamente esto es lo que hace un contenedor, virtualizar una aplicación a nivel del sistema operativo.

Ventajas de los contenedores:

Portabilidad:
Es posible desplegar la misma aplicación en diferentes entornos de sistemas Linux de forma rápida y precisa

Viajar ligero:
Por razones que explicare mas adelante, se daran cuenta que un contenedor es mucho mas ligero que una VM, tanto en el aspecto del procesamiento, como del almacenamiento.

Autosuficiencia:
Podemos desplegar aplicaciones libres del tedio de tener que instalar cualquier dependencia, librería ó plugin necesario para el buen funcionamiento de la misma.

Supongamos que elijo 10 sistemas al azar entre todos los underc0ders, para instalar linset. Me descargo el tarball, descomprimo, compilo, doy permisos y ejecuto… Lo mas seguro es que consiga algo como esto:

Y en cada sistema me faltarían distintas cosas, quizás podría crearme un script para que después de analizar las herramientas faltantes las instale por si mismo, pero hay cosas que no serán iguales de un sistema a otro (repositorios, manejador de paquetes, conexiones, etc…) con lo cual no creo que llegue a instalar linset en mas de 4 equipos.

Ahora imaginen que previamente empaqueto Linset con todas las herramientas que necesita para funcionar en un contenedor, y que posterior a eso me voy a cada equipo con el contenedor, desplegando asi de forma sencilla y eficaz esta aplicación. Seria mas sencillo no?

¿Que es Docker?

Vamos a wikipedia:

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software.

Con lo cual podriamos deducir que docker es el software con el que se gestionan los contenedores, es el motor que actua entre las aplicaciones y el sistema operativo.

Las principales partes de Docker son:

1.- El demonio Docker: Usado para manejar los contenedores en el sistema host.
2.- La CLI (Command Line Interface) de Docker: Aquí es donde nos comunicamos con los demonios Docker que manejan los contenedores
3.- Indice de imagenes Docker: Es un repositorio publico ó privado para imagenes docker

Los principales componentes de Docker son:

1.- Contenedores Docker:

Realmente esto no es mas que un directorio donde se empaqueta todo lo necesario para desplegar una aplicación en cualquier otro sistema que sea necesario. El único requerimiento necesario para desplegar un contenedores es tener instalado en el sistema anfitrión el software que gestiona dichos contenedores, en este caso Docker.

La magia oculta detrás de esta increíble tecnología se consigue gracias a los LXC (Linux Containers).

 Underc0de - Hacking y seguridad informática-http://cdn.memegenerator.es/imagenes/memes/full/22/22/22225615.jpg

Según wikipedia:

LXC (Linux Containers) es una tecnología de virtualización en el nivel de sistema operativo (SO) para Linux.

Dicho de otra forma podríamos decir que es un conjunto de características que aprovechan directamente el kernel de un sistema operativo y eso le permite manejar aplicaciones asi como los recursos que consumen dentro de un único entorno virtualizado. (Trato de simplificarlo, creanme…)

Características de un contenedor:

¿Qué permiten?

– Potabilidad
-Aislamiento de procesos
-Evitan modificaciones externas
-Administración directa en el consumo de los recursos

¿Qué NO permiten?

-Interferir a otros procesos
-Infierno de dependencias (cuando un paquete de software depende una libreria ó de otro paquete que no funciona con la versión que estamos instalando)
-No son vulnerables de ataques a nivel de aplicación.
-No pueden abusar en el consumo de los recursos del sistema.

2.- Los docker_images:

Esto es la base sobre la que se construye un contenedor, es un sistema de archivos sazonados con los parámetros correctos para que una aplicación pueda funcionar dentro de dicho contenedor, podríamos imaginarlo como un sistema base linux, construido de una forma en la que ya no es posible actualizarlo ni modificarlo.

3.- Y los Dockerfiles:

Son scripts que automatizan el proceso de construir, mantener y manejar una Docker_image.

 Underc0de - Hacking y seguridad informática-http://cdn.memegenerator.es/imagenes/memes/full/22/22/22224711.jpg

Ok filosoforaptor, tranquilo, a continuación explicaré en que se diferencian.

[sociallocker]Diferencias entre un contenedor y una maquina virtual

Digamos que tienen dos diferencias básicas muy marcadas:

1.- Los contenedores ocupan menos espacio en disco.
2.- Funcionan mas rápido que una maquina virtual.

La razón?

Vamos a mirar con detenimiento esta imagen:

Como podemos ver en la imagen, el funcionamiento de la app1, app2 y app3 se apoya en sus propios binarios y librerías, lo que a su vez necesita correr sobre algún sistema operativo, de esa forma cuando virtualizamos un sistema operativo es necesario que algo haga de “falsificador” y le haga creer al sistema operativo que esta corriendo sobre un hardware real, y es ahí cuando necesitamos el hypervisor para que cumpla con su función. Así tenemos una app y sus binarios+librerías corriendo sobre un SO, que a su vez corre sobre el hypervisor.

Todo lo anterior se traduce en mas recursos consumidos (almacenamiento y procesamiento) con lo cual para desplegar una aplicación deberíamos migrar todo el sistema operativo.

En la otra esquina esta el esquema de los contenedores, y como podemos ver se elimina la necesidad de tener un SO funcionando sobre un hypervisor, mas bien tenemos que las aplicaciones se basan en sus binarios y librerias y estas sobre el motor de Docker, y ya..!!!

So Simple..!![/sociallocker]

¿Como instalar Docker? 

En el siguiente enlace puede ver una descriptiva guía (comandos Linux incluídos) de instalación de Docker. No dejes de visitarla.

Guía de instalación de docker

Posts Relacionados

Comments

comments

Deja una respuesta

Tu email no será publicado. Los campos requeridos estan marcados con *
Puedes usar tags HTML y los atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">