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

Cómo añadir un reloj o un calendario al escritorio de Windows 10


Como habrá notado, los gadgets de escritorio y la barra lateral faltan en Windows desde Windows 8 RTM pues Microsoft en su día los eliminó para enfocar el desarrollo en Windows 8 y promover las llamadas aplicaciones modernas basadas en mosaicos.

Estos gadgets en realidad no eran mas que pequeños elementos software que en estos momentos ya no podemos encontrar de manera nativa en Windows 10, pero que aún muchos recordamos como pueden ser pueden ser :

  • Calendario
  • Reloj tamaño «medio» en tiempo real en tamaños y diferentes diseños
  • Estado del tiempo
  • Notas
  • Juegos
  • etc

Pueden ser simples , pero en todo momento teníamos a nuestra disposición datos útiles relativos a la información meteorológica, la hora de todo el mundo, el calendario, la bolsa, etc. De hecho gracias a estos pequeños elementos software que os comentamos, disponíamos de manera directa de sencillos juegos, un visor de fotos, u otras utilidades. En estos momentos estos objetos se podrían comparar a lo que actualmente nos ofrece la propia Microsoft a través de su funcionalidad Noticias e intereses. Esto demuestra que este tipo de informaciones accesibles en todo momento en Windows, siguen siendo muy necesarias.

Mencionar que la principal razón de esta desaparición vino dada por temas de seguridad pues en su día Microsoft consideró que estos programas se podían convertir en un claro foco de vulnerabilidades, de ahí su eliminación completa, lo cual ciertamente no necesariamente tiene que ser así si sabemos el origen exacto de ese gadget y confiamos en el.

Barra de Juego

En las últimas versiones de Windows 10, también han llegado algunos de estos elementos integrados en el sistema. Con el tiempo estos poco a poco han crecido en número ( eso si en poca proporción y además algunos son de pago) por lo que claramente Np son comparables en cuanto a cantidad, a los que podíamos usar en el pasado de forma nativa en en versiones anteriores ,

Para acceder a la Barra de juego no tenemos más que hacer uso de la combinación de teclas Win + G.

Obviamente No necesitamos tener una Xbox para ejecutar esta aplicación , pues como vamos a ver en realidad

la vamos a usar con otro cometido que nada tiene que ver con los juegos online.

En caso de no tener instalada dicha herramienta, deberemos ir a la tienda de aplicaciones de Microsoft e instalarla ya que es completamente gratuita y la necesitaremos para acceder a las diferentes widgets que Microsoft nos puede proporcionar.

Una vez instalada xbox game box ,en ese momento aparecerá en pantalla la barra de juego a la que os hacemos referencia, siendo uno de sus apartados llamado Menú Widgets. Antes de seguir destacar que existen algunas herramientas que nos pueden ser muy útiles como son el de captura, la configuración de audio, el visor de rendimiento o la propia configuración de los widgets disponibles.

Si nos centramos ahora así en widgets, al pinchar aquí veremos una lista con los widgets que tengamos instalados. Si queremos instalar nuevos tendremos que ir a la tienda de Widgets donde podremos encontrar una muy pequeña selección de widgets tanto gratuitos como de pago para que podamos ver o anclar aquellos que nos interesen.

Es importante destacar que en el momento que cambiemos de aplicación o pulsemos Esc, estos elementos desaparecerán de nuevo. Sin embargo si, cuando están en pantalla, pinchamos en su icono con forma de chincheta situado en la esquina superior derecha, se mantendrán a la vista siempre que anclemos aquellos que nos interesen. .

Desktop Gadget SideBar

Para todos los entusiastas de los gadgets que disfrutaron y se divirtieron con ellos existe , existe la versión revivida de Desktop Gadgets / Sidebar .

Por tanto, estamos ante un software gratuito que nos permitirá traer de vuelta esos gadgets de los que os hablamos. De hecho se podría decir que en gran medida respeta la apariencia y el funcionamiento de los gadgets originales que encontrábamos en Vista. Decir que para poder traer de vuelta estos elementos a Windows 10, lo podremos lograr desde este enlace , enlace que nos descargará DesktopGadgetsInstaller.zip.

A continuación, una vez tenemos descargado ese fichero, ejecutamos el programa de manera convencional y lo configuramos para que, por ejemplo, su interfaz esté en español

configurar gadgets

Las características más importantes de esta instalación son:

  • Es compatible con todos los idiomas posibles de Windows 8, por lo que obtendrá gadgets y la interfaz de la barra lateral con su idioma nativo.
