Cómo empezar a usar Docker en Windows (WSL2) sin Docker Desktop

Instalar Docker Engine en WSL2 sin Docker Desktop: un auténtico desastre

¿Intentas omitir Docker Desktop en Windows y ejecutarlo directamente en WSL2? Sí, es factible, pero no es precisamente sencillo. Ahorrarás algo de carga de trabajo y quizás obtengas un mejor rendimiento si todo se mantiene en Linux, pero hay algunas peculiaridades, como asegurarte de que systemd funcione correctamente, los permisos sean correctos y los recursos estén configurados correctamente. Una vez que esto funcione, podrás ejecutar comandos de Docker directamente desde tu terminal de WSL, lo cual es genial una vez que esté listo. Ten en cuenta que esta no es una configuración perfecta; a veces, puedes necesitar algunos ajustes adicionales, y no todo funciona de inmediato. Pero si te sientes cómodo con los ajustes, aquí tienes cómo hacerlo en resumen.

Básicamente, el objetivo es instalar Docker Engine directamente en tu distribución WSL de Linux y asegurarte de que se inicie automáticamente y pueda acceder a tus recursos. Esto puede ser útil si quieres evitar el consumo adicional de RAM, disco y CPU que conlleva Docker Desktop y te sientes cómodo con los comandos de Linux. En algunas configuraciones, la mayor dificultad es asegurar que systemd se ejecute correctamente, ya que WSL no siempre lo habilita por defecto. Pero bueno, podrías conseguir que funcione y luego ejecutar tus contenedores desde el Símbolo del sistema de Windows o PowerShell sin problemas. Querido Linux, te estás comportando de forma extraña, pero vale la pena si quieres un stacking ligero de Docker. Ahora, profundicemos en los pasos.

Cómo instalar Docker Engine en WSL2 sin Docker Desktop

Asegúrate de tener WSL2 y una distribución de Linux preparada

– Verifique su versión de WSL con ` wsl --version`; debería decir versión 2.- Si no, establezca el valor predeterminado en WSL2 ejecutando ` wsl --set-default-version 2`.- Enumere sus distribuciones con ` wsl --list --verbose`, y asegúrese de que su Linux (por ejemplo, Ubuntu 22.04) se esté ejecutando en la versión 2.- Si no es así, ejecute ` wsl --set-version Ubuntu-22.04 2`.

En algunas configuraciones, la gente se olvida de esto, lo que causa muchos dolores de cabeza más adelante. Así que haz esto primero.

Instala Ubuntu y actualízalo como si no hubiera un mañana

Conéctate a tu Linux con ` wsl` o ` wsl -d Ubuntu-22.04`.Actualiza los paquetes: ` sudo apt update && sudo apt upgrade -y`.Asegúrate de tener herramientas como curl o wget. Si no, instala: ` sudo apt install curl`.

Instale Docker con el script oficial: ignore la advertencia de WSL

