Configuración de Docker para Windows y WSL para funcionar sin problemas



En este post se espera que ya tenga WSL configurado. Aunque el demonio de Docker no se puede ejecutar directamente en WSL, puede usar la CLI de Docker para conectarse a un demonio remoto de Docker que se ejecuta a través de Docker para Windows o cualquier otra máquina virtual que cree (en este artículo se tratan ambos métodos).

Si se pregunta «¿por qué no solo ejecutar docker.exe y docker-compose.exe de Docker para Windows directamente en WSL?», esto se debe a un error al ejecutar Docker o Docker Compose de forma interactiva en ese entorno. El TL;DR es que no se puede ejecutar nada en primer plano con el modo interactivo, lo que lo hace inutilizable para el desarrollo web real.

Pero con la CLI de Docker configurada para el host remoto de Docker para Windows es realmente impresionante! Con este método, las aplicaciones rails muy grandes responden en ~100ms (o ~5s cuando tienen que compilar más de 10.000 líneas de Javascript y SCSS). ¡Eso también es con volúmenes montados!

Utilizo esta configuración casi todos los días para las aplicaciones impulsadas por Rails, Flask, Phoenix, Node y Webpack. Es muy sólido en términos de rendimiento y fiabilidad.

Configurar Docker para Windows (Docker Desktop)

En la configuración general, querrá exponer el demonio sin TLS.

Docker para Windows se ha cambiado recientemente a Docker Desktop,por lo que si la configuración se ve ligeramente diferente de la captura de pantalla, no se preocupe. Es lo mismo.

blog/docker-for-windows-expose-daemon-without-tls.jpg

Menciona «usar con precaución» porque cada vez que haces una conexión de red que no está encriptada, vale la pena hablar de ello, pero en este caso es completamente seguro porque nunca nos estamos conectando a ella a través de una red pública.

Esto va a permitir que la instancia WSL local se conecte localmente al demonio de Docker que se ejecuta en Docker para Windows. El tráfico ni siquiera sale de la caja de desarrollo, ya que el demonio solo está enlazado a localhostpor lo que ni siquiera otras máquinas de la red local podrán conectarse. En otras palabras, es muy seguro que estos datos se transmitan a través de texto sin formato.

También es posible que desee compartir las unidades en las que planea que resida el código fuente. Este paso no es necesario, pero mantengo mi código en un HD secundario interno, así que también compartí mi unidad «E». Si lo hace, realice la configuración «Unidades compartidas» y habilítela.

¿No puedes usar Docker para Windows?

¡Esto solo es necesario si NO está ejecutando Docker para Windows!

Querrá configurar su propia máquina virtual para ejecutar Docker. Docker Tip #73 entra en detalles sobre cómo hacerlo e incluso incluye vínculos a vídeos sobre cómo configurar la máquina virtual.

Instale Docker y Docker Compose en WSL

¡Todo el mundo puede seguir este punto!

Todavía necesitamos instalar Docker y Docker Compose dentro de WSL porque nos dará acceso a ambas aplicaciones cli. No nos molestaremos en empezar el demonio de Docker.

Las siguientes instrucciones son para Ubuntu 18.04 / 20.04, pero si utiliza una distribución WSL diferente, puede seguir la guía de instalación de Docker para su distro de los documentos de instalación de Docker.

Instalar Docker

Puede copiar / pegar todos los comandos a continuación en su terminal WSL.

Ubuntu 18.04 / 20.04 notas de instalación tomadas de la documentación de Docker:
# Update the apt package list.
sudo apt-get update -y

# Install Docker's package dependencies.
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

# Download and add Docker's official public PGP key.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Verify the fingerprint.
sudo apt-key fingerprint 0EBFCD88

# Add the `stable` channel's Docker upstream repository.
#
# If you want to live on the edge, you can change "stable" below to "test" or
# "nightly". I highly recommend sticking with stable!
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

