Introducción

Como ya sabrás, Docker Desktop ha dejado de ser de uso gratuito. Por lo que los usuarios de Mac y Windows tienen que, decantarse entre pagar la licencia o hacer lo que se conoce en el mundillo “como con Sublime Text”.

Con lo que si quieres seguir con Docker, no te queda más remedio que pasarte a Linux o montarte una máquina virtual. Los pasos te los dejo en este tutorial, ¡ánimo!

Docker ha dejado de tener soporte a partir de Kubernetes 1.24. Por ello, la comunidad se está volcando en otro tipo de tecnologías de contenedores más seguras, como ContainerD, y, como desarrolladores, también tenemos que abrazar, ya que nos proporciona las siguientes ventajas:

  • Mejor rendimiento: al tener containerd muchas menos capas y funcionalidad que Docker, es mucho más rápido levantando los contenedores.
  • Consume menos recursos: containerd consume mucha menos CPU y RAM que Docker, lo que lo hace especialmente indicado con máquinas de desarrollo más limitadas en recursos.
  • Seguridad: reduce la superficie de ataque y permite ejecutar contenedores «rootless».

«Actualmente, la forma más sencilla y cómoda de poder trabajar con contenedores en cualquiera de las tres plataformas, nos la está ofreciendo la solución de Rancher Desktop…»

Aunque a día de hoy presenta un inconveniente muy importante con el poco soporte de herramientas de uso común, como Visual Studio Code, lo que se irá solventando poco a poco.

Conociendo Rancher Desktop

Actualmente, la forma más sencilla y cómoda de poder trabajar con contenedores en cualquiera de las tres plataformas nos la está ofreciendo la solución de Rancher Desktop, de la que hablaremos en este tutorial.

Desde su página web podemos descargar el binario para el sistema operativo que estemos utilizando, así que te animo a que te lo vayas descargando mientras te cuento qué es lo que vas a hacer en tu máquina cuando te lo instales.

«La solución cuenta con una aplicación de Electrón, que permite gestionar ciertos aspectos de configuración, como la elección del runtime, la memoria RAM…»

Lo más importante es que directa y automáticamente, estemos en el sistema operativo que sea. Rancher Desktop nos va a instalar todo lo necesario para poder tener un Kubernetes en local y poder crear imágenes con Docker o con ContainerD.

Si eres una persona curiosa ahora te estarás preguntando cómo puedes hacer esto. Desde su web, nos lo muestran con la siguiente imagen:

 

Funcionamiento por dentro de Rancher Desktop

La diferencia entre si estamos en Linux o Mac y Windows, es que en Windows va a hacer uso del WSL2 que tengas instalado y en los otros sistemas operativos montará una máquina virtual súper ligera con Qemu y Lima. Para que te hagas una idea de su ligereza, esta máquina virtual es de tipo Alpine.

En este espacio virtual, Rancher Desktop despliega un K3s, que es su solución de Kubernetes que menos recursos necesita y te deja elegir entre si quieres seguir usando Docker o, por el contrario, comienzas a usar ContainerD.

Aplicación gráfica

La solución cuenta con una aplicación de Electrón, que permite gestionar ciertos aspectos de configuración, como la elección del runtime, la memoria RAM y la CPU otorgada. Y, lo más importante, nos permite poder instalar los siguientes ejecutables:

  • nerdctl (containerd): es la clave para dejar de usar Docker. Se trata de un cliente que tiene la misma interfaz que DockerCLI, pero trabaja con ContainerD. Es decir, a partir de ahora, si queremos ver las imágenes creadas en local, en vez de ejecutar Docker images, haremos nerdctl images. Y así, con todos los comandos que acostumbres a utilizar en Docker y Docker Compose. También permite crear imágenes a partir de Dockerfiles.
  • kubectl: es el cliente para poder interacturar por línea de comandos con cualquier cluster de Kubernetes. En este caso, ya configura el fichero ~/.kube/config, para que no tengas que hacer nada, solo ejecurtar un kubectl get nodes para ver que se conecta correctamente.
  • helm: podemos utilizar su cliente de helm, para la hacer la instalación de los Charts de Kubernetes que necesitemos.
  • Docker CLI (moby): puedes seguir utilzando Docker, también lo puedes hacer con esta solución. Aunque lo más recomendable es que lo vayas dejando de usar en favor de nerdctl con ContainerD, a medida que se vaya resolviendo el problema del soporte de herramientas.

