GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo crear una imagen de ventana de Docker con la etiqueta de compilación de Docker

¿Eres nuevo en Docker Windows Images? ¿Está trabajando actualmente en una tienda de Windows y tiene curiosidad por conocer las compilaciones de Docker para imágenes de contenedores? Has venido al lugar correcto. La mejor manera de aprender algo nuevo es hacerlo con docker build y docker build "tag" ¡comandos!

En este artículo, aprenderá a crear su primera imagen de Docker de Windows a partir de un Dockerfile utilizando la docker build. comando.

¡Empecemos!

Comprensión de las imágenes del contenedor Docker

Durante años, la única forma de probar o realizar el desarrollo en varios sistemas operativos (SO) era tener varias máquinas virtuales o físicas dedicadas con la versión del sistema operativo de su elección. Esta metodología requería más hardware y gastos generales para aprovisionar nuevas máquinas para cada software y especificación de sistema operativo.

Sin embargo, en estos días el uso de imágenes de contenedores Docker ha crecido en parte debido a la popularidad de la arquitectura de microservicios. En respuesta al aumento de la popularidad de Docker, Microsoft comenzó a respaldar 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!

Una imagen de Docker se ejecuta en un contenedor mediante el motor de Docker. Las imágenes de Docker tienen muchos beneficios, como la portabilidad (aplicable a múltiples entornos y plataformas), personalizables y altamente escalables. Como puede ver a continuación, a diferencia de las máquinas virtuales tradicionales, el motor de Docker se ejecuta en una capa entre el kernel del sistema operativo del host y los servicios de aplicaciones aisladas que se almacenan en contenedores.

Comprensión de la compilación e imágenes de Docker

La docker build El comando 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 creación de contenedores en el ciclo de desarrollo de sus proyectos. Los Dockerfiles son simplemente archivos de texto que contienen instrucciones de compilació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 o se inicie una imagen de contenedor por primera vez. En este artículo, aprenderá a crear una imagen acoplable basada en Windows desde Dockerfile utilizando un contenedor de Windows.

Este proceso tiene varios beneficios sobre el uso de una imagen de contenedor preconstruida:

  1. Puede reconstruir una imagen de contenedor para varias versiones de Windows, lo cual es excelente para probar cambios de código en varias plataformas.
  2. Tendrá más control sobre lo que está instalado en el contenedor. Esto le permitirá mantener el tamaño de su contenedor al mínimo.
  3. Por razones de seguridad, es posible que desee verificar el contenedor en busca de vulnerabilidades y aplicar un refuerzo de seguridad a la imagen base

Requisitos previos/Requisitos

Este artículo es un tutorial sobre cómo aprender a crear una imagen de Docker mediante un Dockerfile. Si desea continuar, asegúrese de cumplir con los siguientes requisitos previos.

  • Docker para Windows instalado. Usaré Docker Community Edition (CE) versión 2.1.0.4 en mi entorno.
  • Se necesita acceso a Internet para descargar las imágenes de Docker
  • Sistema operativo Windows 10+ (la versión 1709 se usa para este tutorial)
  • Virtualización anidada habilitada
  • 5 GB de espacio libre en disco en su máquina local
  • PowerShell 5.0+
  • Este tutorial utiliza el IDE de Visual Studio Code. Sin embargo, siéntete libre de usar el IDE que prefieras.

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 creará a partir de esas imágenes. Para hacerlo, abra un terminal PowerShell o cmd (usará PowerShell a lo largo de este artículo) y cree un nuevo directorio llamado C:\Containers.

Una vez creada la carpeta, cambie a ese directorio. Esto coloca el directorio de trabajo actual de la consola en C:\Containers para establecer por defecto todas las descargas en este directorio.

PS51> mkdir C:\Containers
PS51> cd C:\Containers

En este artículo, obtendrá una ventaja inicial. La mayoría de los archivos para trabajar en este proyecto ya están disponibles. Una vez creada la carpeta, realice una extracción de Git para copiar los archivos necesarios para este artículo desde el repositorio de TechSnips Github a C:\Containers carpeta. Una vez completado, asegúrese de que C:\Containers la carpeta se ve a continuación.

Descarga de la imagen de IIS Windows Docker

La primera tarea a realizar es descargar una “plantilla” o imagen base. Creará su propia imagen de Docker más adelante, pero primero necesita una imagen para comenzar. Descargará las últimas imágenes de IIS y Windows Server Core que se requieren para este tutorial. La lista actualizada de imágenes se puede encontrar en la página oficial de imágenes del concentrador de Microsoft Docker.

