Introducción a los contenedores remotos de Docker en WSL 2

Esta guía paso a paso le ayudará a empezar a desarrollar con contenedores remotos mediante la configuración de Docker Desktop para Windows con WSL 2 (Subsistema de Windows para Linux, versión 2).

Docker Desktop para Windows está disponible de forma gratuita y proporciona un entorno de desarrollo para compilar, enviar y ejecutar aplicaciones dockerized. Al habilitar el motor basado en WSL 2, puede ejecutar contenedores de Linux y Windows en Docker Desktop en la misma máquina.

Introducción a los contenedores de Docker

Docker es una herramienta que se usa para crear, implementar y ejecutar aplicaciones mediante contenedores. Los contenedores permiten a los desarrolladores empaquetar una aplicación con todas las partes que necesita (bibliotecas, marcos de trabajo, dependencias, etc.) y enviar todo como un paquete. El uso de un contenedor garantiza que la aplicación se ejecutará de la misma forma, independientemente de la configuración personalizada o de las bibliotecas instaladas anteriormente en el equipo en el que se ejecute, que podría diferir del equipo que se usó para escribir y probar el código de la aplicación. Esto permite a los desarrolladores centrarse en la escritura de código sin preocuparse por el sistema en el que se ejecutará el código.

Los contenedores de Docker son similares a las máquinas virtuales, pero no crean un sistema operativo virtual completo. En su lugar, Docker permite a la aplicación usar el mismo kernel de Linux que el sistema en el que se ejecuta. Esto permite que el paquete de la aplicación solo requiera partes que aún no existen en el equipo host, lo que reduce el tamaño del paquete y mejora el rendimiento.

La disponibilidad continua, mediante el uso de contenedores de Docker con herramientas como Kubernetes, es otro motivo para la popularidad de los contenedores. Esto permite crear varias versiones del contenedor de la aplicación en momentos diferentes. En lugar de tener que deshacer todo el sistema para las actualizaciones o el mantenimiento, cada contenedor y sus microservicios específicos se pueden reemplazar sobre la marcha. Puedes preparar un nuevo contenedor con todas las actualizaciones, configurar el contenedor para producción y simplemente apuntar al nuevo contenedor una vez que esté listo. También puedes archivar versiones diferentes de la aplicación mediante contenedores y mantenerlas en ejecución como reserva de seguridad si es necesario.

Para más información, consulte introducción a los contenedores de Docker en Microsoft Learn.

Requisitos previos

Nota

WSL puede ejecutar distribuciones en el modo WSL versión 1 o WSL 2. Para comprobarlo, abra PowerShell y escriba: wsl -l -v . Para asegurarse de que la distribución está establecida para usar WSL 2, escriba: wsl --set-version <distro> 2 . Reemplace <distro> por el nombre de la distribución (por ejemplo, Ubuntu 18.04).

En la versión 1 de WSL, debido a las diferencias fundamentales entre Windows y Linux, el motor de Docker no se podía ejecutar directamente dentro de WSL, por lo que el equipo de Docker desarrolló una solución alternativa mediante máquinas virtuales de Hyper-V y LinuxKit. Sin embargo, dado que WSL 2 se ejecuta ahora en un kernel de Linux con capacidad de llamada completa del sistema, Docker puede ejecutarse por completo en WSL 2. Esto significa que los contenedores de Linux se pueden ejecutar de forma nativa sin emulación, lo que da lugar a un mejor rendimiento e interoperabilidad entre las herramientas de Windows y Linux.

Instalación de Docker Desktop

Con el back-end de WSL 2 compatible con Docker Desktop para Windows, puede trabajar en un entorno de desarrollo basado en Linux y compilar contenedores basados en Linux, mientras usa Visual Studio Code para editar y depurar código y ejecutar el contenedor en el explorador Microsoft Edge en Windows.

