El Software Libre triunfó, de eso no nos cabe duda. Evidencia de ello es la nube (Cloud Computing), en la que vemos una gran convergencia de tecnologías libres. Lo que la nube representa hoy era imposible pensarlo cinco años atrás: Pequeñas y grandes empresas de diferentes propósitos corriendo completamente su infraestructura, almacenamiento y servicios en la nube. Hasta las Startups reducen costos de operaciones al iniciarse con planes adaptados a sus necesidades que encuentran en los proveedores de Cloud Computing. Y por supuesto, en la nube "pagas cuando usas lo que tienes".
En esta serie que iniciamos sobre Docker, una de esas tecnologías que hace posible la "magia" de la nube, le daremos un vistazo desde lo más básico hasta un nivel intermedio a los aspectos que como SysAdmins son de nuestra atribución.
La disciplina que ha cambiado de raíz la cultura y la forma en la que se desarrolla software se conoce como DevOps. Ésta es una combinación de los dos protagonistas del desarrollo de aplicaciones: Development (Desarrollo) y Operations (Operaciones). Si tienes planes de convertirte en un DevOps Engineer, Docker es solo una de las muchas tecnologías que debes aprender, además de las prácticas y disciplinas que demanda la carrera. En la actualidad el salario anual de un DevOps Engineer certificado en los EEUU ronda la jugosa suma de 94,000 USD.
En esta serie veremos qué es Docker, su origen y las funcionalidades del Kernel Linux que han hecho posible su existencia. Lo instalaremos y desplegaremos un Docker Swarm Cluster de al menos cuatro nodos en Ubuntu Server usando el Universal Control Plane para su administración. Además, uno de los nodos será el Registry.
Entrando en materia...
¿Qué es Docker y cómo funciona?
Docker es un una plataforma (PaaS) que hace uso de containers (contenedores) para facilitar la automatización del despliegue de aplicaciones, creando una capa abstracta y automatizada de virtualización a nivel del Sistema Operativo. Inicialente Docker hacía uso de LXC (Linux Containers) para acceder a las capacidades de virtualización del Kernel Linux (cgroups, namespaces, capabilities), pero luego (para la versión 0.9) el proyecto desarrolló su propia biblioteca para este fin, conocida como libcontainer.
Los containers ofrecen una capa de virtualización aislada y que no requiere o demanda tantos recursos de hardware como una Máquina Virtual. Los sistemas operativos implementados dentro de un container de Docker para desplegar las aplicaciones solo tienen los componentes necesarios para su propósito, por lo que a la ligereza del container en términos de cómo se maneja con respecto procesamiento y memoria, se les quita mucho peso de encima en lo que al espacio ocupado se refiere.
Sin embargo las Máquinas Virtuales no quedan relegadas, pues éstas tienen la capacidad de ejecutar muchísimos contenedores a la vez, jugando un papel fundamental en las implementaciones de la nube.
Podemos instalar y usar Docker en nuestras computadoras personales, servidores, en máquinas virtuales y en la nube, ya que ha sido implementado por proveedores como AWS, Google Cloud Platform, MS Azure y DigitalOcean, y entre sus principales contribuyentes se encuentran Red Hat, Google, Microsoft, IBM y Cisco.
El proyecto Docker cuenta con una de las documentaciones más amplias que podrás encontrar. Desde la instalación en la distro que usas hasta el despliegue de un clúster de containers (Swarm, Kubernetes, etc.) contiene todo lo necesario para iniciarte y avanzar paso a paso.
Imágenes y contenedores
Debido a lo abstracto del tema, dos términos que debemos diferenciar con precisión son image (imagen) y container (contenedor).
En Docker un image es un paquete de software ejecutable, aislado y liviano que incluye todo lo necesario para correr una aplicación (código, runtime, herramientas y librerías del sistema y configuraciones); un container es una unidad de software que empaqueta el código de la aplicación y todas sus dependencias para que pueda ejecutarse en cualquier ambiente.
En consecuencia, un contenedor es una imagen en ejecución. Las imágenes se convierten en contenedores una vez el motor de Docker las ejecuta.
Ediciones de Docker
Docker está disponible en dos ediciones: Community Edition (CE) y Enterprise Edition (EE).
Docker CE es una plataforma básica de contenerización que se encuentra en los repositorios de CentOS, Debian, Fedora y Ubuntu; también disponible para Windows y Mac OS. En cambio Docker EE es la versión premium certificada, integrada y con soporte que puede ser implementada en RHEL, SUSE Linux Enterprise Server, Oracle Linux, Ubuntu, Windows Server 2016 y AWS.
Las diferencias principales de EE frente a su contraparte CE, son:
- Acceso a imágenes y plugins certificados
- Visualización y administración de clusters con Universal Control Plane
- Registro de imágenes privado (Docker Registry)
- Soporte permanente de Docker
- Escaneo de vulnerabilidades en las imágenes (vulnerability scan)
- Criptografía certificada (FIPS 140-)
- Integración con usuarios LDAP/Active Directory
- ...y por supuesto: Precio. Hay cuotas anuales por nodo que varían según el plan.
Instalación y primeros pasos
Como mencioné anteriormente, desplegaremos Docker EE en el Sistema Operativo Ubuntu Server. Así que te animo a obtener una licencia de prueba por 30 días de la versión EE en el sitio https://hub.docker.com y así me puedas acompañar.
Recuerda dejar tus inquietudes y sugerencias en la sección de comentarios.
Hasta la próxima entrega...
Fuentes y otros recursos:
nice
ResponderEliminar