Personalmente, he probado Rancher Desktop en los tres sistemas operativos y la experiencia de instalación y primeros pasos ha sido muy buena.

Pasos para la instalación

Así que, una vez descargado, dependiendo del sistema operativo, se hará la instalación de una forma u otra. Y su comportamiento será ligeramente diferente si estamos en Linux o Mac. Si estamos en Windows, primero nos va a permitir seleccionar entre si queremos seguir utilizando Docker (moby) o vamos a utilizar ContainerD (nerdctl).

La recomendación es que hoy selecciones Dockerd (moby) y vayas cambiando a ContainerD, una vez tus herramientas de uso común vayan adoptando ContainerD y nerdctl.

 

Pantalla sección de runtime

Acto seguido, comenzará a configurarse en nuestra máquina. Pasados unos 2 minutos ya tendremos la solución corriendo y preparada, para recibir nuestros primeros despliegues.

Destacar que la instalación por defecto ya resuelve uno de los mayores problemas que tenemos a la hora de trabajar con Kubernetes fuera del cloud, que es una solución de LoadBalancer local propia de Rancher llamada Klipper, y Traefik como solución de Ingress Controller.

Solo en el caso de Linux hay que hacer una operación post-instalación, es decir, habilitar el poder trabajar con puertos por debajo de 1024. Simplemente abrimos un terminal y ejecutamos:

$> sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80

De esta forma, evitaremos problemas cuando configuremos los ingresos de las aplicaciones para conectar por puertos como el 80 y el 443.

Secciones de la aplicación

En la sección “Kubernetes Settings” podemos seleccionar la versión de Kubernetes, el puerto y los recursos de CPU y RAM que queremos otorgar a la máquina virtual (siempre que hagamos un cambio, debemos pulsar en “Reset Kubernetes” para que se haga efectivo).

Vista sección

En la sección “Supporting Utilities”, es donde podemos seleccionar qué herramientas queremos que sean habilitadas por Rancher Desktop. Lo recomendable es que, si no las tienes ya, las habilites todas:

Vista sección

En la sección “Images”, podemos ver el listado de imágenes accesibles por el cluster. De hecho, otra de las ventajas es que no necesitamos de un registry de Docker. Simplemente, podemos usar el botón de + para construir y subir las imágenes de forma gráfica.

Vista sección

Por último, en la sección “Troubleshooting”, podemos ver los logs y hacer un reseteo de fábrica, para volver al estado inicial de instalación.

Vista sección

 

Viendo el clúster por dentro (Lens)

El siguiente paso sería conectar Lens (https://k8slens.dev/), el conocido como IDE de Kubernetes, a nuestra nueva instancia.

Solo tenemos que descargar el binario, instalarlo en nuestro sistema y, como Rancher Desktop ya nos ha creado el fichero de configuración necesario dentro de ~/.kube/config, solo tenemos que ir al catálogo y seleccionar “rancher-desktop”. Al hacer esto veremos en el panel todos los elementos de nuestro cluster de forma visual.

Vista pods en Lens

 

Uso de nerdctl

Si has seleccionado la opción de ContainerD en la instalación, ahora podrás hacer uso de nerdctl para poder trabajar con las imágenes y los contenedores. Simplemente, abre un terminal y ejecuta todos los comandos que acostumbras con Docker.

De hecho, puedes seguir escribiendo Docker, simplemente haciendo un alias en Linux/Mac sería ejecutando:

$> alias docker=nerdctl

Prueba a crear imágenes Dockerfile con el comando build, listarlas, arrancar contenedores, ejecutar ficheros docker-compose.yaml, la compatibilidad es del 99% con Docker CLI.

Una cosa a tener en cuenta es que, para que la imagen creada pueda ser utlizada en un deployment sin necesidad de registro, al momento de la creación tenemos que establecer el namespace de esta forma:

$> nerdctl -n k8s.io build -t nombre_imagen:version .

De forma que en el deployment solo tendremos que especificar “nombre_imagen:version”. De esta forma irá a buscarla a las imágenes locales dentro del namespace k8s.io y no necesitaremos tener ningún registro de Docker externo para poder desplegar nuestras imágenes.

Conclusiones

Hay vida más allá de Docker y Docker Desktop. Es hora de empezar a llamar nerdctl al CLI de Docker y abrazar ContainerD, como ya lo ha hecho Kubernetes para la creación de nuestras imágenes y contenedores, aunque el cambio real vendrá con el soporte completo de aplicaciones como Visual Studio Code.