Docker: definición, partes, elementos, concepts y Maquina Virtuales.

Docker es un software fundamentalmente ligero el cual permite la ejecución de contenedores en un mismo host en simultáneo.
El concepto es algo básico pero se ajusta a la perfección a lo que es y lo más importante es la gran utilidad que tiene frente a las máquinas virtuales que tanta fuerza habían tomado en la década pasada. Y en concepto de contenedor es aquel que se utiliza en los puertos y barcos de mercancias, donde en una misma caja, se guardan distintos productos.
Hoy en día los beneficios de docker son varios, el aislamiento de aplicaciones y sistema operativo, la performance nativa, el control de interfaces de red a través de cgroups, el control de versionado de las imágenes, la generación de nuevas imágenes y la utilización de Docker Hub como repositorio público y también privado.

Docker está compuesto por varias partes, el docker deamon, el cual administra los contenedores en el host el cual se ejecuta. Docker CLI, el encargado de ejecutar comandos y comunicarlos con el daemon de la imagen, y docker image index, el repositorio público o privado.
Luego también existen elementos principales, los cuales son:

  • Docker Conteiners: Son directorios empaquetados los cuales contienen las imágenes instanciadas con todo lo necesario para su correcta ejecución. Básicamente se podría decir que es la base del sistema y puede estar corriendo o detenido.
  • Docker Images: Hace referencia a la imagen en si (sin instanciar). Esta imagen puede tener varias capas, iniciando por un Linux de muy pequeño tamaño y funcionalidad, con luego un software determinado encima. Las imágenes en Docker son los archivos que un contenedor toma para instanciar, estos pueden albergar distintas clases de software. Un ejemplo básico y muy utilizado en la industria es un CoreOS (que pesa menos de 100mb) con un MYSQL, el cual luego se puede conectar con otra imagen instanciada con un WordPress e interactuar.
    Las imágenes pueden modificarse y volver a ser guardadas bajo otro nombre, y luego se pueden compartir en Dockerhub, el cual es un repositorio al estilo de GIT, donde la comunidad puede utilizar lo creado por otro.
  • Dockerfile: Es un archivo en el cual podremos encontrar los detalles del software que se encuentra en una imagen que descargaremos o tenemos descargada. Son scripts los cuales tienen las instrucciones y comando que automatizan le creación de una imagen. Cuando un dockerfile termina de ser ejecutado, tendremos la imagen que podrá ser utilizada por un contenedor.

La diferencia sustancial entre una máquina virtual y docker (ambas soluciones de virtualización) es la ausencia del hipervisor. Existen distintos tipos de programas que se encargan de esto en una MV, como KVM, VirtualBox o VMware, mientras que Docker lo realiza de manera distinta.
La diferencia es posible en gran parte gracias al kernel de Linux (en versiones nuevas, a partir del Kernel 3), ya que se le agregaron nuevas funcionalidades utilizadas como los cnames y namespaces los cuales permiten aislar los procesos y recursos de las maquinas donde corren.
Esta tecnología de contenedores brinda mayor escalabilidad y mejora de performance con menos recursos, y Docker lleva la delantera como empresa en este rubro, apoyado por grandes de la industria como Red Hat entre otros.