# Update the apt package list (for the new apt repo).
sudo apt-get update -y

# Install the latest version of Docker CE.
sudo apt-get install -y docker-ce

# Allow your user to access the Docker CLI without needing root access.
sudo usermod -aG docker $USER

En este punto debe cerrar el terminal y abrir uno nuevo para poder ejecutar Docker sin sudo. ¡Será mejor que lo hagas ahora!

Instalar Docker Compose

Vamos a instalar Docker Compose usando PIP en lugar del binario precompilado en GitHub porque se ejecuta un poco más rápido (ambas siguen siendo aplicaciones de Python).

# Install Python 3 and PIP.
sudo apt-get install -y python3 python3-pip

# Install Docker Compose into your user's home directory.
pip3 install --user docker-compose

El siguiente paso es asegurarse de que $HOME/.local/bin esté establecido en su $PATH.

Puede comprobar si ya está configurado ejecutando echo $PATH. Dependiendo de la distro WSL que utilice, es posible que vea o no /home/nick/.local/bin (reemplace nick por su nombre de usuario).

Si está ahí, puedes ir y puedes saltar a la siguiente sección de este post.

Si no está allí, querrá agregarlo a su $PATH. Puede hacerlo abriendo su archivo de perfil con nano ~/.profile. A continuación, en cualquier parte del archivo, en una nueva línea, agregue export PATH="$PATH:$HOME/.local/bin" y guarde el archivo.

Por último, ejecute source ~/.profile para activar el nuevo $PATH y confirmar que funciona ejecutando echo $PATH. Deberías verlo allí ahora. ¡hecho!

Configurar WSL para conectarse a Docker para Windows

El siguiente paso es configurar WSL para que sepa cómo conectarse al demonio remoto de Docker que se ejecuta en Docker para Windows (recuerde, está escuchando en el puerto 2375).

Si no usa Docker para Windows y siguió la guía de Docker Tip #73 para crear su propia máquina virtual, probablemente ya lo hizo, lo que significa que puede omitir el siguiente comando.

Conéctese a un demonio remoto de Docker con este 1 revestimiento:

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc

Eso sólo tiene que añadir la línea de exportación a su archivo .bashrc para que esté disponible cada vez que abra su terminal. Los comandos source recargan la configuración bash para que no tengas que abrir un nuevo terminal ahora mismo para que surta efecto.

Verificar que todo funciona

# You should get a bunch of output about your Docker daemon.
# If you get a permission denied error, close + open your terminal and try again.
docker info

# You should get back your Docker Compose version.
docker-compose --version

Garantizar el trabajo de montajes por volumen

Lo último que tenemos que hacer es configurar las cosas para que el volumen funcione. Esto me tropezó por un tiempo porque echa un vistazo a esto…

Al usar WSL, Docker para Windows espera que proporcione las rutas de volumen en un formato que coincida con esto: /c/Users/nick/dev/myapp.

Pero, WSL no funciona así. En su lugar, utiliza el formato /mnt/c/Users/nick/dev/myapp Honestamente, creo que Docker debería cambiar su camino para usar /mnt/c porque está más claro sobre lo que está pasando, pero esa es una discusión para otro momento.

Para que las cosas funcionen por ahora, tiene 2 opciones. Si está ejecutando Windows 18.03 (primavera de 2018) o más nuevo, puede configurar WSL para que se monte en / en lugar de /mnt y ya está todo listo. Si tienes 17.09 (otoño de 2017) tendrás que hacer otra cosa.

Estas son las instrucciones paso a paso para ambas versiones de Windows:

¿Ejecutando Windows 10 18.03+ o Newer?

En primer lugar, abra un terminal WSL porque necesitamos ejecutar algunos comandos.

Cree y modifique el nuevo archivo de configuración WSL:
sudo nano /etc/wsl.conf

# Now make it look like this and save the file when you're done:
[automount]
root = /
options = "metadata"

