Wilson Vargas
Wilson Vargas

Un programador enamorado de su código.

Wilson Vargas
Author

Share


Suscribete


Mantente al tanto de mis nuevos artículos

Tags


Featured on Planet Xamarin badge

Twitter


Cómo instalar Docker en Windows 11 (WSL) sin Docker Desktop

Wilson VargasWilson Vargas

Docker es una herramienta de contenedores que permite a los desarrolladores crear, ejecutar y distribuir aplicaciones en diferentes entornos. A su vez Windows Subsystem for Linux 2 (WSL 2) cuenta con un kernel de Linux real, compatible con contenedores Docker.

Docker funciona en WSL 2 y Docker Desktop es la forma más fácil de instalar Docker en Windows, sin embargo, para algunas personas (y me incluyo) suele ser un poco tedioso y pesado. Sobre todo, estar esperando que la ballenita se quede cargando por un largo rato en tu barra de tareas o simplemente no te gusta tener muchos programas abierto al momento de desarrollar. En esas ocasiones entonces quizás quieras ejecutar Docker desde WSL 2 sin necesidad de usar Docker Desktop.

Además, ten en cuenta que Docker Desktop es gratuito solo para personas o pequeñas empresas. Si lo estás utilizando en el trabajo y tu empresa supera una cierta cantidad de empleados o ingresos, entonces deberías pagar una suscripción. Para ver más detalles sobre el modelo de suscripción de Docker puedes ir aquí.

Habilita WSL 2 en Windows 11

Lo primero que debes hacer es habilitar la característica de WSL en Windows 11. Para hacerlo, presionar Windows y escribir "Agregar características de Windows"

Luego en la ventana que se abrirá, buscar la opción "Windows Subsystem for Linux", activa la casilla y reinicia.

Descarga e instala una distribución de Linux

Una vez que hayas habilitado WSL en Windows 11, necesitarás descargar e instalar una distro de Linux para ejecutar Docker. Puedes elegir cualquier distro de Linux que desees, pero en este ejemplo usaremos Ubuntu. Para descargar Ubuntu, ve a la tienda Microsoft Store y busca "Ubuntu":

Preparándose para la instalación de Docker

Primero vamos a hacer update y upgrade de los paquetes de nuestra distro:

sudo apt update && sudo apt upgrade

Luego instalamos algunas dependencias:

sudo apt install --no-install-recommends apt-transport-https ca-certificates curl gnupg2

A continuación, configuramos las direcciones en el repositorio de paquetes, para eso primero vamos configurar temporalmente algunas variables del sistema operativo:

. /etc/os-release

Luego nos aseguramos de que la ruta de descarga sea una ruta segura para apt:

curl -fsSL https://download.docker.com/linux/${ID}/gpg | sudo tee /etc/apt/trusted.gpg.d/docker.asc

Ahora agregamos y actualizamos el repositorio para que esté listo:

echo "deb [arch=amd64] https://download.docker.com/linux/${ID} ${VERSION_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list

Hacemos un último sudo apt update y con esto estamos listos para instalar Docker.

Si eres observador habrás notado que he usado ${ID} y ${VERSION_CODENAME}. Bueno, estas son variables del sistema, las puedes ubicar si usas el siguiente comando: nano /etc/os-release

Instalando Docker

Ahora podemos instalar el engine de docker y algunas herramientas adicionales, para eso ejecutamos el siguiente comando:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Administra Docker sin usar sudo

El daemon Docker se vincula a un socket de Unix, no a un puerto TCP. Por defecto, es el usuario root es el que el puede acceder al socket de Unix, otros usuarios solo pueden acceder a él mediante sudo.

Entonces tienes 2 caminos, acceder a este socket usando sudo todo el tiempo o creando un grupo y dándole permisos a usuarios específicos. En esta ocasión iremos por la segunda opción:

Creamos un grupo llamado docker

sudo groupadd docker

Ahora agregamos nuestro usuario al grupo docker

sudo usermod -aG docker $USER

Cierra la ventana de terminar y vuélvela. Deberías de ver el grupo docker cuando escribas el comando groups de la siguiente manera:

Lanzando dockerd

Casi todas las distros Linux usan systemd u otro sistema de inicio (init), pero WSL tiene su propio sistema de inicio. Para no complicarnos la vida vamos a usar el sistema de inicio de WSL, solo lanzamos dockerd y vemos la magia:

sudo dockerd

Abre otra terminal y prueba el docker cli:

docker run --rm hello-world

Deberías ver un mensaje de "Hello from Docker!" en la terminal:

Iniciando dockerd automáticamente

Lo que haremos a continuación es hacer que dockerdse ejecute automáticamente al iniciar la terminal, para esto tendremos que editar el archivo ~./profile.

Primero abrimos el archivo ~./profileusando nano:

sudo nano ~./profile

Y a continuación agregamos las siguientes sentencias al final del archivo:

DOCKER_DISTRO="Ubuntu-20.04"
DOCKER_LOG_DIR=$HOME/docker_logs
mkdir -pm o=,ug=rwx "$DOCKER_LOG_DIR"
/mnt/c/Windows/System32/wsl.exe -d $DOCKER_DISTRO sh -c "nohup sudo -b dockerd < /dev/null > $DOCKER_LOG_DIR/dockerd.log 2>&1"

Ten en cuenta que a la variable DOCKER_DISTRO se le debe asignar el nombre correcto de la distribución que estés usando. Si no estás seguro del nombre exacto de tu distro, ejecuta wsl -l -q desde tu terminal PowerShell y verás la lista de distros que tienes.

Después de hacer esta configuración notarás que al iniciar la terminal de tu distro te está solicitando la contraseña de `root` esto porque en las sentencias que escribimos líneas arriba se usa en comando `sudo`. Para hacer que no te pida contraseña al iniciar la terminal haremos lo siguiente:

Ejecutamos `sudo visudo` y dentro de este archivo agregamos la siguiente línea al final del archivo:

%docker ALL=(ALL)  NOPASSWD: /usr/bin/dockerd

Guardamos y al abrir nuevamente nuestra terminal ya no volverá a solicitarnos la clave.

Probando Docker

Una vez instalado y configurado Docker podemos probar y empezar a usarlo, para efectos de este tutorial vamos a ejecutar Nginx en Docker.

Primero descargamos la imagen de Nginx desde Docker Hub:

docker pull nginx

Y a continuación ejecutamos Nginx:

docker run --name docker-nginx -p 80:80 nginx

Ahora podemos acceder desde nuestra maquina en Windows a nginx con la siguiente dirección: http://localhost:80

Conclusión

Instalar Docker en Windows 11 sin usar Docker Desktop es posible gracias a la función de WSL2 que permite ejecutar una distribución de Linux dentro de Windows. Este ejercicio es especialmente útil para aquellos desarrolladores (como yo :P ) que prefieren trabajar con herramientas de línea de comando o que quieren tener más control sobre la instalación de Docker en su máquina. Nos leemos pronto :)

Comentarios