DEV Community

Kevin Jimenez
Kevin Jimenez

Posted on • Edited on

Docker - Introducción

Docker ha causado gran revuelo en la comunidad de tecnología mundialmente en los últimos años. Son muchos quienes lo aman y otros sus detractores. Hoy hablaremos un poco sobre este.

Docker como proyecto nace en marzo de 2013 de la mano de su creador Solomon Hykes bajo la administración de la compañía llamada dotCloud que meses más tarde se convirtió en Docker, Inc.

¿Qué es Docker realmente?

Docker es una herramienta que permite correr aplicaciones en el sistema operativo con la capacidad de mantener dichas aplicaciones y sus dependencias totalmente aisladas entre sí y también de todas las demás aplicaciones instaladas en dicho sistema operativo.

A esta capacidad se le ha denominado "tecnología de contenedores". Docker implementa una arquitectura Cliente-Servidor que expone una API RESTful sobre un socket que puede ser UNIX o TCP.

Puede que ésta explicación o definición nos haga recordar las máquinas virtuales. Se suele hacer una relacion directa entre máquinas virtuales y contenedores, como si fueran una especie de variante. Sin embargo hay diferencias importantes que las separan, tanto en su base técnica como en los casos de uso.

La capacidad de aislamiento mencionada anteriormente se debe a una carácteristica de Linux llamada "Espacios de Nombres" (Namespaces), con esto se logra aislar los siguientes recursos:

  1. Red (Net)
  2. Identificadores de Procesos (PID)
  3. Identificadores de Usuarios (UID)
  4. Puntos de Montaje (Mnt)
  5. Nombres de Host o Nombres de dominio (UTS)
  6. CPU y Ram (CGroups)
  7. Comunicación entre Procesos (IPC)

Cabe destacar que Linux crea un Namespace por defecto por cada uno de estos recursos cuando instalamos el sistema. Docker hace uso de esta característica y se encarga de crear un Namespace nuevo para cada una de las aplicaciones que ejecutemos sobre este. La creación de Namespaces es flexible y opcional, lo que quiere decir que podremos ejecutar aplicaciones con Docker tan aisladas (o poco aisladas) como necesitemos.

¿Es Docker multiplataforma?

Hasta ahora se ha mencionado mucho el sistema operativo Linux. La verdad es que los Namespaces es algo que existe desde hace mucho tiempo en este sistema operativo y Docker ha venido a darle una implementación más simple, enfocándolo no solo a SysAdmins sino también a desarrolladores. Esto logró que más personas y empresas pusieran interés en esta tecnología hasta que Microsoft también quiso entrar en el juego colaborando muy de la mano con Docker Inc. para lograr ejecutar Docker en las últimas versiones de Windows Server (2016 en adelante) y Windows 10.

Es interesante que Microsoft haya logrado implementar ésta tecnología de aislamiento de procesos de manera nativa en Windows Server. En el caso de Windows 10 se vale de Hyper-V para crear una máquina virtual con una imagen linux optimizada que únicamente contiene el Docker Daemon (el servidor Docker), instala el Cliente directamente sobre Win10 y lo conecta al servidor mencionado previamente. Algo similar ocurre con Docker para Mac.

También es posible instalarlo sobre ediciones anteriores a Windows 10 gracias una herramienta llamada Docker Toolbox que se vale de VirtualBox en la ausencia de Hyper-V.

Docker es capaz de correr sobre arquitectura ARM también.

¿Qué sigue?

En un próximo artículo estaremos profundizando un poco más de esta maravillosa herramienta.

¡Hasta luego!

Top comments (2)

Collapse
 
cescquintero profile image
Francisco Quintero 🇨🇴

Está buena la explicación y en español! Casi siempre las leía en inglés y conocer los términos en otro idioma ayuda.

Aprendí Docker en el 2017 y hoy en día casi que soy un detractor.

VM > Docker 😆

Collapse
 
jeffryjdelarosa profile image
Jeffry Jesus De La Rosa

Good Job!