GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment créer une image Windows Docker avec la balise Docker Build

Êtes-vous nouveau dans Docker Windows Images ? Travaillez-vous actuellement dans une boutique Windows et êtes-vous curieux d'en savoir plus sur les builds Docker pour les images de conteneur ? Vous êtes au bon endroit. La meilleure façon d'apprendre quelque chose de nouveau est de faire avec la docker build et docker build "tag" commandes !

Dans cet article, vous allez apprendre à créer votre première image Windows Docker à partir d'un Dockerfile en utilisant le docker build commande.

Commençons !

Comprendre les images de conteneur Docker

Pendant des années, la seule façon de tester ou d'effectuer un développement sur plusieurs systèmes d'exploitation (OS) était d'avoir plusieurs machines physiques ou virtuelles dédiées imagées avec la version de l'OS de votre choix. Cette méthodologie nécessitait plus de matériel et de frais généraux pour provisionner de nouvelles machines pour chaque logiciel et chaque spécification de système d'exploitation.

Cependant, de nos jours, l'utilisation des images de conteneurs Docker a augmenté en partie en raison de la popularité de l'architecture de micro-services. En réponse à l'augmentation de la popularité de Docker, Microsoft a commencé à prendre en charge publiquement les images Docker pour plusieurs produits phares sur leur page Docker Hub. Ils ont même ajouté la prise en charge native des images pour Windows en tant que fonctionnalité de produit dans Windows 10 et Windows Server 2016 !

Une image Docker est exécutée sur un conteneur à l'aide du moteur Docker. Les images Docker présentent de nombreux avantages tels que la portabilité (applicable à plusieurs environnements et plates-formes), la personnalisation et la haute évolutivité. Comme vous pouvez le voir ci-dessous, contrairement aux machines virtuelles traditionnelles, le moteur Docker s'exécute sur une couche entre le noyau du système d'exploitation hôte et les services d'application isolés qui sont conteneurisés.

Comprendre Docker Build et les images

La docker build La commande peut être exploitée pour automatiser la création d'image de conteneur, adopter une pratique DevOps de conteneur en tant que code et intégrer la conteneurisation dans le cycle de développement de vos projets. Les Dockerfiles sont simplement des fichiers texte contenant des instructions de construction utilisées par Docker pour créer une nouvelle image de conteneur basée sur une image existante.

L'utilisateur peut spécifier l'image de base et la liste des commandes à exécuter lorsqu'une image de conteneur est déployée ou démarrée pour la première fois. Dans cet article, vous apprendrez à créer une image Docker basée sur Windows à partir de Dockerfile à l'aide d'un conteneur Windows.

Ce processus présente plusieurs avantages par rapport à l'utilisation d'une image de conteneur prédéfinie :

  1. Vous pouvez reconstruire une image de conteneur pour plusieurs versions de Windows, ce qui est idéal pour tester les modifications de code sur plusieurs plates-formes.
  2. Vous aurez plus de contrôle sur ce qui est installé dans le conteneur. Cela vous permettra de réduire au minimum la taille de votre conteneur.
  3. Pour des raisons de sécurité, vous souhaiterez peut-être rechercher des vulnérabilités dans le conteneur et appliquer un renforcement de la sécurité à l'image de base

Prérequis/Exigences

Cet article est une procédure pas à pas pour apprendre à créer une image Docker à l'aide d'un Dockerfile. Si vous souhaitez suivre, assurez-vous que les conditions préalables suivantes sont en place.

  • Docker pour Windows installé. J'utiliserai Docker Community Edition (CE) version 2.1.0.4 dans mon environnement.
  • Un accès Internet est nécessaire pour télécharger les images Docker
  • Système d'exploitation Windows 10+ (la version 1709 est utilisée pour ce didacticiel)
  • Virtualisation imbriquée activée
  • 5 Go d'espace disque libre sur votre ordinateur local
  • PowerShell 5.0+
  • Ce didacticiel utilise l'IDE Visual Studio Code. Cependant, n'hésitez pas à utiliser l'IDE que vous préférez.

Remarque :Assurez-vous d'activer la configuration des conteneurs Windows lors de l'installation de Docker.

Se préparer

