Con la introducción del subsistema Windows para Linux (WSL), Microsoft ofreció a los desarrolladores la oportunidad de ejecutar un entorno GNU/Linux directamente en Windows, sin modificaciones y sin la sobrecarga de una máquina virtual. Es una gran solución porque muchos desarrolladores utilizan un sistema para programar y otro para entretenerse.
La WSL aún está en fase de desarrollo, pero actualmente es adecuada para las modernas desarrollo de softwaretanto en la primera como en la segunda versión. Hojeando los problemas y preguntas reportados en internet, la mayoría de ellos parecen referirse a la integración de WSL con Docker, especialmente cuando se trata de actualizar de WSL 1 a WSL 2.
Este artículo disipará todas las ambigüedades y te ayudará a pasar por este proceso sin dolor. Si no tienes WSL 1 y quieres tener WSL 2 con Docker, puedes saltar directamente al último capítulo.
¿Qué ganará?
- Kernel Linux estable más reciente (ajustado por Microsoft). WSL 1 tiene una interfaz de kernel compatible con Linux sin el kernel Linux código.
- Mayor rendimiento de la entrada/salida de archivos. Hasta 20 veces más rápido en comparación con WSL 1 al descomprimir un archivo tar comprimido, alrededor de 2-5 veces más rápido cuando se utiliza clonar git
, npm instalar
y cmake
en diversos proyectos.
- Compatibilidad total con llamadas al sistema. Los binarios de Linux utilizan llamadas al sistema para realizar muchas funciones, como acceder a archivos, solicitar memoria, crear procesos y muchas más. Mientras que WSL 1 utilizaba una capa de traducción construida por la WSL equipoWSL 2 incluye su propio núcleo Linux, totalmente compatible con las llamadas al sistema.
- Archivos almacenados en una partición nativa ext4 en un disco virtual.
- Muy fácil de integrar con Docker.
Creo que para la mayoría de los usuarios el rendimiento de IO de archivos y la fácil integración de Docker parecen razones suficientes.
¡Vamos!
Supongo que tienes la última versión estable de Windows 10 Pro. En cuanto a hoy, es la versión 1909.
Únete a los iniciados en Windows
Actualmente, WSL 2 solo está disponible para Windows 10 en el anillo lento de insiders. Por lo que sé, la versión estable debería estar disponible en mayo de 2020 (versión 20H1). El anillo lento es bastante una solución segura para los usuarios que quieren tener nuevas características un poco antes, ya pre-probado por los usuarios del anillo rápido. El anillo lento recibe actualizaciones del sistema hasta una o dos veces al mes. Puedes leer más sobre los cambios en las versiones internas en el documento de Microsoft llamado Hub de vuelo.
Para participar, basta con seguir el enlace oficial de Microsoft guía. Es muy fácil y lleva unos 15 minutos sin perder ningún dato personal.
Actualizar WSL 1 a WSL 2
Siga la página oficial guía. También es muy fácil, un par de comandos de shell y ¡listo! Dependiendo de lo extenso que fuera tu Linux bajo WSL 1, esto puede llevar algún tiempo. Desafortunadamente, Microsoft no ha colocado una barra de progreso o información sobre el tiempo requerido, así que ten paciencia.
Limpieza
Esta es la parte más importante para la correcta cooperación de WSL 2 y Docker. Después de actualizar a WSL 2, muchos usuarios están tratando de forzar su versión de Docker para cooperar sin darse cuenta de que el equipo de Docker, especialmente para WSL 2, ha preparado una versión que lo hará todo por nosotros. Este es el último lanzamiento de la versión Docker Edge (su nombre beta) - "Docker Desktop WSL 2 backend". Esta versión, 2.1.7.0, está bien pulida y es candidata a la próxima versión estable.
Los usuarios que no tenían WSL 1 o acaban de instalar una nueva versión de WSL 2 están de suerte y pueden pasar inmediatamente al último capítulo.
Si no ha limpiado su Docker (en absoluto o correctamente) y no ha instalado la versión adecuada de Docker para WSL 2, puede encontrarse con algunos errores comunes, por ejemplo, Cannot connect to the Docker daemon at tcp://localhost:2375", "¿Se está ejecutando el demonio Docker?
etc. En la mayoría de los casos, perderá tiempo si no sabe que debe adoptar un nuevo enfoque para intentar resolver estos errores. Para ello, primero debe eliminar completamente Docker de WSL y Windows, que no es un paso obvio.
El ejemplo más común de restos no eliminados es el antiguo enfoque de Docker para establecer la variable de entorno DOCKER_HOST=tcp://localhost:2375
bajo WSL 1 para cooperar con la opción Docker de Windows Exponer daemon en tcp://localhost:2375 sin TLS
.
¿Cómo eliminar completamente Docker de WSL (Ubuntu)?
- Como el Docker oficial docs digamos:
sudo apt-get remove docker docker-engine docker.io containerd runc
Seguro que puede añadir a esta lista docker-ce
y docker-ce-cli
.
- Identifica todos los paquetes docker que tienes con
dpkg -l | grep -i docker
y eliminar si todavía existe alguno.
- Elimine todos los residuos:
sudo rm -rf /var/lib/docker /etc/docker /etc/apparmor.d/docker /var/run/docker.sock /usr/local/bin/docker-compose /etc/docker
sudo groupdel docker ~/.docker
- Este paso es para usuarios avanzados, así que ten cuidado. Probablemente no necesites hacerlo.
Buscar todos docker
palabras y elimine aquellas de las que esté seguro.
sudo find / -name "*docker*"
- Compruebe el contenido de todos los archivos a continuación para
docker
ocurrencias como ej. variable de entorno DOCKER_HOST=tcp://localhost:2375
.
Puedes editar estos archivos con el editor Nano, nano ~/.bashrc
o Visual Studio Code, código ~/.bashrc
.
~/.bashrc
~/.bash_aliases
~/.bash_profile
~/.bash_login
~/.profile
/etc/bash.bashrc
/etc/profile
¿Cómo eliminar completamente Docker de Windows?
- Desinstalar de forma normal con Windows
Aplicaciones y funciones
panel.
- Elimine todo lo de abajo si existe:
C:Archivos de programaDocker
C:ProgramaDatosDockerDesktop
C:Usuarios[USERNAME].docker
C:Users[USERNAME]AppDataLocalDocker
C:Users[USERNAME]AppDataRoamingDocker
C:Users[USERNAME]AppDataRoamingDocker Escritorio
¿Y ahora qué?
Instale la última versión de Docker Desktop Edge desde aquí y siga los pasos de la página oficial docs. Todo se reduce a unos pocos clics.
Si todo va bien, usted debe tener su salida de wsl -l -v
así:
NOMBRE ESTADO VERSIÓN
Ubuntu-18.04 En ejecución 2
docker-desktop En ejecución 2
docker-desktop-data En ejecución 2
Eso es todo. Docker ha creado sus propios contenedores WSL docker-desktop
y docker-desktop-data
. Algunos de los tutoriales o consejos disponibles pueden resultar confusos porque esta vez no debería instalar ni configurar nada relacionado con Docker en su distribución WSL de Linux. Es muy importante recordarlo. Después de la limpieza, debe funcionar bien de inmediato.
Además..
Configurar WSL 2 con Docker puede ser un proceso indoloro con unos sencillos pasos. Comience por actualizar listas de paquetes mediante el comando "sudo apt-get update" para asegurarse de que dispone de la información sobre la última versión. Resuelva cualquier dependencia que falte con "sudo apt-get install -y build-essential" para una instalación sin problemas. Instale Motor Docker con "sudo apt-get install -y docker-engine"para crear, ejecutar y gestionar contenedores sin esfuerzo. Ejecute "sudo docker run" seguido del nombre de la imagen para lanzar contenedores. Para mantener su entorno optimizado, ejecute periódicamente "sudo docker system prune" para eliminar los contenedores no utilizados y liberar espacio en disco. Con estos pasos, puedes disfrutar de la perfecta integración de WSL 2 y Docker para una contenerización eficiente en tu flujo de trabajo de desarrollo.