Cette vidéo offre un bref survol de ce que sont les conteneurs, comment les exécuter sur un Windows Server et ce à quoi ils peuvent servir. Un conteneur est un environnement isolé où une application peut s'exécuter.
Le conteneur, l’application et toutes ses dépendances sont construits avec des éléments des ressources de l’hôte, telles que le système d’exploitation du noyau, le processeur et la mémoire. Et ils sont logiquement séparés des autres conteneurs et de l'hôte lui-même.
Ce schéma illustre la coexistence d’un conteneur rouge et d’un conteneur jaune au sein du même hôte à l’aide des mêmes ressources matérielles et du même système d’exploitation du noyau, mais qu’ils sont contenus dans leur espace individuel, ce qui leur permet d’exécuter leurs applications sans interférence externe.
Le même matériel et le système d’exploitation installé sur ce matériel peuvent exécuter leurs propres applications et services, indépendamment également de ce qui se passe sur chaque conteneur.
Par défaut, ce conteneur est jetable. Lorsqu'il est arrêté, tous les logiciels et fichiers qu'il contient sont supprimés. Il en va de même si l'hôte redémarre.
Les conteneurs exploitent également le pare-feu de l'ordinateur hôte. Comparons tout cela à une machine virtuelle. Tout d'abord, vous pouvez exécuter un conteneur sur une machine virtuelle, mais pas l'inverse.
Une machine virtuelle simule un ordinateur entier. Par conséquent, elle doit exécuter son propre système d'exploitation, ce qui permet davantage de sécurité, mais nécessite en même temps plus de configuration et de maintenance, ce qui entraîne souvent des ressources inactives.
Il existe plusieurs façons de travailler avec des conteneurs, notamment Visual Studio, Azure, Kubernetes et Windows, mais dans cette vidéo, parlons de Docker.
Docker est un produit de plate-forme as-a-service qui combine une application, toutes ses dépendances et les informations de configuration dans un seul package appelé conteneur.
Docker peut ensuite être utilisé pour expédier, exécuter ou supprimer ce conteneur. Nous allons revenir à ce schéma dans un instant. Voyons cela en action et découvrons d'autres détails en cours de route. Ici, nous avons une nouvelle installation de Windows Server 2022.
Je vais démarrer l'Assistant « Server Manager » pour ajouter « Roles » et « Features ». Notez qu'à l'aide de cet Assistant, je peux ajouter la fonctionnalité « Containers ». Cependant, cela n'installe pas Docker.
Nous devons le faire séparément. Pour ce faire, j'annule cet Assistant et j'ouvre « PowerShell » afin d'exécuter la ligne suivante qui installe d'abord un fournisseur requis.
Install-Module, le « DockerMsftProvider » et nous utilisons le « PSGallery » comme source. Voilà, j'appuie sur Entrée. Répondez « Yes » à cette invite pour installer NuGet et attendez que ce soit terminé.
Maintenant, j'exécute la deuxième ligne pour installer Docker lui-même. Install-Package, « docker », puis spécifiez le « DockerMsftProvider » que nous avons installé précédemment. Appuyons sur Entrée. Et à l'invite que nous obtiendrons ici dans un instant, dites « Yes » pour continuer.
Notez l'invite de redémarrage de l'ordinateur. Faisons-le en saisissant « Restart-Computer ». Une fois l’ordinateur redégardé, je vais rouvrir l’Assistant Ajouter des rôles et des fonctionnalités dans le Gestionnaire de serveur.
Notez que la fonctionnalité « Containers » a déjà été installée. Nous l'avons fait avec les deux lignes PowerShell exécutées auparavant. Dans « PowerShell », l'exécution d'une commande telle que « docker » nous donne une idée de toutes les choses que nous pouvons faire.
La version Docker, par exemple, nous dira que nous exécutons la version 20.10.9 du moteur. Une autre commande, « docker info », nous dit que nous n'avons pas encore créé notre premier conteneur.
Cette zone fournit également des informations telles que la quantité de CPU et de RAM disponible pour les conteneurs, la « méthode d’isolation par défaut » et les types de « réseau » qui ont été créés, que nous n’allons pas aborder pour l’instant.
Exécutons simplement les étapes pour construire et exécuter notre premier conteneur sur cette machine Windows où nous venons d’installer Docker. Revoyons ce schéma et rappelons que Docker est un outil pour regrouper plusieurs éléments dans un conteneur. Ainsi, si nous devons conteneuriser une application Web, par exemple, nous devrons placer plusieurs éléments dans ce conteneur.
Tout d'abord, nous avons besoin d'un « Dockerfile ». Ce fichier contient les informations de configuration et les instructions nécessaires pour créer un nouveau conteneur. Un fichier Dockerfile ressemble à ceci. Il peut être très complexe ou très simple.
Nous allons en créer un dans un instant. Nous avons également besoin d'une image de conteneur. Une image est comme un modèle en lecture seule. Vous pouvez construire un conteneur en utilisant le modèle de « Windows Server Core » ou utiliser un modèle de « Nano Server », par exemple.
Cette image ou ce modèle fournit également certaines des dépendances dont l'application Web aura besoin, telles que le service « IIS » et le cadre de développement. Enfin, nous avons besoin de l'application Web elle-même.
Docker vous permet de regrouper tout cela pour créer un conteneur. Voyons cela en pratique. De retour dans l’ordinateur où nous venons d’installer Docker dans PowerShell, je vais passer à la racine du lecteur C et créer un nouveau répertoire nommé « containers ».
J'accède à ce nouveau répertoire « containers » et, pour créer notre premier conteneur, nous avons besoin du Dockerfile mentionné plus tôt. Souvenez-vous, il s'agit d'un fichier texte avec un ensemble d'instructions pour le conteneur.
Je le crée en saisissant « New-Item » et en spécifiant le nom, « dockerfile ». Notez que ce fichier Dockerfile n'a pas d'extension. Nous pouvons voir ce fichier créé dans l'explorateur Windows. Ouvrons-le avec le Bloc-notes.
Pour garder ce premier conteneur simple, nous allons juste ajouter trois lignes à ce Dockerfile. Je vais les expliquer une par une. Tout d'abord, l'instruction « From » indique à Docker quelle image de conteneur sera utilisée pour créer le conteneur.
Souvenez-vous, une image est comme un modèle. Dans ce cas, nous demandons à Docker d'utiliser une image du registre de conteneurs Microsoft basée sur Windows Server Core et disposant également du rôle « IIS ».
La deuxième ligne indique les commandes à exécuter sur la nouvelle image de conteneur une fois qu’elle est exécutée. Nous pourrions inclure des commandes pour installer des logiciels ou créer des fichiers et des répertoires.
Mais dans ce cas, nous demandons simplement à Docker d'exécuter PowerShell sur le conteneur une fois qu'il est démarré. Enfin, l'instruction « Copy » copie les fichiers ou répertoires de l'ordinateur hôte vers le système de fichiers du conteneur.
Dans ce cas, nous demandons à Docker de copier un nom de fichier « index.html » qui sera créé dans un instant, et qui sert d’exemple d’application Web de l’ordinateur hôte à ce dossier dans le conteneur, qui se trouve être le chemin d’accès au répertoire virtuel par défaut pour IIS.
Et c'est tout. Enregistrons ce fichier Dockerfile. Revenez maintenant à PowerShell pour créer la page Web qui s’exécutera dans ce conteneur. Je le fais en utilisant de nouveau l'applet de commande « New-Item » et en spécifiant « index.html » comme nom de fichier.
Ouvrons ce fichier dans l'explorateur Windows avec le Bloc-notes. Et pour faire simple, encore une fois, nous allons simplement ajouter trois lignes à cet exemple d’application HTML, juste une page Web de base « Hello World ».
Je l'enregistre. Et désormais nous avons tous les composants nécessaires pour créer un conteneur. Docker a été installé sur ce Windows Server.
Nous avons le Dockerfile, que nous avons créé plus tôt avec les instructions d'utiliser l'image Server Core ayant IIS à partir du registre Microsoft.
Et nous avons aussi inclus dans ce Dockerfile les instructions pour copier la page Web HTML dans ce nouveau conteneur une fois qu'il est construit. Mais c'est tout ce que nous avons : un ensemble d'instructions. Rien n'est encore en cours d'exécution.
Donc, revenons dans PowerShell pour créer une image basée sur ces instructions. Nous exécutons « docker build » et attribuons ensuite le nom ou la balise « webserver ».
Et ce point de fin à la fin indique que nous allons travailler sur ce répertoire de conteneurs, où se trouvent notre fichier Dockerfile et notre page Web « index.html ». J'appuie sur Entrée.
Cette ligne crée l’image de base à partir de laquelle nos conteneurs seront créés à l’aide des instructions que nous avons spécifiées sur ce fichier Dockerfile. Étant donné que c’est la première fois que nous appelons cette image sur ce serveur, il doit la télécharger à partir du registre de conteneurs Microsoft.
Une fois tout cela terminé, l’exécution d’une commande telle que docker images affichera une image récemment téléchargée ainsi que le nom ou la balise que nous lui avons attribué. Donc, nous avons maintenant une image de conteneur qui n'est rien d'autre qu'un modèle, souvenez-vous. Mais aucun conteneur n'est encore en cours d'exécution.
Juste pour montrer qu’il n’est pas encore possible d’accéder à notre exemple d’application Web, je vais ouvrir un navigateur Web et taper « localhost ». Cela échoue, et c'est normal, car l'hôte ne dispose pas d'IIS et ne peut pas héberger de page Web.
Pour enfin exécuter le conteneur à l'aide du modèle d'image que nous avons téléchargé, revenons dans PowerShell, saisissons « docker run », puis spécifions le nom de ce conteneur.
Nous utiliserons le nom « container1 ». Ce commutateur spécifie que le conteneur sera exécuté en arrière-plan. Et cet autre pour spécifier que « port 80 » sur le conteneur sera mappé sur « port 80 » sur l’hôte. Et nous spécifions que ce conteneur doit être exécuté à l'aide de l'image de serveur Web que nous avons téléchargée et construite précédemment.
Donc j'appuie sur Entrée. Et voilà ! Ceci crée et exécute un conteneur nommé « container1 » basé sur l'image du serveur Web que nous venons de préparer.
Remarquez que nous n'avons pas eu à affecter de mémoire à ce conteneur, ni de processeurs ou de disques durs virtuels, comme c'est le cas avec les machines virtuelles.
C'est parce que vous n'avez pas besoin d'affecter ces ressources à un conteneur. Il utilise simplement ce dont il a besoin. Revenons au navigateur et saisissons à nouveau « localhost ».
Nous voyons que notre exemple d'application Web est en place. Mais pas sur l'hôte. Au lieu de cela, l'hôte transfère le port 80 vers le conteneur, qui a été créé à l'aide des paramètres que nous avons spécifiés sur l'image du serveur Web. Et celui-ci contient notre page Web HTML copiée comme spécifié dans le Dockerfile.
Nous pouvons interagir avec ce conteneur nouvellement créé via la ligne de commande. Par exemple, je vais ouvrir une nouvelle fenêtre PowerShell et saisir la commande « docker exec -ti » pour spécifier que nous allons nous connecter à ce conteneur de manière interactive.
Le nom du conteneur, « container1 », puis « powershell ». Cette commande Docker ouvre PowerShell dans le container1 que nous venons de créer et nous donne une invite.
Et donc, si nous saisissons par exemple « hostname », nous pouvons voir que ce conteneur a reçu un nom d'ordinateur. En saisissant une commande telle que « ipconfig », vous constaterez qu’une adresse IP a également été attribuée à ce conteneur qui utilise la traduction d’adresses réseau pour communiquer avec l’hôte et au-delà.
Je vais apporter un petit changement à la page Web HTML que nous avons créée plus tôt. Ouvrez-la dans le Bloc-notes et modifiez cet en-tête ici pour mettre « container #2 » au lieu de « container #1 ». Enregistrez ce fichier. De retour dans PowerShell, j'utilise les deux mêmes lignes que celles utilisées précédemment pour construire et exécuter notre premier conteneur.
Tout d'abord, la ligne « docker build » reste inchangée. Notez que lorsque j'appuie sur Entrée, tout se fait presque instantanément. En effet, nous avons déjà téléchargé l’image principale du serveur sur laquelle le rôle IIS est installé à partir du registre de conteneurs Microsoft.
Quant à la deuxième ligne, avec « docker run », nous allons juste la modifier pour créer un nouveau conteneur nommé « container2 » et faire en sorte que ce conteneur écoute le port 8080 au lieu du port 80, qui est celui que nous avons attribué à « container1 ».
Appuyons sur Entrée. Une fois l'opération terminée, de retour dans le navigateur, je reprends « localhost » mais cette fois en spécifiant le port 8080. Nous pouvons voir que la page web à l’écoute sur le port 8080 est hébergée par le « conteneur #2 » que nous venons de créer. Alors que celui qui écoute sur le port 80, la valeur par défaut pour HTTP, est hébergé par « container #1 ».
Nous pouvons voir la même chose dans PowerShell en exécutant « docker ps ». Le conteneur #1 écoute le port 80, tandis que le « conteneur #2 » écoute le port 8080. Le conteneur #1 et le « conteneur #2 » ont leur propre nom d’hôte, leurs propres adresses IP et hébergent leurs propres sites Web.
Tout changement se produisant dans le « container #1 » n'affectera pas le « container #2 ». Notez que nous avons pu faire tout cela sans jamais installer le rôle « IIS » ou le rôle « hyper v » sur le serveur hôte.
Nous n'avons pas non plus dû affecter des ressources telles que la RAM, le processeur ou les disques durs virtuels, ni configurer la mise en réseau. Une fois que l’image du modèle de base est locale, la création du conteneur nous a pris entre deux et trois secondes.
Enfin, je voudrais parler brièvement de ce que vous pouvez exécuter dans un conteneur. Tout d'abord, les conteneurs sous Windows ont été pris en charge pour la première fois dans Windows Server 2016 et Windows 10. L’idéal est donc que l’application hébergée soit compatible avec ces systèmes d’exploitation et les systèmes plus récents.
Si une application a besoin d'une interface graphique ou de pilotes, elle ne peut pas être déployée sur un conteneur. Vous pouvez cependant utiliser un conteneur pour héberger des frameworks d’application tels que « Asp.net » ou « Apache », des langages de programmation tels que « Python », voire des bases de données sous forme de services tels que sqlserver-express, « mongodb » ou « mysql ».
Actuellement, il n’est pas pris en charge pour héberger des rôles d’infrastructure Windows tels que « contrôleur de domaine », « DNS » ou « DHCP » sur des conteneurs, mais qui sait ce que l’avenir nous réserve.
Voici un bref aperçu des éléments suivants : que sont les conteneurs, comment les exécuter sur un serveur Windows et à quoi servent-ils ? J’espère que ces informations vous seront utiles et je tiens à vous remercier de votre attention.