Participación destacada de Conasa en IBM Think Madrid 2018
6 noviembre, 2018
Entorno de desarrollo con Docker
28 noviembre, 2018

Contenedores Docker

Contenedores Docker

Desde hace ya algún tiempo cada vez son más frecuentes las noticias sobre tecnología Cloud. En mayor o menor medida quizás hayas oído hablar de la Nube, Contenedores Docker, Kubernetes, Openshift, Microservicios, etc. A menos que te hayas parado a indagar sobre ello, puede que esos conceptos, a pesar de haberlos oído, te sigan sonando a chino y no sepas de qué se trata. De hecho, en nuestro artículo anterior Migración de legacy a Microservicios, mencionamos varios de ellos.

Por todo ello nos gustaría hablar de uno de los componentes más importantes en este campo que, en nuestra opinión, ha revolucionado tanto el mundo del desarrollo como el despliegue y portabilidad de aplicaciones, Docker.

¿Qué son los contenedores Docker?

Se trata de un proyecto Open Source pensado para crear contenedores ligeros y portables para aplicaciones de manera que puedan ejecutarse en cualquier sistema operativo con Docker instalado.

Esa definición todavía sigue siendo algo confusa, por tanto, para acercarlo más a la realidad, vamos a pensar en la definición de “Contenedor”.

Se denominan contenedores por su analogía con los contenedores de los barcos, las características que comparten son muchas: su contenido está aislado, pueden alojar cualquier objeto, se pueden transportar fácilmente. Los contenedores revolucionaron el transporte, redujeron el coste, los tiempos de carga y descarga, los daños en la mercancía… hoy en día el 90% de los envíos se realizan en contenedores estándar.

Ahora bien, si pensamos en una aplicación software, es sencillo deducir que cada una de ellas necesita un entorno en el que funcionar: una máquina, un sistema operativo, con un software específico, unas librerías, etc. Gracias a Docker, podemos encapsular todas las dependencias de una aplicación en un contenedor, consiguiendo aislar la aplicación y sus dependencias y por tanto obteniendo una aplicación más fácil de mover entre servidores, sistemas operativos, localizaciones, etc.

Por otro lado, esta tecnología se considera virtualización ligera ya que, a diferencia de las máquinas virtuales tradicionales, los contenedores son objetos que comparten el kernel de Linux, por tanto, ocupan mucho menos espacio y son mucho más ligeros de arrancar ya que no tienen que iniciar un sistema operativo completo. Por este motivo en un mismo servidor se podría alojar cientos de contenedores, hecho que no ocurre con máquinas virtuales.

Como se puede observar en la imagen, un contenedor no contiene un sistema operativo completo, consiguiendo con ello ser más ligero.

Para lanzar un contenedor debemos ejecutar una imagen siendo ésta un paquete ejecutable que contiene todo lo necesario para ejecutar la aplicación: código, librerías, archivos de configuración, etc. Las imágenes se construyen mediante un archivo de texto llamado Dockerfile que contiene instrucciones que entiende el motor de Docker. En la documentación oficial podemos encontrar un ejemplo de este tipo de archivos:

Una vez generada la imagen la podemos almacenar en un registro de imágenes privado o en el registro público de Docker: Docker Hub. Actualmente en dicho repositorio podemos encontrar una gran cantidad de imágenes que podemos utilizar. Podéis encontrar información más exhaustiva sobre cómo crear imágenes, ejecutar contenedores, desplegar aplicaciones entre otras cosas en la documentación oficial disponible en el siguiente enlace.

Instalación de los contenedores Docker

Docker se puede instalar tanto en MacOS, Linux y Windows con un proceso es muy sencillo. Voy a explicar brevemente como se instala en Ubuntu Xenial 16.04 LTS, no obstante, las instrucciones oficiales las podéis encontrar en el siguiente enlace.

  1. Actualizamos el índice del gestor de paquetes apt: sudo apt-get update
  2. Instalamos algunos paquetes necesarios: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  3. Añadimos la clave de cifrado oficial de Docker: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
  4. Añadimos el repositorio estable para Linux: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  5. Volvemos a actualizar el índice de apt: sudo apt-get update
  6. Instalamos la última versión de Docker Community Edition: sudo apt-get install docker-ce
  7. Habilitamos Docker como servicio: sudo systemctl enable Docker
  8. Por último, añadimos nuestro usuario al grupo docker para poder ejecutarlo sin sudo: sudo usermod -aG docker $USER

Para probar que la instalación se ha realizado correctamente podemos lanzar la imagen Docker de ejemplo hello-world: sudo docker run hello-world

Este comando buscará la imagen en local, si no la encuentra se la descargará del repositorio oficial de Docker (Docker Hub), a continuación, ejecutará el contenedor, imprimirá un mensaje de información y finalizará.

Uso de los contenedores Docker

En sus primeros años, Docker fue empleado para superar ciertas barreras e inconvenientes del mundo del desarrollo.

Uno de los mayores dolores de cabeza de los desarrolladores y del equipo de operaciones era desplegar una aplicación en los entornos de preproducción y producción. Muchas veces se oía aquella típica frase de: “En mi equipo funciona”. En otras palabras, la tarea de “pulsar el botón rojo” provocaba mucho estrés entre el personal.

Sin embargo, gracias a Docker, al poder encapsular toda la aplicación y sus dependencias en un contenedor nos aseguramos de que lo que se está ejecutando en mi equipo es lo mismo que se va a ejecutar en los otros entornos, algo muy difícil de conseguir hace no muchos años.

Además, tal ha sido el potencial visto en Docker que en muy pocos años ha madurado mucho gracias a la comunidad y ya lo podemos emplear en entornos productivos, hecho también achacable a otras herramientas como los orquestadores de contenedores como Docker Swarm y Kubernetes del que hablaremos en otra ocasión.

Conclusiones sobre los contenedores Docker

Como habéis podido ver Docker tiene muchas ventajas, ha solucionado grandes problemas tanto a nivel de desarrollo como de operaciones. Es una herramienta muy útil para agilizar un entorno colaborativo de desarrollo ya que cada programador tendrá la misma versión de toda la aplicación en su equipo, al tratarse de un archivo de texto se puede guardar en un repositorio de control de versiones junto al código de la aplicación, de esta manera el proceso de añadir un nuevo integrante al equipo de desarrollo se resumiría en clonar el repositorio y ejecutar la imagen.

Por otro lado, las tareas de despliegue son mucho más sencillas y rápidas, en palabras de negocio el “TIME-TO-MARKET” es menor ya que se podrán desplegar muchas versiones de la aplicación en cortos periodos de tiempo atendiendo a las necesidades de un mercado tan exigente y variable.

Esperamos que este post os haya servido para entender un poco mejor qué es un contenedor Docker.

Recursos

https://docs.docker.com/

¿En qué punto se encuentra tu organización?

Contacta con nosotros sin compromiso y juntos avanzaremos al ritmo que precise tu negocio.