Usar Docker y Docker Compose sin instalar Docker Desktop en Mac

Preámbulo

Con los recientes cambios en las licencias de Docker Desktop, muchos desarrolladores y empresas han comenzado a buscar alternativas para manejar contenedores sin incurrir en costos adicionales o restricciones de licencia. Aunque herramientas como Podman o Rancher ofrecen soluciones robustas, a menudo presentan una curva de aprendizaje más pronunciada para quienes están acostumbrados a Docker, o bien requieren de muchas configuraciones para que logren funcionar de la misma manera en la que Docker lo hace. Afortunadamente, es posible utilizar Docker sin depender de Docker Desktop. En este artículo, exploraremos cómo hacerlo de manera efectiva.

Decidí escribir este artículo tras haber pasado seis meses probando Podman y Rancher. Aunque ambas herramientas son poderosas, encontré que trabajar con Docker sin Docker Desktop ofrecía una experiencia más directa para mis necesidades. Sin embargo, me encontré con ciertas limitaciones que quiero abordar a lo largo del artículo.

Si quieres una script que haga todo automáticamente, puedes ir a mi repositorio: https://github.com/jfernandogt/install-docker-without-docker-desktop-mac/tree/main

Instalación

El único requisito previo es Homebrew, que si no lo tienes instalado, puedes encontrar instrucciones en su página aquí.

Para empezar, debemos de instalar Docker y el asistente de gestión de credenciales. Este asistente nos permitirá usar el llavero de macOS como almacén de credenciales para repositorios de contenedores remotos en lugar de Docker Desktop.

brew install docker docker-credential-helper docker-compose docker-Buildx

En algún momento nos podremos llegar a topar con este error: 'docker-credential-desktop not installed' para esto, debemos actualizar las configuraciones de docker. Lo primero que haremos es validar que exista el directorio de .docker y si no, crearlo con el comando siguiente:

mkdir ~/.docker

Ahora editamos el archivo con nano

nano ~/.docker/config.json

Las claves importantes que debemos actualizar son credsStore y currentContext

{
    "auths": {},
    "credsStore": "osxkeychain",
    "currentContext": "colima"
}

El siguiente paso es configurar docker-compose como un complemento de Docker para poder usar docker compose como comando en lugar del script docker-compose heredado. Primero, crearemos una carpeta en el directorio de inicio para almacenar los complementos de Docker CLI:

mkdir -p ~/.docker/cli-plugins

Luego, crearemos un enlace simbólico con el comando docker-compose en esa nueva carpeta:

ln -sfn $(brew --prefix)/opt/docker-compose/bin/docker-compose ~/.docker/cli-plugins/docker-compose

Ahora podemos comprobar si el comando de docker compose está funcionando:

docker compose

Debería devolvernos algo parecido a lo siguiente:

También necesitaremos Buildx para crear algunos contenedores Docker. Este se instala con Docker Engine en macOS, pero en nuestro caso lo instalamos en el paso 1 con homebrew. Lo único que debemos hacer es crear un enlace simbólico:

ln -sfn $(brew --prefix)/opt/docker-buildx/bin/docker-buildx ~/.docker/cli-plugins/docker-buildx

Ahora debemos instalar un container runtime, en mi caso opté por Colima

brew install colima

Por último para levantar o detener el servicio, bastará con ejecutar sus respectivos comandos

colima start # Para iniciar el servicio
colima stop # Para detener el servicio

Para todos aquellos que les gustan las interfaces gráficas, pueden usar la extensión de Docker para VS Code, la cual lee el currentContext de la configuración que actualizamos y automáticamente se conecta y nos muestra la misma información que teníamos en el Docker Desktop.

Una segunda alternativa si no quisiéramos usar la extensión de VS Code y tenemos Raycast instalado, podremos usar su extensión de Docker.

Configuración del socket

Algunas aplicaciones se conectan directamente al socket de Docker, el cual usualmente se encuentra en /var/run/docker.sock , para estas aplicaciones lo mejor es crear un enlace simbólico de colima hacia esa ruta, ejecutando este comando:

sudo ln -s /Users/TU_USUARIO/.colima/default/docker.sock /var/run/docker.sock

Conclusiones

Con estas instrucciones, puedes seguir utilizando Docker sin la necesidad de Docker Desktop, manteniendo así la flexibilidad de tus proyectos y asegurando el cumplimiento de las nuevas políticas de licencias. Al final si lo que buscamos es tener la experiencia más cercana a Docker, no hay nada más cercano a eso que usar el mismo CLI de Docker.