2. Docker

2.1. Introducción

La complejidad cada vez mayor de las aplicaciones y la necesidad de acelerar el desarrollo están ejerciendo aún más presión sobre la infraestructura, procesos y equipos de TI. [Ref]

Ref

Red Hat. (2018). Contenedores de linux. Recuperado de https://www.redhat.com/es/topics/containers.

La complejidad cada vez mayor de las aplicaciones y la necesidad de acelerar el desarrollo están ejerciendo aún más presión sobre la infraestructura, procesos y equipos de TI.

—Red Hat. (2018). Contenedores de linux.

Docker es un proyecto open-source que permite desplegar aplicaciones dentro de contenedores, proporcionando a cada una de ellas un gran nivel de abstracción e independencia respecto de las otras. Está únicamente disponible para utilizar en el sistema operativo Linux, ya que utiliza gran parte de las funciones de su Kernel para permitir que cada contenedor se ejecuta en una sola instancia de Linux, evitando la sobrecarga de mantener máquinas virtuales. Docker es una plataforma para desarrolladores y administradores de sistemas para desarrollar, implementar y ejecutar aplicaciones con contenedores. El uso de contenedores de 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 cada vez más popular porque los contenedores son:

  • Flexible: Incluso las aplicaciones más complejas se pueden contener en contenedores.

  • Ligero: los contenedores aprovechan y comparten el núcleo del host.

  • Intercambiable: puede implementar actualizaciones y actualizaciones sobre la marcha.

  • Portátil: puede construir localmente, desplegar en la nube y ejecutar en cualquier lugar.

  • Escalable: puede aumentar y distribuir automáticamente réplicas de contenedor.

  • Apilable: puede apilar servicios verticalmente y sobre la marcha

2.2. Fundamentos teóricos

2.2.1. Imagen

Una imagen de Docker, es una estructura de directorios y paquetes mínima, creada para una función básica. Se trata de que sea una plantilla, que se puede modificar, pero que ha sido pensada para una uso básico y específico. Por ejemplo, una imagen Debian con un Apache. De esta forma, para tener múltiples servidores web apache, cada uno encapsulado y aislado de los demás, sólo tendremos que crear contenedores desde ella, y cada uno será un servidor web distinto, con su propia IP, al que se puede configurar de manera independiente y que a su vez se puede clonar o mover donde se quiera.

2.2.2. Contenedores

Los contenedores Docker son versiones mínimas de una imagen creada para una tarea específica, y que (aunque pueden hacerlo) se pretende que solo corran un único servicio. De ahí que el concepto de arquitectura de microservicios tenga mucho que ver con Docker.

2.2.3. Contenedores vs. Máquinas Virtuales

Un contenedor se ejecuta de forma nativa en Linux y comparte el kernel de la máquina host con otros contenedores. Ejecuta un proceso discreto, no ocupa más memoria que cualquier otro ejecutable, lo que lo hace liviano. Por el contrario, una máquina virtual (VM) ejecuta un sistema operativo «invitado» completo con acceso virtual a los recursos del host a través de un hipervisor. En general, las máquinas virtuales proporcionan un entorno con más recursos de los que necesitan la mayoría de las aplicaciones. La principal diferencia es que una máquina virtual necesita tener virtualizado todo el sistema operativo, mientras que el contenedor Docker aprovecha el sistema operativo sobre el que se ejecuta, compartiendo el Kernel e incluso parte de sus bibliotecas. Para el SO anfitrión, cada contenedor no es más que un proceso que corre sobre el Kernel. Otra diferencia es el tamaño, una máquina virtual convencional puede ocupar bastante, sin embargo, los contenedores Docker sólo contienen lo que las diferencias del sistema operativo en el que se ejecutan, ocupando una media de 150-250 Mb. En cuanto a recursos, el consumo de procesador y memoria RAM es mucho menor al no estar todo el sistema operativo virtualizado.

../_images/docker-1.png

2.5. Ayuda

Texto de ejemplo con términos del glosario source directory.