Introducción a la contenedorización de aplicaciones con Docker

Este articulo ofrece una introducción a la filosofía de la tecnología y el su funcionamiento básico de Docker Community Edition (CE).

La meta específica a lograr con este articulo es la siguiente:

  • Visión y entendimiento de la plataforma de Docker.

Introducción

Docker es una plataforma para desarrolladores y administradores de sistemas para desarrollar, implementar y ejecutar aplicaciones con contenedores.

Figura 1 - Logotipo de Docker

Figura 1 – Logotipo de Docker

El uso de contenedores Linux para implementar aplicaciones se denomina contenedorización. Los contenedores no son nuevos, pero su uso para implementar aplicaciones fácilmente sí lo es.

La contenedorización, es la práctica comercial de transportar mercancías en contenedores de forma y tamaño uniforme, además, es una de las principales modalidades de la unitarización de la carga. Este mismo principio de contenedorización, hoy en día, es aplicado para la transportar y desplegar aplicaciones de software.

La contenedorización de aplicaciones, es cada vez más popular porque los contenedores son:

  • Flexible: incluso las aplicaciones más complejas pueden contenerse.
  • Ligero: los contenedores aprovechan y comparten el kernel de host.
  • Intercambiable: puede implementar actualizaciones y actualizaciones sobre la marcha.
  • Portátil: puedes construir localmente, implementar en la nube y ejecutar en cualquier lugar.
  • Escalable: puede aumentar y distribuir automáticamente réplicas de contenedores.
  • Apilable: puede apilar servicios verticalmente y sobre la marcha.
Figura 2 - Contenedores de stack de aplicaciones

Figura 2 – Contenedores de stack de aplicaciones

Nota: Docker usa cgroups y namespace para permitir que los contenedores independientes se ejecuten dentro de una única instancia de Linux.

¿Qué si es Docker?

  • Una herramienta de código abierto que coloca una capa sobre los contenedores Linux (LXC) para simplificar el empaque y envío de aplicaciones complejas.
  • Una herramienta para crear un sistema de archivos en capas; cada capa tiene una versión y se puede compartir entre instancias en ejecución, lo que hace que los despliegues sean mucho más livianos.
  • Una compañía detrás del proyecto, así como un sitio llamado “Docker Hub” para compartir contenedores.

¿Qué no es Docker?

  • Una máquina virtual. A diferencia de una máquina virtual verdadera, un contenedor docker no requiere un sistema operativo host, lo que significa que es mucho más delgado que una máquina virtual real.
  • Una herramienta de automatización de infraestructura, como Puppet o Chef. Al igual que esas otras herramientas, Docker es un jugador importante en el espacio de DevOps, pero se enfoca en ejecutar aplicaciones en un entorno contenedor, en lugar de representar un estado de máquina.

La misión de Docker es “Construir, despachar y ejecutar cualquier aplicación donde sea” como se ilustra en la siguiente figura:

Figura 3 - La misión de Docker

Figura 3 – La misión de Docker

Conceptos de Docker

A continuación se describen una serie de conceptos que debe entender para poder usar la tecnologías implementadas en la plataforma Docker:

  • Una imagen es un estado específico de un sistema de archivos.
  • Una imagen está compuesta de capas que representan cambios en el sistema de archivos en varios momentos; las capas son un poco como el historial de commit de un repositorio de git.
  • Un contenedor es un proceso en ejecución que se inicia en base a una imagen.
  • Usted puede cambiar el estado del sistema de archivos en un contenedor y hacerle commit para crear una nueva imagen.
  • Los cambios en la memoria / estado no se le hacen commit, solo cambios en el sistema de archivos.

Imágenes Docker

Son un sistemas de archivos en capas, estas representan una instantánea de un sistema de archivos en un momento determinado. Estas se compone de capas que se apilan progresivamente una encima de la otra; contenedores (ejecutando instancias de una imagen) pueden compartir estas capas entre ellos, que es una de las razones por las que Docker es mucho más ligero que una VM completa, donde generalmente no se comparte nada.

Figura 4 - Capas de Imágenes

Figura 4 – Capas de Imágenes

Una imagen es un paquete ejecutable que incluye todo lo necesario para ejecutar una aplicación: el código, un tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración.

La imagen es una plantilla de sólo lectura para crear nuestros contenedores, son creadas por nosotros u otros usuarios de la comunidad. Las imágenes se pueden guardar en un registro interno o público como es el Docker Hub.

Contenedores Docker

Es una aplicación aislada, esta contiene todo lo necesario para ejecutar nuestra aplicación. Estos se basan en una o más imágenes.