Tenemos que establecer root = / porque esto hará que sus unidades montadas en /c o /e en lugar de /mnt/c o /mnt/e.

La línea options = "metadata" no es necesaria, pero corregirá los permisos de carpeta y archivo en los soportes WSL para que todo no sea 777 todo el tiempo dentro de los soportes WSL. Recomiendo encarecidamente que hagas esto!

Una vez que realice esos cambios, cierre la sesión e inicie sesión en Windows para asegurarse de que los cambios surtan efecto. Win + L no es suficiente. Tendrás que hacer un cierre de sesión en toda regla / iniciar sesión.

Si recibes un error la próxima vez que inicies tu terminal WSL no te asustes.

Es un error con 18.03 y se puede solucionar fácilmente. Pulse CTRL + Shift + ECS para abrir el administrador de tareas, vaya a la pestaña «Servicios», busque el servicio «LxssManager» y reinícielo.

Esto parece suceder sólo si cierra la sesión de Windows en lugar de hacer un reinicio completo y probablemente se corregirá en un parche futuro de 18.03+.

Una vez hecho esto, estás listo. Podrás acceder a tus monturas y funcionarán perfectamente con Docker y Docker Compose sin ningún ajuste adicional. Por ejemplo, podrás usar .:/myapp en un archivo docker-compose.yml, etc.

¿Qué emulador de terminal está utilizando?

Si usa ConEmu, entonces querrás asegurarte de actualizar a la versión alfa más reciente (al menos 18.05.06+ que puedes ver en la barra de título de la configuración). Contiene un archivo wslbridge.exe parcheado para admitir un punto de montaje raíz WSL personalizado.

El terminal WSL de Ubuntu predeterminado es compatible con esto de forma predeterminada, por lo que todos son buenos. No sé si otros terminales apoyan esto todavía. Hágamelo saber en los comentarios.

¡Ya terminaste! Puede omitir los pasos de 17.09 a continuación si siguió los pasos anteriores.

¿Ejecutando Windows 10 17.09?

En primer lugar, abra un terminal WSL porque necesitamos ejecutar algunos comandos.

Enlazar puntos de montaje personalizados para corregir las diferencias de Docker para Windows y WSL:
sudo mkdir /c
sudo mount --bind /mnt/c /c

Querrá repetir esos comandos para las unidades que compartió, como d o eetc.

Compruebe que funciona ejecutando: ls -la /c. Debería ver la misma salida exacta que la ejecución ls -la /mnt/c porque /mnt/c está montado en /c.

En este punto eres de oro. Puede utilizar rutas de montaje por volumen como .:/myapp en sus archivos de Docker Compose y todo funcionará como normal. Eso es increíble porque ese formato es lo que los usuarios nativos de Linux y MacOS también utilizan.

Vale la pena señalar que cada vez que ejecute un docker-compose up, querrá asegurarse de navegar primero a la ubicación /c/Users/nick/dev/myapp de lo contrario su volumen no funcionará. En otras palabras, nunca acceda a /mnt/c directamente.

Técnicamente se podía utilizar un enlace simbólico en lugar de un montaje de enlace, pero me han quemado en el pasado cuando se trataba de usar enlaces simbólicos y tener ciertas herramientas no funcionan porque no las siguieron correctamente. Mejor seguro que lo siento aquí.

Sin embargo, siéntase libre de utilizar enlaces simbólicos dentro de WSL para acceder a su montaje de enlace. Por ejemplo, mi carpeta Dev vive todo el camino en /e/Backup/VMs/workstation/home/nick/Dev y no hay manera en heck siempre voy a escribir eso cuando quiera acceder a mis archivos de desarrollo.

Así que dentro de WSL creé un symlink con ln -s /e/Backup/VMs/workstation/home/nick/Dev ~/Dev y ahora sólo puedo escribir cd ~/Dev para acceder a mis archivos y todo funciona.

