arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Wsl vs Vagrant vs Docker

Luis Fernando Garcia Perez

Desarrollador de software.

av_timer 4 Min. de lectura

remove_red_eye 6932 visitas

calendar_today 13 Noviembre 2019

Portada del artículo con el título Wsl vs Docker vs Vagrant

Una de las razones por lo que a muchas personas no les gusta el desarrollo en windows, es por el hecho de que muchas veces es difícil instalar o ejecutar sotfware, como claro ejemplo podemos ver a ruby on rails, así como a muchas otras tecnologías.

Aunque, actualmente el desarrollar en windows es opcional, esto es debido a todas las herramientas que podemos usar, herramientas como lo son docker, vagrant y el wsl, nos permiten trabajar con linux en windows haciendo el desarrollo menos painful.

En este artículo veremos cuales son las ventajas y desventajas de usar ya sea docker, vagrant o wsl. Antes de continuar tenemos que tener en cuenta, que la única forma de poder correr linux en windows es usando la virtualización, si, esto quiere decir que no importa si usas vagrant ,docker o el subsistema de linux , al final de día estaremos usando una maquina virtual.

Docker

Comenzando nos encontramos con la opción actualmente más popular, docker sin dudad es la opción #1 para desarrolladores windows ya que nos provee una forma de correr nuestras aplicaciones en un entorno de linux de una manera muy rápida, además que contamos con muchas herramientas con entornos pre-configurados, listos para el desarrollo.

Como ventajas de desarrollar en docker nos podemos encontrar con la rápides de definir entornos, esto es debido a las imagenes compiladas y a la orquestación con docker-compose, no olvidemos el eslogan Build, Share, and Run Any App, Anywhere, esto debido a que docker es multiplataforma, básicamente podemos correr docker en cualquier ambiente linux, si esto incluye a maquinas virtuales 😮.

Otra ventaja y creo que es la más importante es que con docker, directamente desarrollamos en un ambiente de producción, nosotros podemos desarrollar nuestra app dentro de un contenedor y al finalizar automaticamente hacer deploy del mismo, con esto nos aseguramos que nuestra aplicación se ejecutará exactamente como en desarrollo.

Como una desventaja que podemos encontrar, es el hecho de interactuar con la terminal interna del contenedor, es decir imaginemos que tenemos nuestro stack, de php y mysql, y queremos interactuar con php, de primeras instancias tendríamos que ejecutar docker exec -it container bash y que pasa si ahora queremos ejecutar otra terminal para ejecutar el servidor, tendríamos que volver a ejecutar el mismo comando para cada terminal con la que necesitemos interactuar, esto sin duda es una desventaja ya que muchas veces perdemos valioso tiempo ejecutando terminales.

Aunque por otro lado nos podemos encontrar con soluciones para esto, soluciones que vienen con un conjunto de scripts que hacen el desarrollo en docker divertido y sobre todo rápido.

Como ejemplo de estas podemos encontrar.

Como comentario adicional si tú eres un usuario de vscode, ahora podemos integrar vscode para el desarrollo con contenedores 😱 en CódigoFacilito tenemos un video de como hacer la integración con este pluging, puedes ver el video aquí 👉 video.

Wsl

Continuando nos encontramos con el wsl o también conocido como subsistema de linux para windows, esta es la solución nativa que viene con windows y nos permite ejecutar diferentes distro(Sistemas operativos) como ubuntu debian y opensuse, dentro de las ventajas que podemos encontrar es que el wsl tiene integración directa con el sistema de archivo de windows es decir nosotros podemos ejecutar comandos de linux dentro de cualquier directorio de nuestro sistema operativo.

Otra ventaja que podemos encontrar es que esta una solución nativa, es decir unicamente tenemos que instalar y ejecutar el launcher para comenzar a ejecutar comandos de linux, adicionalmente a esto si tu eres usuario de vscode puedes instalar el plugin Remote - WSL para poder integar la terminal dentro del editor.

Como desventaja podemos decir que es una solución un poco lenta, personalmente he notado esto al tratar de correr proyectos con grandes cantidades de archivos, como ejemplo puedo mencionar que al trabajar en el desarrollo de la plataforma de CódigoFacilito al ejecutar el servidor este tarda aproximadamente entre 40 segundos y 1 minuto en estar listo, algo que en una versión de linux nativa tomaría aproximadamente 5 segundos.

Otra desventaja es que wsl viene con ciertas limitaciones es decir, nosotros no podemos ejecutar docker, esto es debido a ciertas caracteristicas de linux que nos están implementadas.

Vagrant

Como última solución nos encontramos con vagrant, vagrant es una herramientas para el manejo del ciclo de vida de maquinas virtuales para el desarrollo, con vagrant podremos crear, eliminar y aprovisonar maquinas virtuales, en CódigoFacilito acabamos de lanzar un curso de introducción de esta herramienta totalmente gratuito 👉 curso vagrant .

Dentro de la ventajas nos encontramos con.

  • Portabilidad
  • Cross-Platform

Una de las ventajas de usar vagrant es que es multiplataforma y portable nosotros podemos ejecutar vagrant en los 3 sistemas operativos más populares linux, windows y mac, esto nos da mucha ventajas ya que podemos trabajar en sistemas operativos diferentes pero con un entornos de desarrollo identicos, con esto nos evitamos decir la frase "En mi maquina si funciona" 😅.

Otra cosa interesante de trabajar en entornos virtuales es que nos acerca más a un ambiente de producción ya que dentro de nuestra maquina podemos replicar la misma configuración que en nuestro servidor de producción, de hecho muchas empresas usan vagrant para definir entornos de desarrollo y staging.

Como comentario adicional si tu eres un usuario de vscode, ahora podemos integrar vscode para el desarrollo en entornos remotos 😱 en CódigoFacilito tenemos un video de como hacer la integración con este pluging, puedes ver el video aquí 👉 video.

Ganador

Y entonces quien es el ganador?, esto como en casi todo depende de que con herramientas te sientas comod@, hace ya un par de años que he usado las 3 herramientas y personalmente, creo que el ganador es sin duda trabajar usando una maquina virtual con virtualbox usando vagrant, esto debido a muchos factores como la velocidad de ejecución, y cierta compatiblidad de aplicaciones como, poder ejecutar docker.

Aunque creo que el ganador al final del día será wsl en su versión 2 que saldrá en la próxima actualización de windows en mayo 2020, en la cual veremos muchas mejoras a la versión 1, asi como la compatibilidad de poder ejecutar docker, esto es debido a que esta nueva versión tendrá una versión del kernel de linux 😱.

Y para ti cuál es la mejor alternativa para desarrollar en windows ?