Desde su lanzamiento en 2012, Docker se ha convertido en una de las tecnologías de más rápido crecimiento en el desarrollo de aplicaciones web. Pero, ¿qué es Docker?

¿Qué es Docker?

Docker es un proyecto de código abierto que proporciona una capa de abstracción y virtualización a nivel de sistema operativo, a través de la instalación de contenedores de software.

¿Cómo funciona Docker?

 

Docker se desarrolló sobre la base de la tecnología original de contenedor Linux comúnmente conocida como LXC. LXC es un método de virtualización a nivel de sistema operativo para ejecutar múltiples sistemas operativos en un solo host. Lo que hace posible esto son los espacios de nombres (namespaces) y a los grupos de control (cgroups).

traditional-linux-containers-vs-docker_0

Docker trabaja con imágenes y contenedores. Una imagen es un paquete que incluye “todo lo que necesita” una determinada tecnología para funcionar. Las imágenes se inicializan en una o varias instancias que se denominan contenedores.

 

Contenedores Docker vs. máquinas virtuales.

Aunque se asemejan a las clásicas MVs, la diferencia fundamental es que las máquinas virtuales necesitan del componente “Hypervisor”, el cual es el monitor que permite emplear diferentes sistemas operativos en el mismo pc.

Container  VM

El no utilizo de este componente por parte de los contenedores Docker se refleja en un ahorro en el rendimiento, y en un sistema más ligero que las máquinas virtuales. Gracias al bajo costo que docker supone, podemos usar una misma máquina con múltiples contenedores para tener entornos separados de la misma aplicación, desarrollo, pruebas y producción que se traduce en una reducción de costes de manera directa.

 

Creación, Ejecución y Monitoreo del Contenedor

Una vez instalado Docker, se pueden utilizar sus comandos, entre los cuales:

 

  • Crear contenedores: Para lanzar un contenedor de Docker, se necesita crear una imagen del contenedor. Cada imagen del contenedor está basado en un archivo Dockerfile, que Docker utiliza para lanzar una instancia de su aplicación dentro del contenedor. El comando docker build genera una imagen del contenedor basado en Dockerfile. A continuación ejemplo de contenido de un Dockerfile:

FROM ubuntu:14.04

RUN apt-get update

RUN apt-get install -y python

CMD [“/usr/bin/python”, “-c”, “‘print \”Hello World!\”‘”]

 

  • Ejecutar contenedores: Para ejecutar un contenedor de Docker, generalmente se utiliza el comando docker pull para descargar la imagen que contiene la aplicación que se quiere ejecutar dentro del contenedor. Para iniciar el contenedor se utiliza el comando docker start. Cuando el contenedor está activo, puede interactuar con la aplicación dentro del contenedor utilizando comandos como docker exec o docker run.

 

  • Monitorar contenedores: Docker también proporciona algunas funcionalidades básicas de monitoreo como docker stats. Para monitorear los contenedores en producción, las organizaciones cuentan con soluciones de monitoreo como Datadog, Splunk y Amazon Web Services

 

Beneficios de los contenedores.

  • Aprendizaje de nuevas tecnologías: para aprender una nueva herramienta sin perder tiempo en la instalación y configuración. Docker Hub es un repositorio donde se pueden encontrar contenedores con aplicaciones ya instaladas y configuradas. Por ejemplo, si se quiere un entorno para aprender cómo funciona redis, basta ejecutar “docker run -it -p 6379:6379 redis bash
  • Reproducibilidad: similar a una aplicación Java, que funcionará exactamente igual en cualquier dispositivo capaz de ejecutar una Máquina Virtual Java, se garantiza que un contenedor Docker sea idéntico en cualquier computadora o VPS que pueda ejecutar Docker. Las especificaciones exactas de un contenedor se almacenan en un archivo Dockerfile. Al distribuir este archivo, una organización puede garantizar que todas las imágenes creadas a partir del mismo Dockerfile funcionen de manera idéntica. Además, tener un entorno constante y bien documentado facilita el seguimiento de su aplicación y la identificación de problemas.

 

  • Aislamiento: las dependencias o configuraciones dentro de un contenedor no afectarán ninguna instalación o configuración en el servidor, ni en ningún otro contenedor que pueda estar funcionando. Al usar contenedores separados para cada componente de una aplicación (por ejemplo, un servidor web, una interfaz y una base de datos para alojar un sitio web), puede evitar dependencias conflictivas. También puede tener múltiples proyectos en un solo servidor sin preocuparse por crear conflictos en su sistema.

 

  • Seguridad: separar los diferentes componentes de una grande aplicación en diferentes contenedores puede tener beneficios de seguridad: si un contenedor se ve comprometido, los otros no se verán afectados.

 

  • Gestión del entorno: Docker facilita el mantenimiento de diferentes versiones de un sitio web que utiliza nginx. Puede tener un contenedor separado para pruebas, desarrollo y producción en un mismo servidor y arrancar cado uno fácilmente.

 

  • Integración continua: Docker funciona bien como sistema de integración continua con herramientas como Jenkins.

 

 

  • Reducción de coste: Docker requiere menos horas de implementación y de adaptación de entornos y menos recursos que una Máquina Virtual.

 

 

Conclusión

Aunque se haya convertido en una forma bastante popular de configurar, guardar y compartir, no hay que utilizar Docker indiscriminadamente. En Soltel, gracias a nuestro equipo de expertos en tecnología puntera, podemos asesorar a nuestros clientes en tomar las decisiones justas en el desarrollo de sus proyectos