Configure automáticamente el soporte de enlace:

Desafortunadamente tendrás que ejecutar ese comando sudo mount cada vez que abras un nuevo terminal porque WSL no admite el montaje a través de /etc/fstab todavía (editar: lo hace en 18.09+, pero si estás usando 18.09+ debes seguir los pasos de 18.03+).

Pero podemos evitar esa limitación simplemente montándola en su archivo ~/.bashrc Esto está un poco sucio, pero por lo que sé, creo que esta es la única manera de hacerlo, así que si sabes de una mejor manera, por favor hágamelo saber.

Puede hacerlo con este 1 revestimiento: echo "sudo mount --bind /mnt/c /c" >> ~/.bashrc && source ~/.bashrc y asegúrese de repetir el comando para las unidades adicionales que compartió con Docker para Windows. Por cierto, no necesitas mkdir porque ya lo hicimos.

Sí, lo sé, eso significa que usted será rápido para su contraseña raíz cada vez que abra un terminal, pero podemos evitarlo también porque Linux es genial así.

Permita que el usuario vincule un soporte sin una contraseña raíz:

Para ello, ejecute el comando sudo visudo

Eso debería abrir nano (un editor de texto). Goto la parte inferior del archivo y añadir esta línea: nick ALL=(root) NOPASSWD: /bin/mount, pero reemplace «nick» por su nombre de usuario.

Eso sólo permite a su usuario ejecutar el comando sudo mount sin tener que proporcionar una contraseña. Puede guardar el archivo con CTRL + O, confirmar y salir con CTRL + CTRL + X.

Misión completa. Todos están listos para ganar en la vida mediante Docker para Windows y WSL.

blog/cards/getting-docker-for-windows-and-wsl-working-together.jpg

Instalar W11 y no morir en el intento


Cuando se anunció Windows 11 por primera vez, Microsoft lanzó los nuevos requisitos del sistema del sistema operativo , que incluían un procesador de seguridad TPM 2.0 , arranque seguro, CPU’s de las más modernas y al menos 64 GB de espacio en el disco duro, es decir , mas en detalle:

  • Procesador: 2 o más núcleos de 1 GHz o más, y tiene que ser un procesador de 64 bits compatible o sistema en un chip (SoC).
  • Memoria RAM: mínimo de 4 GB de memoria RAM.
  • Almacenamiento: mínimo de 64 GB de espacio libre en el disco duro donde vayas a instalarlo.
  • Firmware del sistema: un ordenador con UEFI, y compatible con Secure Boot.
  • TPM: compatibilidad con el Módulo de plataforma segura 2.0 o TPM 2.0, que desde 2016 es obligatorio para el hardware de cualquier ordenador con Windows. Te hemos escrito cómo comprobar si tienes chip TPM en el ordenador, ya que será el requisito más duro de cumplir.
  • Tarjeta gráfica: su tarjeta gráfica necesita ser compatible con DirectX 12 o posterior, y con el controlador WDDM 2.0.
  • Pantalla: una pantalla de un mínimo de 9 pulgadas en diagonal, con 720p de alta definición, y canal de 8 bits por color.
  • Otros: necesitará tener una cuenta de Microsoft, y necesitará estar conectado a Internet para la configuración inicial y cualquier actualización.
  • Un identificador válido (antiguo Cd-key) de Windows 10.

Cuando Microsoft se dio cuenta de que muchas personas, especialmente las de la empresa, estarían probando versiones preliminares de Windows 11 en máquinas virtuales, las eximieron de los requisitos del sistema

Windows 11: Microsoft está investigando estos ocho problemasSin embargo, Microsoft ahora requiere hardware compatible incluso en máquinas virtuales y adopta una postura firme sobre los requisitos del sistema, llegando incluso a decir que las personas que instalan Windows 11 en hardware incompatible pueden no obtener actualizaciones de seguridad .

