Desarrollo principalmente usando Visual Studio en Windows. El problema es que después de un tiempo, Windows se atasca y me enfrento a la necesidad de reinstalar Windows. Del mismo modo, cambiar a máquinas nuevas es un problema.
Reinstalar Windows es doloroso porque mi entorno de desarrollo tiene muchas dependencias (como archivos de configuración MSBuild adicionales, extensiones VS, npm, Java, etc.). No me imagino que estoy solo en tener un sistema complejo, y configurarlo de nuevo probablemente tomaría un día mínimo.
Realmente no he usado Docker, pero en teoría parece que podría configurar mi entorno de desarrollo en un Contenedor de Windows y luego simplemente enviarlo (por ejemplo, copiarlo a mi computadora portátil, instalar una nueva instalación de Windows) y debería ser sencillo. .
¿Es posible lo que estoy describiendo? ¿Hay alguna desventaja, como el rendimiento, la fiabilidad? Otras trampas?
Respuestas:
Este no es un problema poco común, pero Docker no es realmente la herramienta adecuada para resolverlo. Los contenedores en general (incluido Docker) están destinados a proporcionar un tiempo de ejecución de la aplicación para un solo proceso , como un servidor web, no para un escenario multiproceso como un entorno de desarrollo. En puede hacerse, pero no es una solución muy elegante.
Un enfoque mejor (y más común) es crear máquinas virtuales a través de un hipervisor tradicional como VirtualBox o Hyper-V (ya que está en Windows). Un flujo de trabajo típico es:
Vagrant también es una herramienta fantástica para hacer mucho de lo anterior de una manera más estructurada.
Un beneficio adicional de todo esto es que ahora tiene entornos estandarizados que se pueden compartir con todo su equipo, ahorrando a todos el esfuerzo. Esto es especialmente bueno para incorporar rápidamente nuevas personas.
Volviendo a su pregunta original, Docker realmente no está destinado a esto, pero si tuviera un entorno de desarrollo lo suficientemente pequeño (digamos PHP en Linux), podría hacerlo en un contenedor, y el beneficio sería una imagen mucho más pequeña (potencialmente menos de 100 MB frente a muchos GB para una VM de Windows con disco virtual).
fuente
no en un contenedor acoplable, pero sí en n contenedores acoplables.
Si bien, en teoría, podría ensamblar todo su entorno de desarrollo dentro de un solo contenedor, Docker no estaba destinado a hacer esto.
En su lugar, debe implementar cada servicio en contenedores separados, utilizando Docker Composose , administrando toda su infraestructura en un solo archivo, donde cada servicio tendrá su propio archivo de registro, espacio de usuario, redes, etc.
Déjame darte un ejemplo, este es un borrador de mi
docker-compose.yml
Hay un proxy nginx (myproxy), dos bases de datos postgres similares (mydb1 y 2), un antiguo servidor de aplicaciones web java (www), un contenedor java jetty que proporciona un servicio web de descanso y finalmente un contenedor de postfix SMTP muy simple.
Todo comienza, generalmente :), con
docker-compose up
mi máquina de desarrollo o en producción; los archivos de registro se agregan en un archivo fácil de leer y es posible replicar localmente casi todas las funciones con la garantía de que, si funciona en mi computadora portátil, funcionará.fuente
Utilizo máquinas virtuales VirtualBox para este tipo de cosas.
La portabilidad de tener su entorno de desarrollo en un contenedor es útil, pero lo realmente bueno es que puedo tomar una foto antes de cualquier intento de actualización, y si lo arruino, no hay problema en retroceder y comenzar de nuevo.
También me parece útil hacer esto porque con frecuencia trabajo con múltiples versiones de cosas como Qt, y no tengo ganas de descubrir cómo hacer que las dos versiones coexistan; en cambio, las coloco en diferentes máquinas virtuales y No tengo que preocuparme por las interacciones porque instalé algo incorrectamente.
fuente