Como bien sabemos Docker se utiliza para crear contenedores aislando un entorno de trabajo del resto del equipo. La gran ventaja de docker es que nos permite trabajar con diferentes tecnologías en un mismo equipo.
Con Docker podemos tener en un mismo servidor aplicaciones corriendo en Python, en Ruby, en PHP, Node JS o cualquier otro lenguaje montando cada una de ellas en un contenedor aparte con su propio motor de base de datos.
Pero las ventajas de Docker no solo quedan ahí, sino que también podemos crear imágenes con nuestra aplicación y así pasarla a otro dispositivo evitando el famoso «En mi equipo si funciona».
Sus características son tan útiles en un servidor como en un entorno local, además nos garantiza que nuestra aplicación funcionará exactamente igual en ambos entornos.
Si aún no sabes utilizar Docker y te interesa comenzar con esta maravillosa herramienta date una vuelta por nuestra Guía de principiantes para Docker.
Contenido
Top 5 Alternativas a Docker
Como toda tecnología siempre tiene desventajas y Docker no es la excepción.
Algunas de ellas son que debe correrse con privilegios root y al parar el contenedor se elimina toda la información dentro de él a excepción de lo que está en los volúmenes.
Otra desventaja es que no divide los recursos sino que consume los recursos del host a demanda, esto puede generar que otros contenedores vayan lento por culpa de uno que consume demasiados recursos.
Por eso hoy vamos a ver otras herramientas para la creación y manejo de contenedores que contienen algunas variantes y mejoras.
RKT
RKT pertenece a la distribución de Core OS, desarrollada para la virtualización y manejo de contenedores. Hoy día es uno de los mayores competidore de Docker y por eso encabeza esta lista. RKT trabaja sobre plataformas linux como ArchLinux, Core OS por supuesto, Fedora, NixOS y otras.
Una de las grandes razones por la que Core OS decidió lanzar RKT es la seguridad. Antes de la versión 1.1 Docker necesitaba correrse como usuario root. Una vulnerabilidad muy grave que permite ataques a nivel de super usuario. Por le contrario RKT nos permite utilizar el manejo estándar de grupos para permisos Linux, permitiendo ejecutar el contenedor una vez creado con un usuario sin privilegios root.
Docker tiene la ventaja de que es más fácil de integrar mientras que RKT conlleva una instalacion y configuracion mas manual. De todas maneras sigue siendo una muy buena alternativa a Docker ya que nos permite utilizar imágenes APPC (App Container Images) y tambien Imagenes de Docker. A su vez también permite la integración con el orquestador Kubernetes y AWS.
PodMan
PodMan al igual que todas las opciones que veremos en este artículo es un virtualizador y manejador de contenedores.
El mismo está disponible para distribuciones Linux y lo que tiene de particular es que no necesita de un Demonio para correr sino que corre directamente sobre runC.
PodMan nos permite correr los contenedores con usuarios sin privilegios root, algo sumamente importante a nivel de seguridad!
También soporta múltiples formatos de imágenes como OCI e Imágenes de Docker. Algo muy interesante de PodMan es que nos permite un total manejo del contenedor en todo su ciclo de vida.
Además soporta el manejo de Pods, esto quiere decir que un grupo de contenedores puede compartir el almacenado y la red en un entorno compartido donde se ejecutan en simultáneo.
Esta herramienta trabaja muy bien con Kubernetes y está sustituyendo a Docker en este entorno. Dado que PodMan tiene algunos comando extras para trabajar con Kubernetes lo cual facilita mucho su implementación.
Otra herramienta que se utiliza en conjunto con PodMan es Buildah, si bien con PodMan podemos crear contenedores incluso con un Dockerfile, al integrar Buildah podemos crear nuestra propia imagen utilizando Bash.
Singularity
Singularity es un virtualizador de sistema operativo que se utiliza en HPC (Computación de Alto Rendimiento) ya que este no necesita correr con un usuario con privilegios root y es ideal para utilizar en espacios compartidos por su nivel de aislación.
Su filosofía de seguridad es que «Clientes no seguros corren contenedores no seguros» lo que cambia totalmente el paradigma de seguridad.
Dentro del container un usuario no puede escalar a root a menos que sea root fuera del mismo.
Pero si se puede utilizar aplicaciones que corren dentro del container desde fuera como acceso el sistema de archivos, IO estándar, etc.
Otro dato importante sobre Singularity es que podemos importar y utilizar nuestras imágenes de Docker que ya tengamos. Incluso podemos editar nuestro container localmente y luego montarlo en un entorno compartido ya que no necesita de privilegios root para ser montado.
Además puede ser transferido utilizando los protocolos básicos de transferencia de archivos como RSYNC, HTTP, SCP, etc.
Los contenedores de Singularity están diseñados para ser lo más portables posible. Estos son compatibles con las versiones más recientes de RHEL, Debian, Arch, Alpine, Gentoo y Slackware.
A nivel de compatibilidad no hay ninguna limitación a excepción de alguna compatibilidad binaria básica. Esto nos permite que una vez tengamos nuestro entorno armado podamos moverlo facilmente a otra distribucion de Linux.
Linux Containers – LXC
LXC es una tecnología de virtualización a nivel de sistema operativo que nos permite crear y correr múltiples entornos virtuales linux de manera aislada.
La diferencia con Docker es que LXC es un sistema operativo completo que puede ser tratado como tal. Por otra parte Docker esta creado para ejecutar una única aplicación y tiene determinadas restricciones respecto al SO.
Linux Containers también es una opción más liviana y segura a Docker ya que consume menos recursos y no necesita ser ejecutado como root.
Aunque este tiene una gran desventaja y es su complejidad. Además de eso debemos sumarle una documentación pobre y confusa.
Por lo general cuando utilizamos containers lo que buscamos es crear nuestro entorno de trabajo de forma rápida y simple. Por lo que esta alternativa es para usuarios más avanzados.
OpenVz
OpenVz es muy similar a LXC, la virtualización la realiza a nivel del sistema operativo permitiendo una mayor aislación y un completo manejo del sistema operativo.
Este está disponible para entornos Linux y nos permite ejecutar cada contenedor como un servidor único.
En este caso la instalación y manejo son un poco más complejas comparado con Docker aunque podemos utilizar Vagrant para una instalación rápida.
Una desventaja de este sistema es que no hay mucha información en internet ya que no es para nada popular.
En el sitio oficial está toda la documentación necesaria para su instalación y uso aunque debo decir que la organización de la misma no es la mejor.
Herramientas para Docker
Otras alternativas para la mejora o eficiencia de Docker es el uso de herramientas.
Docker es el manejador de containers mas popular por lo que hay varias herramientas de terceros que facilitan su uso y su performance. Aquí veremos sólo algunas de las mas utilizadas.
Nanobox
La idea de Nanobox es que los desarrolladores se enfoquen en desarrollar y no en configurar el entorno de trabajo. Para ello Nanobox nos permite crear nuestro entorno especificando el lenguaje que vamos a utilizar.
También nos permite luego agregar complemento, especificar el dominio de nuestra y dejar todo funcionando en cuestión de minutos, realmente es muy simple y rápido!
También nos permite vincular una imagen de Docker que ya tengamos creado y funcionando.
Luego de que el entorno está creado nos permite vincularlo directamente con nuestro proveedor de Cloud Hosting y pagar nuestros recursos en demanda.
Portainer
Portainer es un panel administrador para Docker que nos permite crear y administrar nuestras imágenes, crear, correr y eliminar contenedores así como también administrar varios aspectos de los mismos.
Esta herramienta agrega una visual al manejo de los contenedores Docker que tengamos, además de que nos permite correr varios de ellos al mismo tiempo he incluso acceder a la consola de múltiples contenedores en simultáneo.
Lo bueno de Portainer es su fácil instalación, simplemente debemos crear un contenedor con la imagen de Portainer como indica en su sitio oficial.
Kubernetes
Como no podía ser de otra forma, si hablamos de herramientas para Docker debemos hablar del ya muy conocido Kubernetes. Esta es una herramienta para el manejo de contenedores que además ofrece interesantes características. Algunas de ellas son Balanceo de Carga, Alta disponibilidad, Flexibilidad y Monitoreo entre otras.
En este artículo no ahondaremos mucho más en esta tecnología, si quieres saber más sobre esta herramienta te recomendamos leer nuestro Tutorial Kubernetes en Español.
Conclusiones
Aquí vimos que alternativas a Docker hay en el mercado aunque no son ni cerca de populares de lo que este es. Algunas de ellas como RKT o PodMan prometen mucho aunque no será fácil quitar al grande de su puesto.
Mientras otras como LXC o OpenVz aún son muy complicadas de utilizar lo que las mantiene lejos del uso común.
Nos pareció interesante también agregar herramientas conocidas para Docker que pueden facilitar su uso.
Ya que muchas veces al comenzar se nos hace un poco complicado entender la mecánica de esta tecnología y pensamos en buscar alternativas cuando una herramienta tal vez pueda ayudarnos.
Y tú ya utilizas Docker o algún otro manejador de contenedores? Conoces otras alternativas o herramientas para este? Dejanos tu opinión en los comentarios.