Para aquellos que estén dispuestos a correr el riesgo de ejecutar Windows 11 en hardware incompatible, se ha creado un script que permite nuevas instalaciones y actualizaciones para eludir los requisitos del sistema operativo.

El script que omite los requisitos del sistema de Windows 11

Este nuevo script se lanzó como parte de la extremadamente útil envoltura Universal MediaCreationTool , un archivo por lotes que le permite crear una ISO para cualquier versión de Windows 10, con el soporte de Windows 11 agregado .

Universal MediaCreationTool por tanto da soporte ingenioso para ediciones comerciales, y ¡también es una herramienta de automatización de implementación de Windows 10/11 potente pero simple!, por lo que podemos instalar w10 y también w11 siempre obviamente que tengamos una licencia correcta de w10:

Envoltorio Universal MediaCreationTool
Envoltorio Universal MediaCreationTool
Fuente: BleepingComputer

Podemos configurar el funcionamiento del scripts a través de set vars, parámetros de línea de comandos o cambie el nombre del script como las iso 21H2 Pro MediaCreationTool.bat. Además contaremos con las opciones de configuración de Windows recomendadas con la menor cantidad de problemas en las actualizaciones configuradas a través de auto.cmd. Por cierto este script también cuenta con mensajes gráficos y es seleccionable por teclado la versión de destino y la acción preestablecida.

Estas son las opciones fundamentales:

Configuración automática con medios detectados sin confirmación: puede solucionar problemas de actualización que fallan agregando no_update al nombre de la secuencia de comandos
Crear ISO con los medios detectados en la C:\ESDcarpeta sin confirmación: puede anular los medios detectados agregando el nombre de la edición / idioma / arco al nombre de la secuencia de comandos
Crear USB con los medios detectados después de la confirmación

Y estas son algunas de las opciones posibles:

– Puede hacer clic en Atrás y seleccionar ISO lugar para guardar en un camino diferente preajustes personalizados por encima del soporte personalización medios ‘OEM’, que se pueden desactivar mediante la adición no_oema nombre del script
– Recogida $OEM$de carpetas (si existe) con ningún ajuste de configuración post como $OEM$\$$\Setup\Scripts\setupcomplete.cmd
– Escritura sources\PID.txtde archivos a preseleccionar la edición en el arranque multimedia o la configuración dentro de Windows (si está configurado)
– Escribir auto.cmdarchivo para volver a ejecutar la configuración automática bajo demanda, desde el medio (incluye Omitir TPM si las fuentes son 11)
– Escribir el winpeshl.iniarchivo en boot.wim para Omitir TPM Verificar en el arranque del medio (si las fuentes son 11)
Seleccionar en MCT con confirmación manual para todo en MCT GUI : sin personalización de medios ‘oem’, el script pasa la configuración de products.xml y se cierra sin tocar los medios

-Omitir la verificación de TPM en Dynamic Update v1 (basado en wmi) o v2 (basado en ifeo) scripts de alternancia independientes en MCT\dir : en todo el sistema, desbloquea las vistas previas internas en la actualización de Windows o ejecuta setup.exe manualmente mientras está en línea , al usar medios creados en otra PC por primera vez, se puede iniciar auto.cmd desde el medio una vez para habilitar

Si bien el script principal de este proyecto de código abierto es ‘ MediaCreationTool.bat ‘ que se utiliza para crear ISO de Windows, también incluye un script llamado ‘ Skip_TPM_Check_on_Dynamic_Update.cmd ‘, que configura el dispositivo para omitir las comprobaciones de hardware compatibles.

