Docker: Mejor que una máquina virtual

Docker: Mejor que una máquina virtual

Docker es una plataforma de código abierto en la que se pueden desplegar aplicaciones en contenedores de software. Esto brinda un sistema aislado para cada aplicación, que contará únicamente con las librerías necesarias. Así, Docker se convierte en una de las principales herramientas para desarrolladores y administradores.

Cada vez son más las empresas que desarrollan aplicaciones en la nube. A medida que más organizaciones pasan de alojar toda su infraestructura de TI local a soluciones nativas e híbridas en la nube, la complejidad de las aplicaciones alojadas en la nube también aumenta. Docker permite simplificar esos desarrollos, alojándolos en contenedores independientes.

¿Qué es un contenedor de Docker?

contenedores docker
Docker: Mejor que una máquina virtual

Un contenedor es una unidad de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de forma rápida y confiable. Una imagen de contenedor de Docker es un paquete de software independiente, ligero y ejecutable que incluye el código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema y configuraciones. Es decir, todo lo necesario para ejecutar una aplicación.

El software en contenedores está disponible para aplicaciones basadas en Linux y Windows, y siempre se ejecutará de la misma manera, independientemente de la infraestructura. El software estará aislado de su entorno en los contenedores, garantizando que funcione de manera uniforme.

Así, los contenedores de software se han convertido en un estándar para desarrolladores, ya que no sólo simplifican el desarrollo y la implementación, sino que permiten la gestión de manera sencilla en un entorno limpio y liviano.

Por ejemplo, es posible instalar Docker y crear un contenedor en un servidor Ubuntu, y también crear una aplicación multi contenedor, donde podemos instalar imágenes de aplicaciones, e incluso crear y subir nuestras propias imágenes al Docker Hub para utilizarlas en distintos proyectos. De este modo, si tenemos que emplear diversas aplicaciones, podemos instalarlas en diferentes contenedores, pero consumiendo la menor cantidad de recursos posible. La aplicación de Docker gestionará los recursos existentes y los asignará de manera eficiente entre los contenedores desplegados.

Ventajas del uso de contenedores

Emplear contenedores de Docker tiene muchas ventajas. Por un lado, lo que ya nombramos: un entorno estandar y liviano, que consumirá los recursos mínimos necesarios. Pero además, permite construir y entregar aplicaciones de manera rápida y segura. Estas aplicaciones pueden generarse en equipos de desarrollo locales, y transferirse e implementarse rápidamente a un contenedor de Docker.

La estandarización de los contenedores no sólo facilita la implementación de las aplicaciones: también permite la rápida identificación de problemas y el retorno a una fase anterior para remediarlos, evitando además problemas de compatibilidad, o con archivos fantasma, ya que tendrá sólo las librerías y archivos necesarios.

Contenedores vs. Máquina Virtual

Una máquina virtual emula un hardware dentro del sistema operativo sobre el que se está trabajando para instalar en su interior un sistema operativo, un conjunto de aplicaciones, etc. Permitir crear un hardware virtual sobre el que se puede instalar un sistema operativo sobre el que es posible instalar y ejecutar programas como en una computadora «normal».

Los contenedores y las virtual machine tienen beneficios en común como la asignación y el aislamiento de recursos. La diferencia está en la forma en que realizan esta acción: Los contenedores virtualizan el sistema operativo mientras que las máquinas virtuales hacen una virtualización del hardware.

Docker vs virtual machine
Docker: Mejor que una máquina virtual

Una máquina virtual tendrá un mayor consumo de recursos, ya que deberá ejecutar el sistema operativo completo. En cambio, se pueden utilizar muchos contenedores que sólo ejecutarán las aplicaciones, disminuyendo al mínimo el consumo de recursos. Así, los contenedores son más portables y eficientes.

La principal ventaja que presentan las máquinas virtuales es una mayor seguridad, ya que están aisladas del sistema operativo HOST, mientras que los contenedores se ejecutan directamente sobre éste.

Cómo funciona Docker

Docker aprovecha características de aislamiento de recursos del kernel Linux, particularmente los espacios de nombres (namespaces) y cgroups. Esto permite que los contenedores independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.

Para esto,  dentro del contenedor se definen instrucciones en un dockerfile que permiten crear una docker image con la que poder iniciar dicho contenedor (docker container).

Dockerfile

Es el documento de texto sobre el que se agrupa una serie de comandos para que se ejecuten todos a la vez. Esto evita que deban ser ejecutados manualmente. De este modo, crear una imagen de Docker será más rápido y más eficiente.

Docker Image

Podrían entenderse como un Sistema Operativo con aplicaciones instaladas. Una imagen de Docker contrendrá el código de la aplicación y las librerías necesario para ejecutarla. Docker ofrece una forma sencilla de actualizar las imágenes que tengamos creadas.

Docker Container

Es una imagen de Docker cuando comienza a funcionar. Contiene todo lo necesario para que una aplicación pueda funcionar, sin acceder a repositorios externos al contenedor.

Cómo funciona Docker
Cómo funciona Docker

Conclusión

Docker permite crear aplicaciones de manera autosuficiente, ligera y portable. Además, los contenedores son autogestionables y muy livianos, lo que facibilita su almacenaje, transporte y despliegue.

Su gran comunidad crea constantemente repositorios que contienen imágenes libres, que cualquiera puede utilizar o adaptar, ya que son de código abierto. Además, podemos liberar nuestras imágenes para ampliar ese repositorio.

De este modo, Docker se convierte en una gran herramienta para desarrolladores, que podrán trabajar de manera independiente y eficiente, con mayor velocidad en el desarrollo y despliegue de aplicaciones, al tiempo que se ahorran recursos en los servidores.

Juan Manuel Amatta
Juan Manuel Amatta

Juan Manuel es Licenciado en Comunicación Social, y se dedica a la comunicación digital desde 2008, cuando empezó a escribir en su blog, y luego en otros sitios de tecnología. Trabaja en la Coordinación de Comunicación de la Universidad Nacional de Rosario. Es docente en la UNR, la UCU y el IPR. Además, dicta charlas y cursos sobre redes sociales.
También recomienda libros y comics en su cuenta de bookstagram: @librosqueamattan