Mejora la productividad con Docker en Visual Studio Code

En otro articulo de nuestro blog, ya hablamos sobre la tecnología conocida como Docker, su definición, sus virtudes y alguno de sus defectos. En esta ocasión, profundizaremos un poco más en este software y os contaremos cómo sacarle el mejor provecho junto a otros programas que simplificarán su uso.

Simplificando Docker

Docker es una herramienta profunda y con muchos detalles en los que es fácil perderse. Trabajar con Docker tiene grandes ventajas en lo que respecta al despliegue de una aplicación, principalmente porque garantiza que allá donde se despliegue la aplicación, las características de software del entorno son las mismas que las del entorno donde ha ido desarrollando el equipo. Después, siempre se puede alterar las características del hardware/cloud para aumentar el rendimiento según se precise.

Ahora bien, de cara a usar una imagen de Docker para trabajar en un proyecto, aparece el handicap de depender del hardware de las workstations del equipo de desarrollo. Esto puede llegar a ser un problema si en dichas workstations usamos Windows.

A continuación veremos cómo mejorar muy sustancialmente el rendimiento en este contexto: trabajar en un proyecto alojado en una imagen Docker desde Windows.

Alternativas para trabajar con una imagen de Docker.

Trabajar en un proyecto contenido en una imagen Docker significa algo tan básico como poder acceder a los ficheros que componen la aplicación para poder editarlos, crearlos, eliminarlos, etc. Dichos ficheros están contenidos en la imagen por lo que, a priori, no podemos acceder desde nuestro sistema de ficheros local (Explorador de Windows o similar).

Así, pues las principales opciones serían:

Abrir una conexión SSH en la imagen y editar los ficheros desde allí. Esta opción tiene varios handicaps:

  • Si instalamos y usamos un editor liviano (tipo VI o Nano), no deja de ser farragoso y lento para trabajar. No tienen la usabilidad típica de un IDE como tal.
  • Si instalamos y usamos un IDE, estaremos ultrajando directamente el leitmotiv de una imágen Docker, que no es otro que ser una imagen estándar con lo necesario (y solo lo necesario) para hacer funcionar la aplicación.

Instalar un cliente GIT en la imágen Docker y realizar actualizaciones PULL del código trabajado fuera (desde la workstation).

  • Esta opción no es nada ortodoxa pues esta no es la finalidad del sistema de control de versiones, y ensuciamos el repositorio.
  • Tampoco es eficiente que para cada cambio haya que hacer PUSH y PULL. Sería muy lento.

Crear un volumen entre una carpeta de la imágen y una carpeta del workstation.

Esta es la solución propuesta por Docker, que es muy similar a la utilizada en las máquinas virtuales. Esta solución consiste en que se mapea un directorio local de nuestra workstation con otro directorio de dentro de la imagen Docker, y es Docker quien se encarga de sincronizar los contenidos en la dirección que indiquemos, es decir, que por ejemplo cuando creemos un fichero en nuestro directorio, Docker lo detecta, y lo crea dentro de la imagen Docker.

Esto nos permite que trabajemos con un IDE en la workstation Windows y sea Docker quien se encargue de sincronizar lo que tocamos en el IDE con el contenido de la imagen Docker.

Este sistema funciona razonablemente bien en plataformas Linux o derivados (MacOS), pero las diferencias sustanciales entre la gestión de ficheros de Windows (workstation) y la imágen Docker (Linux) hacen que esta solución en Windows sea extremadamente lenta, y por tanto poco eficaz.

Conectar el IDE de Visual Studio Core con la imágen Docker mediante WSL 2 (la solución buena).

Esta es la solución que, hoy por hoy, ofrece el mejor rendimiento con diferencia. Se trata de usar Visual Studio Core con una serie de extensiones que conectarán con la imágen Docker y nos permitirán trabajar con el IDE de Microsoft desde nuestra workstation tocando directamente los ficheros de la imagen Docker.

Cómo configurar y conectar VSCore con Docker:

  • Instalar Docker Desktop

Docker Desktop

  • Instalar y configurar WSL, que es un subsistema de Windows para Linux, lo que vendría a ser una capa intermedia.

(https://docs.microsoft.com/es-es/windows/wsl/install-win10). 

  • Instalar Microsoft Visual Studio Core

https://code.visualstudio.com/

  • Instalar la extensión de VSCore «Remote – WSL». Esta extensión nos permite editar los ficheros contenidos en la imagen mediante el IDE.

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl

  • Instalar la extensión de VSCore «Docker for Visual Studio Core». Esta extensión nos permitirá manejar la imagen Docker desde el propio VSCore.

https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker 

Últimos pasos

Llegados a este punto, dentro de VSCore, en el apartado Remote Explorer pulsamos Attach To Container y nos aparecerá una lista con las imágenes Docker que tenemos corriendo en nuestra Workstation. Elegimos la que nos interese, le indicamos el directorio al que queremos conectarnos, y VSCore cargará el proyecto completo en el IDE.

Comentar también que para los usuarios de MacOS esta solución también es válida. Lo único que debemos tener en cuenta es que WSL no es necesario en MacOs, y que a nivel de extensiones de VsCore la que necesitaremos es esta:

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers

Con esto tendríamos el entorno preparado para trabajar. Comentar que esto lo podemos aderezar agregando GIT a la ecuación para tener un entorno más integrado. Para ello basta con tener instalado un cliente de GIT dentro de la imagen Docker. De esta forma tendréis una sincronización óptima de vuestro editor de código y la imagen que tenéis instalada en Docker, permitiendo mucha más agilidad en vuestro entorno de trabajo.

Enero 2021
Jorge Martin / Programación y Desarrollo Web