idioma
  • El instalador puede detectar el idioma requerido automáticamente e instalarlo para Sidebar.
  • Debemos esperar a que finalice el instalador. Verá la ventana familiar «Gadgets» abierta en el escritorio.

Restaurará todas las características originales como:

  • Menú contextual del escritorio de gadgets:
  • El comando mostrar / ocultar gadgets:
  • Integración total del Panel de control con enlaces de trabajo dentro de la categoría «Apariencia y personalización» 

  • La integración con Windows Search: donde sea que escriba «gadgets», en el Panel de control o en los menús de inicio de terceros como Classic Shell o StartIsBack , las tareas comunes relacionadas con los gadgets aparecerán en los resultados de búsqueda. El menú Classic Shell:Ejemplo de menú de Classic ShellEl menú Inicio es Atrás:Ejemplo de menú Inicio está atrás

Por tanto estamos ante un software gratuito que en gran medida respeta la apariencia y el funcionamiento de los gadgets originales que encontrábamos en Vista pero que si nos ceñimos exclusivamente a los gadgets incluidos por defecto se limita a solo 8 gadgets, que eso si podemos ampliar desde Gadgets Revived | Desktop gadgets and sidebar for Windows 10 and Windows 8 .

Win7Gadgets

Aparte de la opción anterior , la cual parece limitada aunque tal vez suficiente si buscamos algo en concreto que nos satisfaga alguna de la opciones disponibles , existe otra alternativa de terceros Win7Gadgets.

A la misma se puede acceder desde este enlace, donde nos encontramos con una buena cantidad de elementos de este tipo separados por categorías

Una vez nos adentramos en cualquiera de ellas, nos encontramos con varias propuestas de un mismo tipo, pero con diferentes diseños y funciones aunque tendremos la oportunidad de elegir la que más nos interesa en cada caso para su descarga e instalación .

Lo peor de esta opción es que tendremos que instalar cada gadget manualmente o bajo nuestra propia completa responsabilidad pues incluso W10 nos advertirá de que potencialmente estos gadgets pueden dañar nuestro equipo , por lo que recomendaríamos personalmente mucha prudencia a la hora de optar por esta opción.

Barra de progreso en PowerPoint


Para crear una barra de progreso en la parte inferior  de su presentación de PowerPoint  2018  en realidad  es un proceso muy sencillo ,  pues solo tiene que incluir en macros un sencillo  código en Visual Basic que vamos a  ver a continuación.

Para ello , desde Power Point 2018 tenenos que ir a la pestaña Vista  y pulsar en Macros.

Ahí escribiremos «Barra de Progreso » en la caja «nombre de la macro  y pulsaremos sobre  el  botón «Crear«

Ahora justo en la caja del código meteremos el siguiente  fragmento de código en VB para aplicaciones :

Sub BarraDeProgreso()
On Error Resume Next
Height = 10 ' cambiar este valor para modificar la altura de la barra de progreso
With ActivePresentation
For X = 1 To .Slides.Count
.Slides(X).Shapes("A").Delete
.Slides(X).Shapes("B").Delete
Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
0, .PageSetup.SlideHeight - Height, _
X * .PageSetup.SlideWidth / .Slides.Count, Height)
s.Fill.ForeColor.RGB = RGB(0, 153, 204) ' cambiar los valores de RGB para personalizar el color de la barra
s.Line.Visible = msoFalse
s.Name = "A"
Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
X * .PageSetup.SlideWidth / .Slides.Count, .PageSetup.SlideHeight - Height, _
.PageSetup.SlideWidth - X * .PageSetup.SlideWidth / .Slides.Count, Height)
s.Fill.ForeColor.RGB = RGB(255, 255, 255)
s.Line.Visible = msoFalse
s.Name = "B"
Next X:
End With
End Sub

Hecho esto ,guardaremos nuestro trabajo  ,pulsando en el  icono del «disquette» o simplemente pulsando  en Guardar.

 

Ahora, tan solo hay que ejecutar la macro que acabamos de crear  y la macro insertará automáticamente  en cada slide  una barra de progreso   de forma que variara  en función del numero de hoja de presentación de menos mas  llegando a su culminación al final de la ppt.

Como aspecto importante  no  debemos olvidar que cada vez que creemos una nueva hoja ,o alteremos el orden de las  hojas, debemos ejecutar la macro que acabamos de crear.

Para  terminar   si queremos almacenar la macro en el Powerpoint al guardar los cambios en la ppt , debemos asegurarnos de que el formato que elijamos (normalmente pptx)  lo permite ,porque si no lo hacemos  al   abrirla nuevamente  aunque la barra de progreso se mantendrá en las slides, la macro no estará y si cambiamos algo no podremos actualizar esta.