¿Docker en Windows? ¡Comienza a aprender ahora o…!

Si eres nuevo en el mundo de los contenedores y Docker y trabajas principalmente en Windows, te espera una sorpresa. En este artículo, aprenderás cómo configurar Docker en Windows 10 utilizando Docker Desktop for Windows o simplemente conocido como Docker Desktop en este artículo.

Docker Desktop incluye el Motor Docker y un cliente de gestión empaquetados juntos para facilitar su uso en Windows 10. En este artículo, instalarás Docker Desktop, desplegarás tu primer contenedor y compartirás datos entre tu host y tus contenedores.

Requisitos previos para Docker en Windows

Este es un artículo paso a paso que demuestra varios pasos en Docker Desktop para Docker en Windows. Para seguirlo, asegúrate de tener algunos requisitos específicos en su lugar primero.

  • Una conexión a Internet para descargar más de 800 MB de datos
  • Windows 10 de 64 bits en las ediciones Pro, Enterprise o Education con la versión 1703 o más reciente. Esto es necesario para ejecutar Hyper-V en Windows 10.
  • A CPU with SLAT (nested paging) compatibility. All AMD/Intel processors since approximately 2008 are SLAT compatible
  • Al menos 4 GB de RAM
  • La virtualización de hardware en la BIOS, a veces etiquetada como Tecnología de Virtualización o VTx. Esto debe estar habilitado y mostrarse como Habilitado en la pestaña de rendimiento del Administrador de tareas, como se muestra a continuación.
Enabled BIOS virtualization shown in Windows Task Manager

Descarga e instalación de Docker Desktop

Primero, necesitas descargar e instalar Docker Desktop para utilizar Docker en Windows. Docker Desktop está disponible en dos versiones: una versión estable y una versión de prueba.

La versión estable se publica trimestralmente y garantiza una aplicación completamente probada. En este artículo, utilizarás la versión estable.

Advertencia: Al instalar Docker Desktop, te pedirá que instales el hipervisor Hyper-V si aún no está instalado. Al hacerlo, el hipervisor Hyper-V impide que se ejecuten máquinas virtuales de invitado con hipervisores en modo de usuario como VirtualBox, VMWare, etc. El soporte de Hyper-V para VirtualBox y VMWare es limitado pero está en desarrollo.

También tienes la opción de descargar Docker Desktop directamente desde Docker.com o a través del administrador de paquetes de Windows, Chocolatey. Veamos brevemente cada método.

Desde Docker.com

Para descargar Docker Desktop directamente desde docker.com, puedes ir a la página del producto, registrarte para obtener una cuenta y descargarlo desde allí. Esto es preferible si tienes la intención de utilizar Docker en producción registrando una cuenta.

Sin embargo, si solo estás probando Docker por primera vez, también puedes descargarlo directamente, lo cual es mucho más fácil.

Una vez que se haya descargado el archivo EXE, ejecuta el ejecutable y sigue los pasos aceptando todos los valores predeterminados.

Cuando se te pregunte si planeas Usar contenedores de Windows en lugar de contenedores de Linux, como se muestra a continuación, no habilites la casilla de verificación. Estarás utilizando contenedores de Linux en este artículo.

Installing Docker Desktop

Una vez completada la instalación, reinicia tu computadora.

Seleccionar la opción de usar contenedores de Windows o contenedores de Linux indica a Docker que adjunte imágenes a un kernel de Windows o a un kernel de Linux. Puedes cambiar esta configuración en cualquier momento después de la instalación haciendo clic con el botón derecho en el icono de Docker en la bandeja del sistema y seleccionando Cambiar a contenedores de Windows, como se muestra a continuación.

Switching to Windows containers

Usando Chocolatey

La otra opción para descargar e instalar Docker Desktop es mediante Chocolatey. Chocolatey automatiza muchas de las tareas de descarga e instalación por ti. Para hacerlo, abre una consola de línea de comandos (ya sea cmd o PowerShell) como administrador para descargar e instalar el programa de una vez ejecutando el siguiente comando.

choco install docker-desktop

Una vez completado, reinicia Windows 10.

Si deseas probar la versión de prueba en algún momento, puedes descargar e instalarla ejecutando choco install docker-desktop --pre.

Validación de la Instalación de Docker Desktop

