Contenedores en macOS con Lima y minikube

Escrito por el .
gnu-linux planeta-codigo apple
Enlace permanente Comentarios

Para ejecutar contenedores en macOS hay dos opciones entre las posibles, una usar minikube que aunque su objetivo es ejecutar un cluster de Kubernetes permite usarlo para ejecutar contenedores de Docker directamente, la segunda opción es lime que es una opción similar que usa containerd en vez de Docker. La empresa encargada del desarrollo de Docker ha anunciado que el producto Docker Desktop pasa a requerir una licencia de pago para organizaciones empresariales grandes. Docker Desktop es usado tanto en Windows como en macOS para ejecutar contenedores de Docker con la opción también de ejecutar un cluster de Kubernetes, minikube y lima para macOS son una alternativa a Docker Desktop.

minikube

containerd

Docker

Docker es una tecnología para ejecutar procesos en contenedores nativa de GNU/Linux, los contenedores en Linux son simplemente un proceso más del sistema no utilizan virtualización con lo que requieren menos recursos, se inicia mucho más rápido que una máquina virtual y están aislados de otros procesos de sistema. Al usar tecnologías específicas de Linux no es posible ejecutarlo de forma nativa ni en Windows ni en macOS, en estos para usar contenedores hay que recurrir a la virtualización. Aún siendo una tecnología de GNUL/Linux hay necesidad de ejecutarlo en otros sistemas operativos para obtener los mismos beneficios aún siendo con virtualización.

La empresa propietaria y encargada del desarrollo de Docker ha anunciado que Docker Desktop usada para ejecutar Docker en Windows y macOS va a ser una opción de pago si se usa en un ámbito profesional en grandes organizaciones, para uso personal continúa siendo gratuito en su versión Docker Personal.

Docker Desktop is free to use, as part of the Docker Personal subscription, for individuals, non-commercial open source developers, students and educators, and small businesses of less than 250 employees AND less than $10 million in revenue. Commercial use of Docker Desktop at a company of more than 250 employees OR more than $10 million in annual revenue requires a paid subscription (Pro, Team, or Business) to use Docker Desktop.

Mucho del software de código abierto y libre es gratuito, sin embargo, es mantenido en algunos casos por personas en su propio tiempo personal con poco soporte económico. En el caso de Docker Desktop la empresa propietaria seguramente ha tomado esta medida como una vía para monetizar y financiar el desarrollo de Docker. Dada la popularidad que Docker ha adquirido en los últimos años muchas empresas basan de forma importante sus entornos de producción o desarrollo en Docker.

Docker Desktop permite ejecutar contenedores de Docker en sistemas distintos a GNU/Linux como macOS y Windows, incluye otras herramientas como Docker Compose y se integra con Docker Hub para almacenar imágenes, también integra una versión de Kuberntes para orquestar contenedores.

El cambio en el acuerdo de uso de Docker Desktop obliga a los usuarios de Apple macOS que no cumplan los criterios para usar la suscripción Personal han de pagar por su uso o buscar una alternativa. Para uso personal uso la distribución Arch Linux pero por política de empresa en el trabajo estoy obligado a usar macOS con lo que he tenido que buscar una alternativa para seguir usando Docker. En el caso de macOS dos de las opciones como alternativa a Docker Desktop son minikube y Lima.

Contenedores de Docker y Kuberntes con Minikube en macOS

minikube tiene el objetivo de crear un cluster de Kubernetes rápidamente en GNU/Linux, Windows y macOS, pero dado que usa Docker el comando docker puede interaccionar con la instancia de minikube. Docker es una herramienta nativa de GNU/Linux en el caso de macOS y Windows usa virtualización, en estos dos sistemas operativos Docker se ejecuta en una máquina virtual con GNU/Linux y se proporcionan una serie de integraciones para el reenvío de puertos entre la máquina anfitrión y la máquina virtual con los contenedores.