Vous aurez d'abord besoin d'un dossier pour stocker toutes les images et conteneurs Docker que vous allez créer à partir de ces images. Pour ce faire, ouvrez un terminal Powershell ou cmd (vous utiliserez PowerShell tout au long de cet article) et créez un nouveau répertoire appelé C:\Containers.

Une fois le dossier créé, accédez à ce répertoire. Cela place le répertoire de travail actuel de la console sur C:\Containers pour tous les téléchargements par défaut dans ce répertoire.

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

Dans cet article, vous aurez une longueur d'avance. La plupart des fichiers nécessaires à ce projet sont déjà disponibles. Une fois le dossier créé, effectuez une extraction Git pour copier les fichiers nécessaires à cet article du référentiel TechSnips Github vers C:\Containers dossier. Une fois terminé, vérifiez que le C:\Containers dossier ressemble à ci-dessous.

Téléchargement de l'image IIS Windows Docker

La première tâche à effectuer est de télécharger un « modèle » ou une image de base. Vous créerez votre propre image Docker plus tard, mais vous avez d'abord besoin d'une image pour commencer. Vous allez télécharger les dernières images IIS et Windows Server Core requises pour ce didacticiel. La liste mise à jour des images se trouve sur la page officielle des images du hub Microsoft Docker.

Examen des images de base Docker actuelles

Avant de télécharger l'image à partir du référentiel d'images, examinons d'abord les images de base Docker actuelles que vous avez actuellement sur votre système local. Pour ce faire, exécutez une console PowerShell en tant qu'administrateur, puis tapez docker images . Cette commande renvoie toutes les images sur votre système local.

Comme vous pouvez le voir ci-dessous, les images disponibles sont initialement vides.

PS51> docker images

Téléchargement de l'image de base

Il est maintenant temps de télécharger l'image IIS de base à partir de Docker Hub. Pour ce faire, exécutez docker pull comme indiqué ci-dessous. Ce processus peut prendre un certain temps en fonction de vos vitesses Internet.

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

Exécutez maintenant les docker images et vous devriez avoir la dernière image Microsoft Windows Core IIS disponible pour ce didacticiel.

PS51> docker images

Inspection du Dockerfile

Dans une étape précédente, vous aviez téléchargé un Dockerfile existant pour ce didacticiel. Voyons maintenant exactement ce que cela implique.

Ouvrez le C:\Containers\Container1\Dockerfile fichier dans votre éditeur préféré. Le contenu de ce Dockerfile est utilisé pour définir comment l'image du conteneur sera configurée au moment de la construction.

Vous pouvez voir une explication de ce que fait chaque élément de ce fichier dans les commentaires en ligne.

# 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"]

Création d'une nouvelle image Docker

Vous avez le Dockerfile prêt à l'emploi et une image IIS de base téléchargée. Il est maintenant temps de créer votre nouvelle image Docker à l'aide du Dockerfile.

Pour construire une nouvelle image, utilisez le docker build "tag" commande. Cette commande crée l'image. Pour cet article, vous pouvez voir ci-dessous que vous utilisez également le -t ** option qui remplace la partie "tag". Cette option vous permet de donner à votre nouvelle image un nom de balise convivial et également de référencer le Dockerfile en spécifiant le chemin du dossier où il réside.

Ci-dessous, vous pouvez voir un exemple pour s'assurer que la console se trouve dans le répertoire C:\Containers, puis créer une nouvelle image à partir du Dockerfile dans C:\Containers\Container1 répertoire.

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

Une fois lancée, vous pouvez voir la progression de la commande au fur et à mesure qu'elle parcourt chaque instruction du fichier docker ligne par ligne :

Une fois cela fait, vous devriez maintenant avoir une nouvelle image Docker !

Exécutez maintenant les docker images commande pour afficher les images disponibles. Vous pouvez voir ci-dessous un exemple de container1 image créée.

Remarque :La docker build —help command est un paramètre utile pour afficher des informations détaillées sur la commande docker en cours d'exécution.

Exécuter le conteneur Docker

À ce stade, vous devriez avoir créé une nouvelle image. Il est temps de faire tourner un conteneur en utilisant cette image. Pour afficher un nouveau conteneur, utilisez le docker run commande.

L'docker run la commande affichera un nouveau conteneur Docker basé sur le container1 image que vous avez créée précédemment. Vous pouvez en voir un exemple ci-dessous.

