¿Eres nuevo en las imágenes de Docker para Windows? ¿Estás trabajando actualmente en un entorno Windows y tienes curiosidad por aprender sobre la construcción de imágenes de contenedor con Docker? Has llegado al lugar correcto. ¡La mejor manera de aprender algo nuevo es haciéndolo con los comandos docker build
y docker build "etiqueta"
!
En este artículo, aprenderás cómo crear tu primera imagen de Docker para Windows desde un Dockerfile usando el comando docker build
.
¡Comencemos!
Entendiendo las imágenes de contenedor de Docker
Durante años, la única forma de probar o desarrollar en múltiples sistemas operativos (SO) era tener varias máquinas físicas o virtuales dedicadas con la imagen de la versión del SO que eligieras. Esta metodología requería más hardware y esfuerzo para aprovisionar nuevas máquinas para cada especificación de software y SO.
Sin embargo, en la actualidad el uso de imágenes de contenedor de Docker ha crecido en parte debido a la popularidad de la arquitectura de microservicios. En respuesta al aumento en la popularidad de Docker, Microsoft ha comenzado a apoyar públicamente las imágenes de Docker para varios productos emblemáticos en su página de Docker Hub. ¡Incluso han agregado soporte nativo para imágenes para Windows como una característica del producto en Windows 10 y Windows Server 2016!
A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable. As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Entendiendo la construcción de Docker e imágenes
El comando docker build
se puede aprovechar para automatizar la creación de imágenes de contenedores, adoptar una práctica de DevOps de contenedor como código e integrar la contenerización en el ciclo de desarrollo de tus proyectos. Los Dockerfiles son simplemente archivos de texto que contienen instrucciones de construcción utilizadas por Docker para crear una nueva imagen de contenedor que se basa en una imagen existente.
El usuario puede especificar la imagen base y la lista de comandos que se ejecutarán cuando se implemente una imagen de contenedor o se inicie por primera vez. En este artículo, aprenderás cómo crear una imagen de Docker basada en Windows a partir de un Dockerfile usando un contenedor de Windows.
Este proceso tiene varios beneficios sobre el uso de una imagen de contenedor precompilada:
- Puedes reconstruir una imagen de contenedor para varias versiones de Windows, lo cual es genial para probar cambios de código en varias plataformas.
- Tendrás más control sobre lo que se instala en el contenedor. Esto te permitirá mantener el tamaño del contenedor al mínimo.
- Por razones de seguridad, es posible que desees verificar el contenedor en busca de vulnerabilidades y aplicar endurecimiento de seguridad a la imagen base.
Prerrequisitos/Requisitos
Este artículo es una guía sobre cómo aprender a construir una imagen de Docker usando un Dockerfile. Si deseas seguirlo, asegúrate de tener los siguientes requisitos previos en su lugar.
- Docker for Windows instalado. Voy a utilizar la versión 2.1.0.4 de la Edición Comunitaria (CE) de Docker en mi entorno.
- El acceso a Internet es necesario para descargar las imágenes de Docker
- Sistema operativo Windows 10+ (se está utilizando la versión 1709 para este tutorial)
- Habilitada la virtualización anidada
- 5 GB de espacio libre en el disco en su máquina local
- PowerShell 5.0+
- Este tutorial utiliza el Entorno de Desarrollo Visual Studio Code. Sin embargo, siéntase libre de usar el IDE que prefiera.
Nota: Asegúrese de habilitar la Configuración de Contenedores de Windows al instalar Docker.
Preparándose
Primero, necesitará una carpeta para almacenar todas las imágenes y contenedores de Docker que construirá a partir de esas imágenes. Para hacerlo, abra una terminal de PowerShell o cmd (se utilizará PowerShell en todo este artículo) y cree un nuevo directorio llamado C:\Containers.
Una vez creada la carpeta, cambie a ese directorio. Esto establece el directorio de trabajo actual de la consola en C:\Containers para que todas las descargas se guarden en este directorio por defecto.
En este artículo, obtendrás una ventaja inicial. La mayoría de los archivos necesarios para trabajar en este proyecto ya están disponibles. Una vez que se haya creado la carpeta, realiza un Git pull para copiar los archivos necesarios para este artículo desde el repositorio de Github de TechSnips a la carpeta C:\Containers. Una vez completado, verifica que la carpeta C:\Containers se vea como se muestra a continuación.

Descargando la imagen de Docker de IIS para Windows
La primera tarea a realizar es descargar una “plantilla” o imagen base. Más adelante construirás tu propia imagen de Docker, pero primero necesitas una imagen para comenzar. Descargarás las últimas imágenes de IIS y Windows Server Core necesarias para este tutorial. La lista actualizada de imágenes se puede encontrar en la página de la imagen del centro de Docker de Microsoft oficial.
Revisando las imágenes base actuales de Docker
Antes de descargar la imagen del repositorio de imágenes, revisemos las imágenes base de Docker que tienes actualmente en tu sistema local. Para hacerlo, ejecuta una consola de PowerShell como administrador y luego escribe docker images
. Este comando devuelve todas las imágenes en tu sistema local.
Como puedes ver a continuación, las imágenes disponibles están inicialmente vacías.

Descargando la imagen base
Ahora es el momento de descargar la imagen base de IIS desde Docker Hub. Para hacerlo, ejecuta docker pull
como se muestra a continuación. Este proceso puede llevar algún tiempo dependiendo de la velocidad de tu conexión a Internet.