Para instalar Docker (después de instalar WSL 2):

  1. Descargue Docker Desktop y siga las instrucciones de instalación.

  2. Una vez instalado, inicie Docker Desktop desde windows menú Inicio y, a continuación, seleccione el icono de Docker en el menú de iconos ocultos de la barra de tareas. Haga clic con el botón derecho en el icono para mostrar el menú comandos de Docker y seleccione "Configuración". Icono del panel de Docker Desktop

  3. Asegúrese de que la opción "Use the WSL 2 based engine" (Usar el motor basado en WSL 2) esté activada en Configuración > general. Configuración general de Docker Desktop

  4. Seleccione entre las distribuciones de WSL 2 instaladas en las que desea habilitar la integración de Docker; para lo que debe ir a: Configuración > Recursos > Integración de WSL. Configuración de recursos de Escritorio de Docker

  5. Para confirmar que Docker se ha instalado, abra una distribución de WSL (por ejemplo, Ubuntu) y muestre la versión y el número de compilación especificando: docker --version

  6. Compruebe que la instalación funciona correctamente mediante la ejecución de una imagen de Docker integrada simple mediante: docker run hello-world

Sugerencia

Estos son algunos comandos útiles de Docker que debe conocer:

  • Enumerar los comandos disponibles en la CLI de Docker, para lo que debes escribir: docker
  • Enumerar información de un comando específico con: docker <COMMAND> --help
  • Enumerar las imágenes de Docker en el equipo (que es simplemente la imagen de Hola mundo en este momento), con: docker image ls --all
  • Enumere los contenedores de la máquina con: docker container ls --all o (sin la marca -a mostrar todo, solo se mostrarán los contenedores docker ps -a en ejecución).
  • Muestra información de todo el sistema sobre la instalación de Docker, incluidas las estadísticas y los recursos (cpu & memoria) disponibles en el contexto de WSL 2, con: docker info

Desarrollo en contenedores remotos mediante VS Code

Para empezar a desarrollar aplicaciones con Docker con WSL 2, se recomienda usar VS Code, junto con la extensión Remote-WSL y docker.

  • Instale la VS Code remote-WSL. Esta extensión le permite abrir el proyecto de Linux que se ejecuta en WSL en VS Code (no es necesario preocuparse por problemas de ruta de acceso, compatibilidad binaria u otros desafíos entre sistemas operativos).

  • Instale la extensión de Remote-Containers VS Code. Esta extensión le permite abrir la carpeta o el repositorio del proyecto dentro de un contenedor, aprovechando el conjunto de características completo de Visual Studio Code para realizar el trabajo de desarrollo dentro del contenedor.

  • Instale la VS Code de Docker. Esta extensión agrega la funcionalidad para compilar, administrar e implementar aplicaciones en contenedores desde dentro VS Code. (Necesita la extensión Remote-Container para usar realmente el contenedor como entorno de desarrollo).