Revisión de las imágenes base de Docker actuales

Antes de descargar la imagen del repositorio de imágenes, primero revisemos las imágenes base actuales de Docker que tiene actualmente en su sistema local. Para hacerlo, ejecute una consola de PowerShell como administrador y luego escriba docker images . Este comando devuelve todas las imágenes en su sistema local.

Como puede ver a continuación, las imágenes disponibles inicialmente están vacías.

PS51> docker images

Descarga de 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 abajo. Este proceso puede tardar un tiempo en completarse según la velocidad de Internet.

PS51> docker pull mcr.microsoft.com/windows/servercore/iis

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

PS51> docker images

Inspeccionando el Dockerfile

En un paso anterior, descargó un Dockerfile existente para este tutorial. Ahora echemos un vistazo a lo que eso implica exactamente.

Abra el C:\Containers\Container1\Dockerfile archivo en su editor favorito. El contenido de este Dockerfile se usa para definir cómo se configurará la imagen del contenedor en el momento de la compilación.

Puede ver una explicación de lo que hace cada parte de este archivo en los comentarios en línea.

# Specifies that the latest microsoft/iis image will be used as the base image
# Used to specify which base container image will be used by the build process.

# Notice that the naming convention is "**owner/application name : tag name**"
# (shown as microsoft/iis:latest); so in our case the owner of the image is
# Microsoft and the application is IIS with the "latest" tag name being used
# to specify that you will pull the most recent image version available.
FROM microsoft/iis:latest

# Copies contents of the wwwroot folder to the inetpub/wwwroot folder in the new container image
# Used to specify that you want to copy the WWWroot folder to the IIS inetpub WWWroot
# folder in the container. You don't have to specify the full path to your local
# files because docker already has the logic built-in to reference files and folders
# relative to the docker file location on your system. Also, make note that that
# docker will only recognize forward slashes for file paths - since this is a
# Windows based container instead of Linux.
COPY wwwroot c:/inetpub/wwwroot

# Run some PowerShell commands within the new container to set up the image

# Run the PowerShell commands to remove the default IIS files and create a new
# application pool called TestPool
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.htm -force
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.png -force
RUN powershell Import-Module WebAdministration
RUN powershell New-WebAppPool -Name 'TestPool'

# Exposes port 80 on the new container image
# Used to open TCP port 80 for allowing an http connection to the website.
# However, this line is commented out, because the IIS container has this port
# already open by default.
#EXPOSE 80

# Sets the main command of the container image
# This tells the image to run a service monitor for the w3svc service.
# When this is specified the container will automatically stop running
# if the w3svc service stopped. This line is commented out because of the
# IIS container already has this entrypoint in place by default.
#ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]

Creando una nueva imagen de Docker

Tiene el Dockerfile listo para usar y una imagen base de IIS descargada. Ahora es el momento de crear su nueva imagen de Docker utilizando Dockerfile.

Para construir una nueva imagen, use la docker build "tag" dominio. Este comando crea la imagen. Para este artículo, puede ver a continuación que también está usando -t ** opción que reemplaza la parte de "etiqueta". Esta opción le permite dar a su nueva imagen un nombre de etiqueta amigable y también hacer referencia al Dockerfile especificando la ruta de la carpeta donde reside.

A continuación, puede ver un ejemplo de cómo asegurarse de que la consola esté en el directorio C:\Containers y luego crear una nueva imagen desde Dockerfile en C:\Containers\Container1 directorio.

PS51> cd C:\Containers
PS51> docker build -t container1 .\Container1

Una vez iniciado, puede ver el progreso del comando a medida que atraviesa cada instrucción en el archivo acoplable línea por línea:

Una vez hecho esto, ¡ahora debería tener una nueva imagen de Docker!

Ahora ejecuta las docker images comando para ver las imágenes que están disponibles. Puede ver a continuación un ejemplo del container1 imagen creada.

Nota:docker build —help El comando es un parámetro útil para mostrar información detallada sobre el comando docker que se está ejecutando.

Ejecución del contenedor Docker

En este punto, deberías tener una nueva imagen creada. Es hora de hacer girar un contenedor usando esa imagen. Para abrir un nuevo contenedor, use docker run comando.