Una vez instalado, Docker Desktop se ejecuta automáticamente como un servicio proporcionando Docker en Windows. Se muestra en la bandeja del sistema cuando inicias sesión en Windows después de reiniciar. Pero, ¿cómo sabes realmente que está funcionando?

Para validar que Docker Desktop está funcionando correctamente, abre una consola de línea de comandos y ejecuta el comando docker. Si la instalación fue exitosa, verás una referencia de comando de Docker.

Finalmente, haz que Docker descargue y ejecute una imagen de contenedor de ejemplo llamada hello-world ejecutando el comando docker run hello-world. Si todo está bien, verás una salida como la siguiente.

A successful test image run via Docker Desktop

Ejecución de Comandos en Contenedores Docker

Docker Desktop está instalado y has verificado que todo está bien? ¿Y ahora qué? Para empezar con Docker en Windows, una tarea común que puedes realizar en un contenedor de Docker es ejecutar comandos. A través del comando docker run, puedes enviar comandos a través del host (tu PC con Windows 10) directamente a un contenedor en ejecución.

Para ejecutar comandos en un contenedor con docker run, primero especificarás un nombre de imagen seguido del comando. Para comenzar, dile a Docker que ejecute el comando hostname dentro de un contenedor llamado alpine, como se ve a continuación.

> docker run alpine hostname
b74ff46601af

Dado que no tienes la imagen de Docker alpine en tu computadora en este momento, Docker en Windows descargará la pequeña imagen desde Docker Hub, iniciará un contenedor a partir de esa imagen y enviará el comando directamente al contenedor, cerrándolo todo de una vez.

Si deseas que el contenedor siga en ejecución, también puedes usar el parámetro -it. Este parámetro le indica a Docker que mantenga el contenedor en “modo interactivo”, dejándolo en ejecución en primer plano después de ejecutar el comando. Verás que luego se te presenta un indicador de terminal listo para usar.

> docker run -it alpine sh
/ #

Cuando hayas terminado en la terminal, escribe exit para volver a Windows 10.

Acceder a archivos desde el host de Docker en contenedores.

Otra tarea común es acceder a los archivos del host desde los contenedores. Para acceder a los archivos del host en los contenedores, Docker en Windows te permite vincular una ruta de carpeta desde tu escritorio para compartir esa carpeta con tu contenedor. Este proceso se llama vinculación.

Para crear una vinculación, haz una carpeta en una unidad local. Para este ejemplo, usaré E:\ y la llamaré input. Luego se creará un nuevo documento de texto llamado file.txt en la carpeta. Siéntete libre de usar la ruta y el archivo que desees.

Una vez que tengas la carpeta que deseas compartir entre el host y el contenedor, Docker necesita montar la carpeta usando el parámetro --mount. El parámetro --mount requiere tres argumentos: un tipo de montaje, una ruta de directorio de origen del host y una ruta de directorio de destino. La ruta de destino será un enlace simbólico dentro del contenedor.

A continuación, verás un ejemplo de montaje de toda la E:\ dentro del host de Windows 10 para que aparezca como el directorio /home/TEST dentro del contenedor de Linux.

> docker run --mount type=bind,source="E:/",target=/home/TEST -it alpine

Cuando intentes montar una carpeta del host, Docker Desktop te pedirá permiso para compartir esta unidad con los contenedores Docker como se muestra a continuación.

Sharing a Docker drive

Si creaste el archivo file.txt en la carpeta de Windows 10 como se describió anteriormente, ejecuta cat /home/TEST/input/file.txt. Verás que se muestran los contenidos.

Ahora, elimina la carpeta input que acabas de crear y vuelve a ejecutar el comando cat ... de nuevo. Observa que la terminal ahora informa que el archivo ya no existe.

Working with files in Docker containers

Mapeo de Puertos de Red

Otro concepto importante de conocer es cómo Docker en Windows maneja la red. Para una breve introducción, veamos qué se necesita para acceder a un servicio web que se ejecuta en un contenedor desde el host local.

Primero, inicia una imagen de demostración que ejecutará una página web de ejemplo. Descarga y ejecuta la imagen de Docker llamada dockersamples/static-site. Utilizarás docker container run para hacerlo.

El siguiente comando realiza cuatro acciones a la vez:

  • Descarga una imagen de Docker desde Docker Hub llamada static-site en el “directorio” docker-samples
  • Inicia una instancia de contenedor desde la imagen static-site
  • Desconecta inmediatamente el contenedor del primer plano de la terminal (--detach)
  • Hace que los puertos de red del contenedor en ejecución sean accesibles para el host de Windows 10 (--publish-all)