Ahora ejecuta docker images
y deberías tener la última imagen de Microsoft Windows Core IIS disponible para este tutorial.

Inspeccionando el Dockerfile
En un paso anterior, descargaste un Dockerfile existente para este tutorial. Ahora echemos un vistazo a exactamente en qué consiste.
Abre el archivo C:\Containers\Container1\Dockerfile en tu editor favorito. El contenido de este Dockerfile se utiliza para definir cómo se configurará la imagen del contenedor en el momento de la construcción.
Puedes ver una explicación de lo que hace cada parte de este archivo en los comentarios en línea.
Construyendo una Nueva Imagen de Docker
Ya tienes el Dockerfile listo y has descargado una imagen base de IIS. Ahora es el momento de construir tu nueva imagen de Docker utilizando el Dockerfile.
Para construir una nueva imagen, utiliza el comando docker build "etiqueta"
. Este comando crea la imagen. En este artículo, puedes observar que también estás utilizando la opción -t **
, que reemplaza la parte de “etiqueta”. Esta opción te permite asignarle a tu nueva imagen un nombre amigable y también hacer referencia al Dockerfile especificando la ruta de la carpeta donde se encuentra.
A continuación, puedes ver un ejemplo de cómo asegurarte de que la consola esté en el directorio C:\Containers y luego construir una nueva imagen a partir del Dockerfile en el directorio C:\Containers\Container1.
Una vez iniciado, puedes seguir el progreso del comando mientras recorre cada instrucción en el archivo docker línea por línea:

Una vez hecho, ¡deberías tener ahora una nueva imagen de Docker!
Ahora ejecuta el comando docker images
para ver las imágenes disponibles. Puedes ver a continuación un ejemplo de la imagen container1 creada.

Nota: El comando
docker build —help
es un parámetro útil para mostrar información detallada sobre el comando docker que se está ejecutando.
Ejecutando el Contenedor de Docker
En este punto, deberías tener una nueva imagen creada. Es hora de poner en marcha un contenedor utilizando esa imagen. Para iniciar un nuevo contenedor, utiliza el comando docker run
.
El comando docker run
iniciará un nuevo contenedor Docker basado en la imagen container1 que creaste anteriormente. Puedes ver un ejemplo de esto a continuación.
Observa que se utiliza el parámetro -d
. Esto indica al tiempo de ejecución de Docker que inicie la imagen en modo desvinculado y luego salga cuando el proceso raíz utilizado para ejecutar el contenedor finalice.
Cuando docker run
finaliza, devuelve el ID del contenedor creado. El ejemplo a continuación captura este ID en una variable $containerID
para que podamos hacer referencia a él fácilmente más tarde.

Una vez que se inicia el contenedor, ahora ejecuta el comando docker ps
. Este comando te permite ver qué contenedores se están ejecutando actualmente utilizando cada imagen. Observa a continuación que la imagen en ejecución automáticamente genera un apodo (busy_habit en este caso). Este apodo a veces se utiliza en lugar del ID del contenedor para gestionar el contenedor.

Ejecutar código dentro de un contenedor Docker
A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec
command.
En este ejemplo, ejecuta docker exec
para ver la salida de PowerShell para el comando Get-ChildItem
en el contenedor utilizando la sintaxis de comando a continuación. Esto asegurará que las instrucciones en el Dockerfile para eliminar los archivos IIS predeterminados hayan tenido éxito.
Puedes ver a continuación que el único archivo que existe es index.html, lo que significa que los archivos predeterminados fueron eliminados.

Ahora ejecuta el comando ipconfig
en el contenedor para obtener la dirección IP local de la imagen del contenedor para que puedas intentar conectarte al sitio web de IIS.
Puedes ver a continuación que se ejecutó ipconfig
en el contenedor como si se ejecutara en tu computadora local y ha devuelto toda la información de IP.

ipconfig
in a Docker containerInspeccionando el Sitio Web de IIS
¡Ahora es el momento de revelar los frutos de tu trabajo! Es hora de ver si el servidor IIS que se está ejecutando en el contenedor Docker está sirviendo correctamente la página index.html.
Abre un navegador y pega la Dirección IP4 encontrada a través de ipconfig
en la barra de direcciones. Si todo está bien, deberías ver un mensaje de ¡Hola Mundo! como se muestra a continuación.

Revisando el Historial de Docker
Un comando útil para usar al trabajar con contenedores de Docker es el comando docker history
. Aunque no esté necesariamente relacionado con la creación de una imagen o contenedor en sí mismo, el comando docker history
es un comando útil que te permite revisar los cambios realizados en la imagen del contenedor.
Puedes ver a continuación que docker history
devuelve toda la actividad de Dockerfile y PowerShell realizada en el contenedor1 con el que has estado trabajando.

docker history
Limpiando las Imágenes de Docker en Ejecución
Los pasos a continuación se utilizan para limpiar todos los contenedores detenidos que se están ejecutando en tu máquina. Esto liberará espacio en disco y recursos del sistema.
Ejecuta el comando docker ps
para ver una lista de los contenedores que se están ejecutando en tu sistema:

Ahora detén los contenedores en ejecución usando el comando docker stop
:

Finalmente, puedes eliminar permanentemente los contenedores detenidos usando el comando docker system prune
.