Notez que le -d paramètre est utilisé. Cela indique au runtime docker de démarrer l'image en mode détaché, puis de se terminer lorsque le processus racine utilisé pour exécuter le conteneur se termine.

Lorsque docker run se termine, il renvoie l'ID du conteneur créé. L'exemple ci-dessous capture cet ID dans un $containerID variable afin que nous puissions facilement la référencer plus tard.

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

Une fois le conteneur mis en place, exécutez maintenant le docker ps commande. Cette commande vous permet de voir quels conteneurs sont actuellement en cours d'exécution à l'aide de chaque image. Notez ci-dessous que l'image en cours d'exécution est automatiquement générée avec un surnom (busy_habit dans ce cas). Ce surnom est parfois utilisé à la place de l'ID du conteneur pour gérer le conteneur.

Exécuter du code dans un conteneur Docker

Un nouveau conteneur est construit à partir d'une nouvelle image que vous venez de créer. Commençons maintenant à utiliser ce conteneur pour exécuter du code. L'exécution de code à l'intérieur d'un conteneur Docker se fait à l'aide de docker exec commande.

Dans cet exemple, exécutez docker exec pour afficher la sortie PowerShell pour le Get-ChildItem commande dans le conteneur en utilisant la syntaxe de commande ci-dessous. Cela garantira que les instructions du Dockerfile pour supprimer les fichiers IIS par défaut ont réussi.

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

Vous pouvez voir ci-dessous que le seul fichier qui existe est index.html ce qui signifie que les fichiers par défaut ont été supprimés.

Exécutez maintenant le ipconfig commande dans le conteneur pour obtenir l'adresse IP locale de l'image du conteneur afin que vous puissiez essayer de vous connecter au site Web IIS.

PS51> docker exec $containerID ipconfig

Vous pouvez voir ci-dessous que ipconfig a été exécuté dans le conteneur comme s'il s'exécutait sur votre ordinateur local et a renvoyé toutes les informations IP.

Inspection du site Web IIS

Il est maintenant temps de révéler le fruit de votre travail ! Il est temps de voir si le serveur IIS exécuté dans le conteneur Docker sert correctement la page index.html.

Ouvrez un navigateur et collez l'adresse IP4 trouvée via ipconfig dans la barre d'adresse. Si tout va bien, vous devriez voir un Hello World!! message comme ci-dessous.

Examen de l'historique Docker

Une commande utile à utiliser lorsque vous travaillez avec des conteneurs Docker dans l'docker history commande. Bien qu'il ne soit pas nécessairement lié à la création d'une image ou d'un conteneur lui-même, l'docker history La commande est une commande utile qui vous permet de revoir les modifications apportées à l'image du conteneur.

PS51> docker history container1

Vous pouvez voir ci-dessous, cet docker history renvoie toute l'activité Dockerfile et PowerShell effectuée sur le container1 conteneur avec lequel vous avez travaillé.

Nettoyage des images Docker en cours d'exécution

Les étapes ci-dessous sont utilisées pour nettoyer tous les conteneurs arrêtés en cours d'exécution sur votre machine. Cela libérera de l'espace disque et des ressources système.

Exécutez le docker ps commande pour afficher une liste des conteneurs en cours d'exécution sur votre système :

PS51> docker ps

Arrêtez maintenant les conteneurs en cours d'exécution à l'aide de docker stop commande :

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

Enfin, vous pouvez supprimer définitivement les conteneurs arrêtés à l'aide du docker system prune commande.

PS51> docker system prune

Lectures complémentaires

  • Création de votre premier conteneur Docker Windows Server
  • Comment gérer les volumes Docker sous Windows


Docker
  1. Comment créer, répertorier et supprimer des conteneurs Docker sous Linux

  2. Comment créer un conteneur Anaconda Python Data Science Docker

  3. Comment partager des images Docker avec d'autres

  4. Comment créer une image personnalisée à partir d'un conteneur Docker

  5. Comment créer une image Docker à partir d'un conteneur et d'un Dockerfile

Comment inspecter le contenu d'une image Docker sans démarrer un conteneur

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Comment créer un conteneur d'application Django Docker

Comment créer des volumes Docker sous Windows en toute simplicité

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Comment créer une image Docker personnalisée avec Dockerfile