docker container run --detach --publish-all dockersamples/static-site
## Sintaxis alternativa/corta que hace lo mismo:
## docker container run -d -P dockersamples/static-site
## docker run -d -P dockersamples/static-site

Una vez ejecutado, Docker devolverá el ID del contenedor que se inició, como se muestra a continuación.

Docker container ID returned from running a container

Publicación de Puertos de Red

Desde que se utiliza el parámetro --publish-all, los puertos locales del host ahora se asignan a la pila de red del contenedor. Puedes usar el subcomando docker ps para listar todos los contenedores en ejecución, incluidos los puertos asignados a cada uno de ellos. En el ejemplo a continuación, un contenedor está en ejecución mapeando el puerto del host 32777 al puerto del contenedor 80 y el puerto del host 32776 al puerto del contenedor 443.

Showing port mapping of Docker container

Docker en Windows asigna puertos aleatorios a los contenedores al utilizar el parámetro --publish-all a menos que se definan explícitamente.

Ahora abre un navegador web y navega a http://localhost:32777 o al puerto que Docker haya asignado para mapear al puerto 80 según lo indicado por docker ps. Si todo va bien, deberías ver la página web que se muestra a continuación.

Resulting webpage running in the Docker container

Cambiando los Puertos Publicados

Ahora tienes un contenedor Docker en ejecución en Docker en Windows que sirve una página web simple. ¡Felicidades! Pero ahora necesitas especificar una vinculación de puerto específica sin depender de la selección de puerto aleatorio con --publish-all. No hay problema. Usa el parámetro -p.

Primero, detén el contenedor en ejecución especificando una cadena única de su ID de contenedor. Puedes encontrar este ID de contenedor ejecutando docker ps. Una vez que conozcas el ID del contenedor, detén el contenedor y comienza uno nuevo mientras designas a Docker asignar un puerto específico para publicar.

El sintaxis para especificar un puerto es <puerto externo>:<puerto del contenedor>. Para cada puerto que desees publicar, utiliza el interruptor --publish o -p con los números de puerto externo y del contenedor como se muestra a continuación.

> docker stop f766
> docker run --detach -p 1337:80 dockersamples/static-site

Cuando especificas un ID de contenedor, solo necesitas escribir lo suficiente del ID como para que sea único. Si solo estás ejecutando un único contenedor y su ID es f766f4ac8d66bf7, puedes identificar el contenedor usando cualquier cantidad de caracteres, incluido solo f. El requisito es que lo que escribas permita identificar de manera única un único contenedor.

Ahora ve a tu navegador web y navega a localhost:1337. Recuerda, no estás cambiando la imagen y siempre está escuchando en el puerto 80; estás cambiando la regla de traducción de puerto en la configuración de Docker que te permite conectarte al contenedor.

Webpage being served up on port 1337

Deteniendo todos los contenedores

Usando docker stop, puedes detener un contenedor, pero ¿cómo detienes varios contenedores a la vez? Una forma de hacerlo es proporcionando múltiples IDs de contenedor separados por espacios. A continuación, puedes ver un ejemplo de cómo detener tres contenedores con los IDs fd50b0a446e7, 36ee57c3b7da y 7c45664906ff.

> docker stop fd50 36ee 7c45

Si estás gestionando contenedores Docker en PowerShell, también puedes utilizar un atajo para detener todos los contenedores. Alimenta una lista de IDs de contenedores a través de docker ps -q al parámetro stop mediante la expansión de comandos de PowerShell docker stop (docker ps -q).

Confirma que todos los contenedores están detenidos al no ver ningún contenedor listado cuando escribes docker ps.

Limpieza

Has descargado algunas imágenes de contenedores y ejecutado algunos contenedores que ahora están detenidos. Aunque estén detenidos, su almacenamiento asignado no ha desaparecido del disco local del host. Debes eliminar los contenedores para liberar ese espacio y evitar desordenar tu espacio de trabajo.

Para eliminar un solo contenedor, utiliza el parámetro de eliminación de contenedor rm como se muestra a continuación.

> docker container rm <container ID>

O, para eliminar todos los contenedores detenidos, utiliza el parámetro prune como se muestra a continuación.

> docker container prune

Source:
https://adamtheautomator.com/docker-windows/