En este post cubriremos una de las primeras cuestiones más relevantes: ¿Qué es Docker?
Aunque de forma más teórica, considero importante conocer bien el espacio que ocupa Docker, y de dónde viene.

En posteriores publicaciones iremos profundizando en los aspectos más técnicos, como los siguientes:

  1. Lanzar nuestro primer contenedor.
  2. Crear y comprender el funcionamiento de los volúmenes.
  3. Generar nuestras imágenes, entender las layers y optimizaciones.
  4. Comprender el funcionamiento de los repositorios de imágenes.
  5. Crear nuestra aplicación compuesta con Docker Compose.
  6. Configurar un clúster de Docker usando Swarm.
Así que este será el primero de un total de ocho publicaciones, con los que, al finalizar, habremos comprendido las bases de Docker, y nos permitirá sacarle el mejor provecho.

Pero ahora, ¡vamos a lo importante de este post!

¿Qué es Docker?

Docker es un sistema que nos va a permitir desplegar nuestras aplicaciones de forma más cómoda y sencilla, consumiendo menos recursos que anteriores métodos como el uso de máquinas virtuales.

Otra gran ventaja de Docker, es que no entiende de sistemas operativos, por lo que, si tenemos un sistema de contenedores funcionando en nuestro servidor, no nos importará que tipo de Linux esté utilizando, o si es incluso un Windows.

Máquinas Virtuales VS Contenedores

Las máquinas virtuales han estado presentes mucho tiempo, permitiendo generar entornos sandbox en los que podíamos tener nuestras aplicaciones aisladas e independientes del sistema operativo anfitrión. De esta manera se simplificaba la generación de copias de seguridad y la restauración en ciertos puntos o estados de las aplicaciones.
Adicionalmente aportaban una capa más de seguridad.

Pero con la llegada de la contenerización esto se nos ha simplificado, ya que atomiza más si cabe la forma en la que se despliegan las aplicaciones.

Máquinas Virtuales

Las máquinas virtuales hasta ahora, requieren funcionar sobre un sistema de virtualización, como VirtualBox; y sobre esto instalar un sistema operativo nuevamente, conocido como Sistema Operativo Virtual, el cual podía ser el que deseásemos.

Por lo que las diferentes capas involucradas se pueden visualizar de la siguiente manera:

  • Los recursos hardware son gestionados por el sistema operativo anfitrión.
  • Este le permite el acceso en función de lo que necesite a la aplicación de virtualización.
  • La aplicación de virtualización gestiona los sistemas operativos virtualizados.
  • Y a su vez estos tienen sobre ellos las aplicaciones finales.

Hipervisores

Posteriormente surgieron sistemas operativos dedicados a la virtualización, conocidos como hipervisores (como el caso de Proxmox). De esta forma se simplifica el esquema, quitando una de las capas, quedando así.

Ahora las anteriores capas de Sistema Operativo y Aplicación de Virtualización se reúnen en una sola: Sistema Operativo Hipervisor.

Contenedores

El sistema de contenedores permite abstraer aún más, de forma que delega ciertos recursos que terminarían siendo redundantes al sistema operativo anfitrión. De esta manera, la red, por ejemplo, en el caso de Docker, es compartida con el sistema operativo en el que se encuentra.

El esquema quedaría de esta manera:

Ahora nos hemos quitado de golpe el sistema operativo virtual, de forma que es la aplicación contra el proceso de contenerización, y posteriormente este el que solicita los recursos hardware necesarios al sistema operativo anfitrión.

¡Se nos quedan muchas menos capas que con las máquinas virtuales inicialmente!

¿Qué uso se le da hoy día?

Si te dedicas al mundo de la informática, y, sobre todo, en los ámbitos de sistemas y programación, verás contenedores por todos lados, ya sea con Docker, como Kubernetes; hasta en proveedores en Cloud como Amazon ECS u Openshift.

El principal punto de estos contenedores, es la facilidad de despliegue de nuevas aplicaciones, y su comodidad de gestión.

La mayoría de empresas optan por empaquetar sus productos en contenedores para que puedan ser desplegados donde vean más convenientes, ya que, como hemos mencionado, no dependen de un sistema operativo.

Además, estos sistemas de contenedores tienen una muy fácil integración con aplicaciones de Integración contínua, que simplifica aún más los despliegues.

En el ámbito laboral, en lo que más uso le he dado, ha sido a la hora de poder tener mis entornos locales de prueba, como bases de datos, o incluso poder desplegar mis aplicaciones para probarlas antes de subirlas.

Por otro lado, en el aspecto personal, en el homelab, el uso es para poder desplegar y gestionar cómodamente los servicios que quiero tener funcionando, como los que vemos aquí en el blog, o en los diferentes vídeos del canal.

¿Quién está detrás del proyecto?

Ahora, un poco de historia.

Los contenedores llevan tiempo existiendo, y han habido diferentes intentos de estandarizarlos, pero quién logró llevar esto a su punto más conocido actualmente fue Docker.

De ahí que hoy día casi todo el mundo se refiera a los contenedores como Docker, pero no son lo mismo.

De hecho, actualmente el proyecto en sí de contenedores, conocido como Container.d, es gestionado por la Fundación Linux. Como se puede apreciar en este artículo, en en año 2017 fue cuando se traspasó el proyecto a la Fundación Linux.

Gracias a esto, el estándar de contenedores está protegido y es de código abierto. Eso si, no lo son las adaptaciones e interfaces que muchos conocemos, como puede ser Docker Desktop.

¿Y si quiero certificarme?

Hay multitud de certificaciones hoy día, y cuesta saber cuáles son realmente reconocidas. Pero en este caso no tenemos ninguna duda, ya que los contenedores son un estándar en la mayoría de trabajos en nuestro campo, por lo que una certificación podría aportarte.

A día de hoy, recomiendo que una vez finalices con Docker, te metas en el mundo de Kubernetes, y entonces te prepares para la certificación del KCNA.

⚠️
Aunque sigas todos los post que vaya publicando, te aconsejo que hagas un curso más reconocido y enfocado en ayudarte a formarte para los exámenes, como el que menciono a continuación.

Referencias

Listado de fuentes de información a la hora de realizar este post:

Vídeo