Vamos a usar Docker para crear un contenedor de desarrollo para un proyecto de aplicación existente.

  1. En este ejemplo, usaré el código fuente de mi tutorial de Hola mundo para Django en la documentación de configuración del entorno de desarrollo de Python. Puede omitir este paso si prefiere usar su propio código fuente del proyecto. Para descargar mi HelloWorld-Django web de GitHub, abra un terminal WSL (por ejemplo, Ubuntu) y escriba: git clone https://github.com/mattwojo/helloworld-django.git

    Nota

    Almacene siempre el código en el mismo sistema de archivos en el que usa herramientas. Esto dará como resultado un rendimiento más rápido del acceso a archivos. En este ejemplo, se usa una distribución de Linux (Ubuntu) y se quieren almacenar los archivos de proyecto en el sistema de archivos WSL \\wsl\ . Almacenar archivos de proyecto en el sistema de archivos de Windows ralentizaría considerablemente las cosas al usar herramientas de Linux en WSL para acceder a esos archivos.

  2. Desde el terminal de WSL, cambie los directorios a la carpeta de código fuente de este proyecto:

    cd helloworld-django
    
  3. Abra el proyecto en VS Code en ejecución en el servidor de extensión Remote-WSL local especificando:

    code .
    

    Confirme que está conectado a la distribución de Linux de WSL; para ello, compruebe el indicador remoto verde en la esquina inferior izquierda de la instancia VS Code cliente.

    VS Code WSL Remote Indicator

  4. En la paleta VS Code comando (Ctrl + Mayús + P), escriba: Remote-Containers: Open Folder in Container... Si este comando no se muestra a medida que empieza a escribirlo, asegúrese de que ha instalado la extensión contenedor remoto vinculada anteriormente.

    VS Code comando Contenedor remoto

  5. Seleccione la carpeta del proyecto que desea crear en contenedores. En mi caso, esto es \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code carpeta Contenedor remoto

  6. Aparecerá una lista de definiciones de contenedor, ya que aún no hay ninguna configuración de DevContainer en la carpeta del proyecto (repositorio). La lista de definiciones de configuración de contenedor que aparece se filtra en función del tipo de proyecto. Para mi proyecto de Django, seleccionaré Python 3.

    VS Code de configuración de contenedor remoto

  7. Se abrirá una nueva instancia de VS Code, comenzará a compilar la nueva imagen y, una vez completada la compilación, iniciará el contenedor. Verá que ha aparecido una nueva carpeta con información de configuración .devcontainer de contenedor dentro de un archivo y Dockerfile devcontainer.json .

    VS Code carpeta .devcontainer

  8. Para confirmar que el proyecto sigue conectado a WSL y dentro de un contenedor, abra el terminal VS Code integrado (Ctrl + Mayús + ~). Para comprobar el sistema operativo, escriba: uname y la versión de Python con: python3 --version . Puede ver que el elemento Uname ha vuelto como "Linux", por lo que sigue conectado al motor de WSL 2 y el número de versión de Python se basará en la configuración del contenedor que puede diferir de la versión de Python instalada en la distribución de WSL.

  9. Para ejecutar y depurar la aplicación dentro del contenedor mediante Visual Studio Code, abra primero el menú Ejecutar (Ctrl+Mayús+D o seleccione la pestaña en la barra de menús del extremo izquierdo). A continuación, seleccione Ejecutar y depurar para seleccionar una configuración de depuración y elija la configuración que mejor se adapte al proyecto (en mi ejemplo, será "Django"). Esto creará un archivo en la carpeta del proyecto launch.json con instrucciones sobre cómo ejecutar la .vscode aplicación.

    VS Code la configuración de depuración

  10. Desde dentro VS Code, seleccione > Ejecutar iniciar depuración (o simplemente presione la tecla F5). Se abrirá un terminal dentro de VS Code y verá un resultado que dice algo parecido a: "Iniciar el servidor de desarrollo en Salir del servidor http://127.0.0.1:8000/ con CONTROL-C". Mantenga presionada la tecla Control y seleccione la dirección que se muestra para abrir la aplicación en el explorador web predeterminado y ver el proyecto en ejecución dentro de su contenedor.

    VS Code ejecutar un contenedor de Docker

Ahora ha configurado correctamente un contenedor de desarrollo remoto mediante Docker Desktop, con tecnología del back-end WSL 2, que puede codificar, compilar, ejecutar, implementar o depurar mediante VS Code.

Solución de problemas

Contexto de Docker de WSL en desuso

Si usaba una versión preliminar técnica temprana de Docker para WSL, es posible que tenga un contexto de Docker denominado "wsl" que ahora está en desuso y ya no se usa. Puede comprobar con el comando : docker context ls . Puede quitar este contexto "wsl" para evitar errores con el comando : ya que quiere usar el contexto predeterminado para docker context rm wsl Windows y WSL2.

Entre los posibles errores que puede encontrar con este contexto wsl en desuso se incluyen: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. o error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.

Para obtener más información sobre este problema, consulte Configuración de Docker en Windows System for Linux (WSL2) en Windows 10.

Problemas al buscar la carpeta de almacenamiento de imágenes de Docker

Docker crea dos carpetas de distro para almacenar datos:

  • \wsl$\docker-desktop
  • \wsl$\docker-desktop-data

Para encontrar estas carpetas, abra la distribución de Linux de WSL y escriba: para ver explorer.exe . la carpeta en Windows Explorador de archivos. Escriba: \\wsl\<distro name>\mnt\wsl <distro name> reemplazando por el nombre de la distribución (es decir, Ubuntu-20.04) para ver estas carpetas.

Para más información sobre cómo buscar ubicaciones de almacenamiento de Docker en WSL, consulte este problema en el repositorio de WSL o en esta publicación de StackOverlow.

Para obtener más ayuda con la solución de problemas generales en WSL, consulte el documento Solución de problemas.

Recursos adicionales