Un contenedor se inicia ejecutando una imagen, es una instancia en tiempo de ejecución de una imagen: cuya imagen se convierte en memoria cuando se ejecuta (es decir, una imagen con estado o un proceso de usuario). Puede ver una lista de sus contenedores en ejecución con el comando docker ps, tal como lo haría en Linux.

Contenedores y máquinas virtuales

Los contenedores son similares a una máquina virtual, pero consumen menos recursos, son fáciles de administrar y pueden ejecutarse en cualquier lugar, independientemente del entorno operativo en el que se esté ejecutando.

Un contenedor se ejecuta nativamente en Linux y comparte el kernel de la máquina host con otros contenedores. Se ejecuta un proceso discreto, no teniendo más memoria que cualquier otro ejecutable, por lo que es ligero.

Figura 5 - Un contenedor Docker

Figura 5 – Un contenedor Docker

Por el contrario, una máquina virtual (VM) ejecuta un sistema operativo “invitado” completo con acceso virtual a recursos de host a través de un hipervisor. En general, las VM proporcionan un entorno con más recursos de los que la mayoría de las aplicaciones necesitan.

Figura 6 - Maquina Virtual tradicional

Figura 6 – Maquina Virtual tradicional

Uso de Docker

En esta parte podrá ver cómo usar, quién lo utiliza y para qué, llegando a tener un conocimiento global sobre esta herramienta.

¿Quién usa Docker?

Seguro usted se pregunta, bueno esta plataforma parece todo muy bonita, pero realmente se usa o es algo complejo y que no compensa utilizarlo. La respuesta es bastante clara, lo usan los principales proveedores de computación en la nube:

Y cada vez más compañías y desarrolladores, al ser una herramienta transversal. Si quiere estar a lo ultimo de la tecnología “Surfeando la Ola” con los gigantes de la tecnología, sigue aprendiendo sobre Docker, seguro le cambiará la vida en su estilos de trabajo.

Figura 7 - Surfeando la Ola con los gigantes de la tecnología

Figura 7 – Surfeando la Ola con los gigantes de la tecnología

¿Por qué usar Docker?

Docker aporta muchas cosas positivas para distintos roles dentro de un equipo de trabajo:

  • Para los usuarios Desarrolladores, le facilita la instalación del entorno de desarrollo y herramientas requeridas.
  • Para los usuarios Tester de los entornos de QA, le asegura que lo que allí, lo que se prueba, es lo que irá a producción.
  • Para los usuarios Sysadmin, le garantiza que siempre estarán las dependencias disponibles.
  • Para los usuarios DevOps, le mejora y agiliza los procesos de despliegue continuo.

Además, aprender Docker es una manera de mejorar tu perfil profesional.

Ver también

Si quieres conocer más información sobre como instalarlo y usarlo, le invito a visitar el siguiente artículo:

Conclusiones

De esta forma usted ha aprendido a:

  • Visión y entendimiento de la plataforma de Docker.
  • Conocer ¿Qué si es? y ¿Qué no es? Docker.
  • Entender las Imágenes de Docker.
  • Entender las Contenedores de Docker.
  • Conocer ¿quién usa Docker?.

Referencias

¡Haz tu donativo!

Si te gusto este articulo, por favor, ayúdame a seguir escribiendo este tipo de articulo, haciendo donativos en Dólares vía el servicio Paypal haciendo clic aquí o en la siguiente imagen.


PayPal - The safer, easier way to pay online!


También puede realizar su donativo con Bitcoin (BTC) en escaneando el siguiente código QR:

¡Ayúdame a continuar Blog de lcaballero.wordpress.com!

O usando en la siguiente dirección:

bitcoin:13uZUXXqLP3Ct3ksWHXnDqSrbMbhDV9hGz

3 thoughts on “Introducción a la contenedorización de aplicaciones con Docker

  1. Genial artículo como siempre leonardo, felicitaciones.
    Lo que me causa un poco de ruido es el título ya que si contenerizas un ambiente, en realidad no “Virtualizas” el mismo, y es una de las bondades que vino a traer la tecnología Docker. En primera instancia la arquitectura misma de diseño e implementaciòn de la tecnología elimina la capa de abstracciòn entre el HW con el SO del host esto perse es eliminar la virtualización. Siendo este el caso el runtime (que puede ser containerd o KVM) de Docker se comunica directamente con el kernel del host. lo que se traduce en una cantidad de bondades sobre todo en performance más que notables. Por lo demás muy buen aporte estimado.

  2. Pingback: Instalar Docker en Debian 10 | Leonardo J. Caballero G.

  3. Pingback: Comando básicos de Docker en Debian 10 | Leonardo J. Caballero G.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s