Cuando se ejecuta en un dispositivo Windows 10 o Windows 11, el script Skip_TPM_Check_on_Dynamic_Update.cmd realizará una variedad de tareas, que incluyen:

  • Cree el valor ‘ AllowUpgradesWithUnsupportedTPMOrCPU ‘ en la clave de registro HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ MoSetup y configúrelo en 1 .
  • Registra una suscripción de evento WMI denominada ‘Omitir comprobación de TPM en actualización dinámica’ que elimina el archivo ‘ C: \ $ WINDOWS. ~ BT \ appraiserres.dll ‘ cuando se inicia el ejecutable vdsldr.exe durante la instalación de Windows 11.Cabe señalar que la suscripción al evento WMI creada permanecerá vigente hasta que ejecute el script Skip_TPM_Check_on_Dynamic_Update.cmd nuevamente, lo que hará que se eliminen las suscripciones al evento. Puede hacer esto después de instalar o actualizar Windows 11.

Antes de usar este script, al intentar actualizar una máquina virtual de Windows 11 build 22449 a la última versión de vista previa, la actualización falló porque la instalación no podía ver la función de arranque seguro, un procesador TPM 2.0 y el disco del sistema era demasiado pequeño.

La configuración de Windows 11 falla en hardware incompatible
La configuración de Windows 11 falla en hardware incompatible
Fuente: BleepingComputer

Sin embargo, después de ejecutar este script, podríamos instalar la última versión preliminar 22463 de Windows 11 sin ningún problema.

Vista previa de Windows 11 build 22463 instalada en VirtualBox
Vista previa de Windows 11 build 22463 instalada en VirtualBox

Cualquiera que decida usar esta omisión debe tener en cuenta que este es un método no compatible para instalar Windows 11 y podría provocar problemas de rendimiento u otros errores al usar el sistema operativo. Además, es posible que Microsoft no proporcione actualizaciones de seguridad para dispositivos no compatibles, por lo que es probable que su instalación sea menos segura.

Resumimos ahora los pasos para poder realizar la instalación de w11 en un equipo que en principio no lo permitía:

  • Necesitamos un pen-drive de al menos 8GB y una cuenta gratuita de Microsoft ( por ejemplo una cuenta de correo de hotmail)
  • Descargaremos el script oficial desde su pagina de github mediante la opción de «Download Zip» desde el siguiente enlace https://gist.github.com/AveYo/c74dc774a8fb81a332b5d65613187b15#file-mediacreationtool-bat-md
  • Descomprimimos el contenido del fichero en una carpeta
  • Buscamos el fichero MediaCreationToool.cmd y ejecutamos ahora el citado script con permisos de administrador
  • Seleccionamos cuando nos lo solicite la unidad exacta donde hayamos enchufado el pen-drive ( por ejemplo D:\) ,la cual será la ubicación en la que crearemos la unidad de instalación
  • Seleccionamos la ultima opción («11») dado que las versiones superiores sirven para instala versiones de windows 10 siempre qeu se cuente con licencias para ello
  • Esperamos a que se complete el proceso en el que básicamente se descargara la imagen correcta , se instalaré ésta en el pen -drive y finalmente borrara los archivos temporales
  • Una vez completado el script ejecutaremos el script y nos haya devuelto el control , ejecutaremos DOS veces Skip_TPM_Check_on_Dynamic_Update
  • Apagamos el equipo y configuramos la BIOS para que arranque el PC desde una unidad USB .
  • Pinchamos la unidad USB que hemos creado y seguimos las instrucciones teniendo a mano la licencia de W10 pues nos la pedirá esta como primer paso para instalar W11)
  • !!SUERTE pues ya nos deberia dejar instalar Windows 11 aunque no cumplamos con todos los requisitos establecidos!!

No debemos olvidar que al parece Microsoft ha comentado  que estos ordenadores donde hayamos realizado el procedimiento anterior podrían tener más errores, y probablemente no recibirán tantas actualizaciones de seguridad del sistema operativo, así como tampoco las actualizaciones periódicas que vayan lanzando cada medio año o cada año con nuevas características, pero si contamos con un equipo algo antiguo que no va demasiado bien y queremos darle una oportunidad , quizás este sea un buen camino para darle una nueva vida.