– Ejecutar: ` curl -fsSL https://get.docker.com -o get-docker.sh` entonces ` sudo sh get-docker.sh.- Este script extrae todo lo necesario de los servidores de Docker y prácticamente lo instala automáticamente. No voy a mentir, a veces se queja de ejecutarse dentro de WSL, pero ignóralo; esa advertencia es engañosa.

Agrega tu usuario al grupo Docker para que no tengas que usar sudo todo

– Ejecutar: ` sudo usermod -aG docker $USER`.- Para que el cambio surta efecto, es posible que deba reiniciar su sesión de WSL: ` wsl --shutdown` y luego iniciarla nuevamente.

Este paso ayuda a evitar tener que escribir constantemente «sudo» antes de los comandos de Docker, lo cual resulta molesto después de un tiempo.(Algo extraño: a veces la membresía del grupo no se actualiza inmediatamente, por lo que reiniciar o cerrar y volver a abrir WSL ayuda).

Haga que Docker se inicie automáticamente y asegúrese de que funcione la compatibilidad con systemd

– Para verificar si systemd está habilitado, revise ` /etc/wsl.conf `.Si existe y contiene: [boot] systemd=true, entonces está bien.- Si no, edite o cree con ` sudo nano /etc/wsl.conf`, y agregue ese bloque.- Verifique si su Linux está ejecutando systemd con: ` stat /sbin/init`.Si ` /sbin/init ` apunta a ` /lib/systemd/systemd `, está listo.- Habilite e inicie el servicio Docker: ` sudo systemctl enable --now docker.service`.- Verifique el estado: ` systemctl status docker.service`.Si está ejecutándose, está bien. Si arroja errores sobre que `systemd` no se está ejecutando, es posible que necesite un poco más, como ajustar su ` /etc/wsl.conf` para forzar el inicio. A veces, tendría que agregar un comando para iniciar docker automáticamente en su proceso de inicio de WSL, usando ` nano /etc/wsl.conf` y agregando: [boot] command = «/usr/sbin/service docker start» – Reinicie WSL (` wsl --shutdown`) y verifique nuevamente.

Sí, administrar systemd en WSL puede ser un poco complicado. Algunas configuraciones requieren comandos de inicio manuales porque systemd aún no es totalmente compatible. Por eso, hay que ser creativos.

Configurar límites de recursos para WSL2

– Cree un archivo ` %UserProfile%\.wslconfig ` y ajuste las restricciones de recursos: ini [wsl2] memory=8GB processors=4 swap=2GB – Luego reinicie WSL: ` wsl --shutdown` — y cuando lo inicie nuevamente, se aplicarán los límites.

Porque, claro, WSL tiene que complicarlo más de lo necesario. Pero así, no dejarás sin recursos a tu host Windows ni le darás a WSL demasiados recursos, a menos que quieras hacerlo, claro.

Pruebe Docker en WSL

– Ejecutar: ` docker run hello-world` desde WSL.- Debería extraer una pequeña imagen de prueba y ejecutarla, mostrando un saludo.- Recuerda, si quieres ejecutar comandos de Docker desde Windows, añade el prefijo ` wsl `, como ` wsl docker images` o simplemente configura tu PATH para que sea más fluido.(Spoiler: es un poco complicado, pero se puede hacer).

Consejo profesional: mantenga los archivos de Docker dentro del sistema de archivos de WSL (como en su directorio de inicio) en lugar de en rutas de Windows montadas, que tienden a ralentizar las cosas o causar problemas de permisos extraños.

Manejar configuraciones de firewall de Linux más nuevas si es necesario

Las distribuciones modernas usan nftables en lugar de iptables. Para WSL, el kernel 5.8+ lo admite de forma nativa, pero si no funciona, prueba: ` sudo update-alternatives --config iptables` – Selecciona ` iptables-legacy ` si es necesario.

Todo esto solo para que la red funcione correctamente con Docker. No es divertido, pero vale la pena una vez configurado.


Sí, es un poco engorroso, pero es totalmente posible ejecutar Docker Engine dentro de WSL2 sin Docker Desktop. Solo hay que esperar algunos contratiempos: cosas como habilitar systemd, ajustar la configuración y los límites de recursos no son precisamente fáciles de configurar.¿Pero la ventaja? Menos consumo de recursos y una configuración más nativa de Linux. En una configuración funcionó bastante bien, pero en otra tuve que ajustar algunas cosas aquí y allá. Nada complicado, solo se necesita un poco de paciencia.

Resumen

  • Asegúrese de que WSL2 esté habilitado y que su distribución esté configurada correctamente
  • Actualice e instale Docker usando el script oficial
  • Configurar la compatibilidad con systemd en WSL
  • Establezca límites de recursos con `.wslconfig`
  • Pruebe Docker con `docker run hello-world` dentro de WSL

Resumen

Todo este proceso parece un poco complicado, pero vale la pena si el objetivo es evitar Docker Desktop. Es posible que haya que probar y fallar, especialmente con la compatibilidad con systemd, pero una vez que funcione, los comandos de Docker se vuelven mucho más fluidos en WSL2. Cruzamos los dedos para que esto ayude a alguien a empezar más rápido, sin la sobrecarga adicional de Docker Desktop.