El gestor de paquetes homebrew para macOS permite instalar fácilmente minikube simplemente con un comando. minikube y Kubernetes utilizan Docker para la ejecución de contenedores, aunque el propósito de minikube es ejecutar aplicaciones en contenedores permite el uso de las herramientas de línea de comandos docker y docker-compose.

1
2
$ brew install minikube
$ brew install docker docker-compose
minikube-install.sh

Una vez instalado minikube hay que iniciar la máquina virtual con el siguiente comando.

1
2
$ minikube start

minikube-start.sh

Para que la herramienta de línea de comandos interaccione con el servidor de Docker en la máquina virtual de minikube el siguiente comando permite establecer varias variables de entorno.

1
2
$ eval $(minikube docker-env)
$ docker images
minikube-docker-env.sh

Hecha la configuración previa iniciar un contenedor de Docker es exactamente igual que en GNU/Linux de forma nativa, en realidad el comando docker interacciona con el servidor de Docker en la máquina virtual. Por otro lado dado que los contenedores de Docker se ejecutan dentro de la máquina virtual y los puertos se exponen en ella es necesario acceder a la máquina virtual es con su dirección IP, dirección IP proporcionada por el siguiente comando y si se desea añadirla al archivo /etc/hosts con un nombre de dominio.

1
2
$ docker run --rm -p 8080:80 nginx:latest

minikube-docker-run.sh
1
2
$ minikube ip
$ echo "`minikube ip` docker.local" | sudo tee -a /etc/hosts > /dev/null
minikube-ip.sh

Para destruir la máquina virtual que usa minikube hay otro comando.

1
2
$ minikube stop
$ minikube delete
minikube-delete.sh

Contenedores de Docker con Lima en macOS

Aunque minikube permite ejecutar contenedores de Docker directamente su propósito es ejecutar recursos de Kubernetes como pods en vez de directamente contenedores. Para el caso de simplemente contenedores de Docker minikube no ofrece reenvío de puertos y compartición de archivos entre la máquina virtual y local que requiere hacer el paso adicional del comando minikube-ip.sh.

Otra opción en macOS alternativa a Docker en macOS es Lima, denominada a sí misma como macOS subsystem for Linux parafraseando el Windows subsystem for Linux o WSL de Windows. El funcionamiento de Lima es también a través de una máquina virtual en la que se ejecutan los contenedores, la ventaja de Lima es que ofrece compartición de archivos entre la máquina local y la virtual y reenvío de puertos de forma automática de modo que la experiencia de uso es similar a Docker en GNU/Linux.

Lima como entorno de ejecución de contenedores utiliza containerd, pero dado que las imágenes de los contenedores de Docker de DockerHub siguen el estándar OCI son compatibles con containerd lo que permite usar exactamente las mismas imágenes.

Lima se instala también con un comando usando homebrew.

1
2
$ brew install lima

lima-install.sh

La máquina virtual con GNU/Linux y docker en la que se ejecutan los contenedores con el siguiente comando.

1
2
3
$ limactl start
$ lima uname -a
Linux lima-default 5.11.0-34-generic #36-Ubuntu SMP Thu Aug 26 19:22:09 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
lima-start.sh

Para ejecutar un contenedor el comando a usar es lima nerdctl, el resto de opciones y parámetros son los mismos a los habituales a los del comando docker están en la documentación de comandos de nerdctl. En este caso se inicia un contenedor del servidor web Nginx que se se accede con la dirección http://localhost:8080.

1
2
$ lima nerdctl run --rm -p 8080:80 nginx:latest

lima-run.sh

Para destruir la máquina virtual que usa lima hay otro comando.

1
2
$ limactl stop
$ limactl delete
lima-delete.sh

nerdctl soporta muchos de los subcomandos de docker tanto para la ejecución de contenedores, gestión, construcción, gestión de imágenes, gestión de volúmenes y de Docker Compose.

Imágenes de contenedores con lima en macOS Ejecución de un contenedor con lima en macOS

Ejecución de un contenedor con lima en macOS


Comparte el artículo: