Introducción al uso de contenedores en Docker: Virtualización

Introducción al uso de contenedores en Docker: Virtualización

¿Qué es Docker?

Docker es una de las creaciones del OpenSource mas importantes recientemente. Es en resumen un programa que ejecuta operaciones de virtualización a nivel del sistema operativo, que se conocen como “empaquetados o en contenedores”.

Docker puede tener también tres significados:

  • La compañía Docker que produce el software.
  • El software para manejo de contenedores Docker.
  • El proyecto OpenSource (Moby)

¿En dónde esta ubicada la compañía Docker?

La compañía Docker esta ubicada en la ciudad de San Francisco California,y fue fundada por Solomon Hykes.

¿Docker es un producto OpenSource o de paga?

Docker existe en dos versiones, Docker Enterprise Edition y Docker Community Edition.

¿Cuáles son las diferencias entre la versión Docker Enterprise y Docker Community Edition?

  • La versión Community contiene todas las características del software Enterprise sin algunos elementos visuales adicionales.
  • Ambas versiones liberan una nueva actualización cada 4 meses.
  • La versión CE (Community Edition) es soportada durante 4 meses.
  • La versión Enterprise es soportada durante 12 meses.

¿Qué es el proyecto OpenSource Moby?

Al proyecto upstream de Docker se le conoce como Moby. Este descompone Docker en mas componentes modulares. El código fuente puede ser descargado del repositorio de GitHub https://github.com/moby/moby.

Docker al poner los sistemas dentro de contenedores permite realizar operaciones de despliegue de aplicaciones (deploys) bastante personalizadas, ya que mantiene dentro de cada contenedor los requerimientos y las dependencias necesarias para poder ejecutar dicha aplicación.

¿Cuándo fue creado Docker?

Docker fue creado en el 2013, y hoy en día es utilizado por un gran número de compañías importante del área de la tecnología.

¿Qué no es Docker?

Docker no es un software como VirtualBox o VMWare, es decir no es una maquina virtual con la que podemos ir salvando el estado de un sistema operativo virtualizado. No es un sistema operativo montado sobre otro. En lugar de utilizar este enfoque, Docker utiliza el kernel del sistema operativo host, y ahorra así una mayor cantidad de recursos de RAM y CPU.

¿Es Docker seguro?

Docker proporciona seguridad a las aplicaciones que se ejecutan dentro de los contenedores, pero al utilizar contenedores la seguridad no existe por default como tal sino que solo se agrega una capa mas debido al aislamiento.

¿Cuáles son los beneficios de utilizar Docker?

Docker aumenta la productividad y estandariza los procesos

Al mantener las aplicaciones dentro de contenedores podemos cerciorarnos de que existe consistencia a través de diferentes plataformas (sistemas operativos) en donde nuestra aplicación se ejecuta, y dejamos de invertir tiempos largos en configuraciones y procesos repetitivos relacionados con el despliegue de dichas aplicaciones. Esto redunda en el aumento del tiempo que como desarrolladores podemos dedicar al desarrollo de la aplicación y no a la infraestructura requerida alrededor de esta.

Nuestra infraestructura forma parte del repositorio

En Docker la configuración de los requerimientos del proyecto vive en un archivo de configuración. Al ser este parte del repositorio de nuestro proyecto, podemos hacer que nuestras dependencias alrededor de dicho proyecto evolucionen de la mano con el proyecto mismo. El provisionamiento puede ser ejecutado entonces de una forma rápida en cosa de minutos y distribuido a través de la lista de los colaboradores.

Docker permite implementar Integración Continua

Una de las ventajas de utilizar Docker es la posibilidad de distribuir la imagen de nuestro proyecto a traves de nuestro proceso de integración continua. Un gran beneficio de esto es la estabilidad que nos permite separar los pasos que no son forzosos y ejecutarlos en forma paralela, y así poder acelerar el tiempo de montaje de nuestro ambiente y de nuestras aplicaciones.

Docker no solo funciona en tu computadora

Cuando se utiliza Docker como herramienta para provisionar un entorno en donde pueda ejecutarse la aplicación, el entorno como tal es el mismo para todos los programadores. Por ello podemos prevenir el famoso “pero si funciona en mi computadora”.

Docker requiere de una configuración sencilla

Al utilizar Docker y hacer el entorno y la configuración parte del proyecto el usuario puede poner su propia configuración dentro del código mismo. Es decir que ademas de provisionar un ambiente de operación también es posible configurar los valores de las variables de entorno que este utiliza.

Docker permite el despliegue rápido (rapid deploys)

Cuando se utiliza Docker el despliegue de la aplicación crea un contenedor nuevo en cada ocasión, los datos asociados a este entorno son nuevos cada ves que este se vuelve a inicializar, es decir no son persistentes.

Consistencia a través de los diferentes entornos

Los contenedores de Docker permiten tener una consistencia a traves de los diferentes ambientes - local, development, staging, production, etc -, asegurándose de que no existan diferencias entre ellos.

Si se requiere realizar una actualización de los requerimientos del contenedor, se pueden hacer primero de forma aislada y una ves que se hayan probados disipar dichos cambias al resto de los entornos. Docker permite construir, probar y desplegar imágenes personalizadas a través de todos estos entornos.

Docker ofrece soporte en múltiples servicios en la nube

Recientemente muchos de los proveedores de servicios en la nube como Amazon AWS y Google Cloud han agregado soporte para el uso de Docker de forma nativa dentro de sus plataformas. De tal forma que incluso si se deseara mover una aplicación montada en Docker, el proceso de migración entre un servicio en la nube y otro resultaría bastante sencillo. Docker también puede ser utilizado por otros proveedores como Azure y OpenStack.

Docker proporciona aislamiento

Docker permite que las aplicaciones y sus recursos se mantengan aislados, es decir que los recursos de un contenedor estén solo disponibles para dicho contenedor y no para los demás. Una ves que la aplicación deje de ser necesaria, cada contenedor puede ser dado de baja individualmente sin dejar rastros dentro del sistema operativo host.

Ademas de lo anterior, Docker permite también que cierta cantidad de recursos sean asignados a cada uno de los contenedores de tal forma que se pueda limitar la cantidad que cada uno de los contenedores demanda.

Seguridad

Por último, el concepto de seguridad va de la mano en gran medida con el uso de contenedores. Al utilizar Docker podemos tener la certeza de que cada contenedor mantiene sus recursos aislados (segregados), y en cierta medida también protegidos de agentes externos.