Docker - Tema fundamental

Tiempo de lectura · 3 minutos

Hace meses que hemos comenzado a incorporar Docker en todo lo que hacemos.

De esas tecnologías que llegan, las debes adoptar y poner en práctica.

Debemos entonces mirar su adopción desde un punto práctico, profundizando en lo fundamental y atentos a terminar de aprender "haciendo".

Fundamentos de Docker

¿Qué es Docker?

"... Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos..."

Yo apostillaría, que las máquinas virtuales son al hardware como docker es a los sistemas operativos. Es decir, si con las máquinas virtuales hemos conseguido virtualizar el hardware, con docker o "contenedores de software" hemos conseguido virtualizar los sistemas operativos.

Esta forma de virtualizar el sistema operativo se consigue con el aislamiento de recursos, para que los contenedores sean independientes dentro de una sola instancia del sistema operativo.

Las máquinas virtuales no dejan de requerir, que estemos pendientes del sistema operativo, de su actualización, evolucionar el tema de seguridad, y todo el mantenimiento que requiere esta infraestructura, en instalaciones empresariales con decenas de máquinas virtuales, podemos liberar el trabajo del mantenimiento del hardware, pero multiplicamos el trabajo del mantenimiento del sistema operativo.

Si, hay herramientas que facilitan a nuestros ingenieros de IT, que este mantenimiento sea "llevadero". Pero si quitamos de la ecuación las máquinas virtuales y pasamos directamente a contenedores de software.

La plataforma Docker

Docker proporciona la capacidad de empaquetar y ejecutar una aplicación en un entorno aislado llamado contenedor. El aislamiento y la seguridad le permiten ejecutar muchos contenedores simultáneamente en un host determinado. Los contenedores son livianos porque no necesitan la carga adicional de un hipervisor, sino que se ejecutan directamente dentro del kernel de la máquina host. Esto significa que puede ejecutar más contenedores en una combinación de hardware determinada que si estuviera utilizando máquinas virtuales. ¡Incluso puede ejecutar contenedores Docker dentro de máquinas host que en realidad son máquinas virtuales!

Motor Docker

Docker Engine es parte de la plataforma de Docker, que consta de:


  • Un servidor que se ejecuta en un servicio si es windows o demonio si es linux

  • Una API REST que especifica interfaces a los programas para que interactúen o hablen con el servicio o demonio

  • Un cliente de línea de comandos (CLI)


Conceptos clave

Imágenes, la imagen como una plantilla con una instantánea del punto de partida para la generación de un contenedor, si lo que queremos virtualizar es una plataforma de desarrollo java, sobre linux y dejar allí un desarrollo basado en spring, la imagen, se implementa por capas, donde la primera es el runtime de java sobre linux, la segunda la versión de spring y la tercera  la aplicación. Esto queda en una instantanea, como una foto, algo que ya no podemos modificar, es una "instancia". Bueno, alguien pensará, ¿Y si no podemos modifcar la imagen, entonces que sucede si queda mal implementada?, en realidad podemos construir una nueva imagen, basados en las correcciones, el fichero que nos ayudará a construir las imágenes se denomina Dockerfile, un fichero con comandos e instrucciones docker, que el interpretará para al construcción de la imagen.

Contenedor, son las instancias de las imágenes, es decir, cuando una imagen es ejecutada por el servidor de docker, el resultado es el contenedor, todo lo definido en la imagen cobra vida, y en el caso anterior, tenemos una aplicación basada en spring con java sobre linux en ejecución.

Lo interesante aquí, es que puede ejecutar tantas veces como puedas (o te permita tu máquina anfitriona, por tema de memoria y espacio en disco) las instancias de las imagenes, creando tantos contenedores como necesites. También podemos pausar el contenedor, y detenerlo. Cuando termina el contenedor, nada de lo que haya modificado persiste.

Redes, para acceder al contenedor en ejecución, intrínsicamente se genera una red virtual, se abren puertos, se hacen las equivalencias, si en el contenedor se ejecuta un servicio de http para servir una página web, se deberá establecer que el puerto 80 del contenedor, y desde fuera de este, se debe referenciar como el 8084, o un puerto que no haga conflicto con los de la máquina anfitriona.

Volumenes de datos, Como los contenedores no persisten información, un volemen de datos permite conservar los datos, después de que el contenedor desaparece, se utilizan para realizar un intercambio práctivo de datos entre la máquina anfitriona y el contenedor.

Conclusión

Desde su lanzamiento el 13 de marzo de 2013 como proyecto de código abierto y software libre, Docker han revoluciondo la industria del software, han permitido catapultar a las empresas que dan servicios en la nube, y han conseguido el fortalecimiento de la arquitectura de microservicios, que ahora con los contendores facilitan su implementación. También ha aportado a la popularición de prácticas como DevOps.

Han llegado para quedarse y desde luego deberéis estar atentos a los siguientes post, con casos prácticos.


Comment Section

Comments are closed.