La docker run El comando abrirá un nuevo contenedor Docker basado en el container1 imagen que creó anteriormente. Puede ver un ejemplo de esto a continuación.

Observe que el -d se utiliza el parámetro. Esto le dice al tiempo de ejecución de la ventana acoplable que inicie la imagen en el modo separado y luego salga cuando finalice el proceso raíz utilizado para ejecutar el contenedor.

Cuando docker run completa, devuelve el ID del contenedor creado. El siguiente ejemplo captura esta ID en un $containerID variable para que podamos hacer referencia a ella fácilmente más tarde.

PS51> $containerID = docker run -d container1
PS51> $containerID

Una vez que se abre el contenedor, ahora ejecute docker ps dominio. Este comando le permite ver qué contenedores se están ejecutando actualmente con cada imagen. Observe a continuación que la imagen en ejecución genera automáticamente un apodo (busy_habit en este caso). Este apodo se usa a veces en lugar del ID del contenedor para administrar el contenedor.

Ejecutar código dentro de un contenedor Docker

Se crea un nuevo contenedor a partir de una nueva imagen que acaba de crear. Ahora comencemos a usar ese contenedor para ejecutar el código. La ejecución del código dentro de un contenedor Docker se realiza mediante docker exec comando.

En este ejemplo, ejecute docker exec para ver la salida de PowerShell para el Get-ChildItem comando en el contenedor usando la sintaxis de comando a continuación. Esto asegurará que las instrucciones en Dockerfile para eliminar los archivos IIS predeterminados se hayan realizado correctamente.

PS51> docker exec $containerID powershell Get-ChildItem c:\inetpub\wwwroot

Puede ver a continuación que el único archivo que existe es index.html lo que significa que se eliminaron los archivos predeterminados.

Ahora ejecuta ipconfig Comando en el contenedor para obtener la dirección IP local de la imagen del contenedor para que pueda intentar conectarse al sitio web de IIS.

PS51> docker exec $containerID ipconfig

Puede ver a continuación que ipconfig se ejecutó en el contenedor como si se ejecutara en su computadora local y devolvió toda la información de IP.

Inspección del 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 ejecuta en el contenedor Docker está sirviendo correctamente la página index.html.

Abra un navegador y pegue la dirección IP4 encontrada a través de ipconfig en la barra de direcciones. Si todo va bien, deberías ver un ¡¡Hola mundo!! mensaje como el siguiente.

Revisando el historial de Docker

Un comando útil para usar cuando se trabaja con contenedores Docker es el docker history dominio. Aunque no está necesariamente relacionado con la creación de una imagen o un contenedor, el docker history El comando es un comando útil que le permite revisar los cambios realizados en la imagen del contenedor.

PS51> docker history container1

Puede ver a continuación, ese docker history devuelve toda la actividad de Dockerfile y PowerShell realizada en el container1 contenedor con el que ha estado trabajando.

Limpiar las imágenes de Docker en ejecución

Los pasos a continuación se utilizan para limpiar todos los contenedores detenidos que se ejecutan en su máquina. Esto liberará espacio en disco y recursos del sistema.

Ejecute docker ps comando para ver una lista de los contenedores que se ejecutan en su sistema:

PS51> docker ps

Ahora detenga los contenedores en ejecución usando docker stop comando:

PS51> docker stop <image nick name: busy_haibt in my case>
PS51> docker stop <image nick name: unruffled_driscoll in my case>

Finalmente, puede eliminar de forma permanente los contenedores detenidos mediante la poda del sistema docker system prune comando.

PS51> docker system prune

Lecturas adicionales

  • Creación de su primer contenedor de Docker Windows Server
  • Cómo administrar los volúmenes de Docker en Windows


Docker
  1. Cómo crear, enumerar y eliminar contenedores Docker en Linux

  2. Cómo construir el contenedor Docker Anaconda Python Data Science

  3. Cree, etiquete y cargue su propia imagen de Docker

  4. Cómo usar un Dockerfile para crear una imagen de Docker

  5. Cómo implementar un contenedor nginx con Docker en Linode

Cómo inspeccionar el contenido de una imagen Docker sin iniciar un contenedor

Cómo crear una imagen de Docker desde un contenedor en ejecución

Cómo crear un contenedor de aplicaciones Django Docker

Cómo crear volúmenes Docker en Windows de forma fácil

Cómo copiar archivos con Docker cp a su Docker Container

Cómo crear una imagen Docker personalizada con Dockerfile