Docker sous Windows ? Commencez dès maintenant ou… !

Si vous êtes nouveau dans les conteneurs et Docker et que vous travaillez principalement sur Windows, vous êtes sur le point de vous régaler. Dans cet article, vous allez apprendre comment configurer Docker sur Windows 10 en utilisant Docker Desktop for Windows ou simplement appelé Docker Desktop dans cet article.

Docker Desktop est le moteur Docker et un client de gestion emballés ensemble pour une utilisation facile sous Windows 10. Dans cet article, vous allez installer Docker Desktop, déployer votre premier conteneur et partager des données entre votre hôte et vos conteneurs.

Prérequis pour Docker sur Windows

Cet article vous guide à travers différentes étapes de Docker Desktop pour Docker sur Windows. Pour suivre, assurez-vous d’avoir quelques exigences spécifiques en place au préalable.

  • Une connexion Internet pour télécharger plus de 800 Mo de données
  • Windows 10 64 bits exécutant l’édition Pro, Entreprise ou Education avec la version 1703 ou plus récente. Cela est nécessaire pour exécuter Hyper-V sur Windows 10.
  • A CPU with SLAT (nested paging) compatibility. All AMD/Intel processors since approximately 2008 are SLAT compatible
  • Au moins 4 Go de RAM
  • La virtualisation matérielle du BIOS, parfois étiquetée comme Technologie de virtualisation ou VTx. Cela doit être activé et affiché comme Activé dans l’onglet performances du gestionnaire des tâches, comme indiqué ci-dessous.
Enabled BIOS virtualization shown in Windows Task Manager

Téléchargement et installation de Docker Desktop

Tout d’abord, vous devez télécharger et installer Docker Desktop pour utiliser Docker sur Windows. Docker Desktop est disponible en deux versions : une version stable et une version de test.

La version stable est publiée tous les trimestres et garantit une application entièrement testée. Dans cet article, vous utiliserez la version stable.

Avertissement : lors de l’installation, Docker Desktop vous demandera d’installer l’hyperviseur Hyper-V s’il n’est pas déjà installé. En le faisant, l’hyperviseur Hyper-V empêche l’exécution de tout hyperviseur en mode utilisateur tel que VirtualBox, VMWare, etc. La prise en charge de Hyper-V pour VirtualBox et VMWare est limitée mais en cours de développement.

Vous avez également la possibilité de télécharger Docker Desktop directement depuis Docker.com ou via le gestionnaire de packages de Windows, Chocolatey. Examinons brièvement chaque méthode.

Depuis Docker.com

Pour télécharger Docker Desktop directement depuis docker.com, vous pouvez vous rendre sur la page du produit, vous inscrire pour un compte et le télécharger à partir de là. C’est préférable si vous avez l’intention d’utiliser Docker en production en vous inscrivant à un compte.

Cependant, si vous voulez simplement tester Docker pour la première fois, vous pouvez également le télécharger directement, ce qui est beaucoup plus facile.

Une fois le fichier EXE téléchargé, exécutez-le et suivez les instructions en acceptant tous les paramètres par défaut.

Lorsqu’on vous demande si vous prévoyez d’utiliser des conteneurs Windows à la place des conteneurs Linux, comme indiqué ci-dessous, ne cochez pas la case. Vous utiliserez des conteneurs Linux dans cet article.

Installing Docker Desktop

Une fois l’installation terminée, redémarrez votre ordinateur.

La sélection de l’option pour utiliser des conteneurs Windows ou des conteneurs Linux indique à Docker d’attacher les images à un noyau Windows ou à un noyau Linux. Vous pouvez modifier ce paramètre à tout moment après l’installation en cliquant avec le bouton droit de la souris sur l’icône Docker dans la barre d’état système et en sélectionnant « Passer aux conteneurs Windows », comme indiqué ci-dessous.

Switching to Windows containers

Utilisation de Chocolatey

L’autre option pour télécharger et installer Docker Desktop est d’utiliser Chocolatey. Chocolatey automatise de nombreuses tâches de téléchargement et d’installation pour vous. Pour ce faire, ouvrez une console en tant qu’administrateur (cmd ou PowerShell) pour télécharger et installer le programme en une seule fois en exécutant la commande ci-dessous.

choco install docker-desktop

Une fois terminé, redémarrez Windows 10.

Si vous souhaitez essayer la version de test à un moment donné, vous pouvez la télécharger et l’installer en exécutant la commande choco install docker-desktop --pre.

Validation de l’installation de Docker Desktop

Une fois installé, Docker Desktop s’exécute automatiquement en tant que service fournissant Docker sur Windows. Il apparaît dans la barre système lorsque vous vous connectez à Windows après le redémarrage. Mais comment savoir si cela fonctionne réellement ?

Pour valider que Docker Desktop fonctionne correctement, ouvrez une console et exécutez la commande docker. Si l’installation s’est bien déroulée, vous verrez une référence de commande Docker.

Enfin, demandez à Docker de télécharger et d’exécuter une image de conteneur d’exemple appelée hello-world en exécutant la commande docker run hello-world. Si tout se passe bien, vous verrez une sortie similaire à celle-ci-dessous.

A successful test image run via Docker Desktop

Exécution de commandes dans des conteneurs Docker

Docker Desktop est installé et vous avez vérifié que tout fonctionne bien ? Et maintenant ? Pour commencer avec Docker sur Windows, une tâche courante à effectuer dans un conteneur Docker est l’exécution de commandes. Grâce à la commande docker run, vous pouvez envoyer des commandes à travers l’hôte (votre PC Windows 10) directement dans un conteneur en cours d’exécution.

Pour exécuter des commandes dans un conteneur avec docker run, vous spécifierez d’abord un nom d’image suivi de la commande. Pour commencer, dites à Docker d’exécuter la commande hostname à l’intérieur d’un conteneur appelé alpine comme indiqué ci-dessous.

> docker run alpine hostname
b74ff46601af

Étant donné que vous n’avez pas l’image Docker alpine sur votre ordinateur maintenant, Docker sur Windows téléchargera l’image légère depuis le Docker Hub, lancera un conteneur à partir de cette image et enverra la commande directement dans le conteneur, puis l’arrêtera en une seule fois.

Si vous souhaitez laisser le conteneur en cours d’exécution, vous pouvez également utiliser le paramètre -it. Ce paramètre indique à Docker de conserver le conteneur en « mode interactif », en le laissant fonctionner en premier plan après l’exécution de la commande. Vous verrez alors que vous êtes présenté avec un indicateur de terminal prêt à l’emploi.

> docker run -it alpine sh
/ #

Lorsque vous avez terminé dans le terminal, tapez exit pour revenir à Windows 10.

Accéder aux fichiers de l’hôte Docker dans les conteneurs

Une autre tâche courante consiste à accéder aux fichiers hôtes à partir des conteneurs. Pour accéder aux fichiers hôtes dans les conteneurs, Docker sur Windows vous permet de lier un chemin de dossier de votre bureau pour partager ce dossier avec votre conteneur. Ce processus s’appelle binding.

Pour créer une liaison, créez un dossier sur un disque local. Dans cet exemple, j’utiliserai E:\ et l’appellerai input. Ensuite, créez un nouveau document texte nommé file.txt dans le dossier. N’hésitez pas à utiliser le chemin et le nom de fichier de votre choix.

Une fois que vous avez le dossier que vous souhaitez partager entre l’hôte et le conteneur, Docker doit monter le dossier en utilisant le paramètre --mount. Le paramètre --mount nécessite trois arguments : un type de montage, un chemin de répertoire source sur l’hôte et un chemin de répertoire cible. Le chemin cible sera un lien symbolique à l’intérieur du conteneur.

Vous trouverez ci-dessous un exemple de montage de tout le dossier E:\ de l’hôte Windows 10 pour qu’il apparaisse comme le répertoire /home/TEST à l’intérieur du conteneur Linux.

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

Lorsque vous essayez de monter un dossier hôte, Docker Desktop vous demandera l’autorisation de partager ce lecteur avec les conteneurs Docker, comme indiqué ci-dessous.

Sharing a Docker drive

Si vous avez créé le fichier file.txt dans le dossier Windows 10 tel que décrit précédemment, exécutez la commande cat /home/TEST/input/file.txt. Vous verrez que le contenu est affiché.

Maintenant, supprimez le dossier input que vous venez de créer et exécutez à nouveau la commande cat .... Remarquez que le shell signale maintenant que le fichier n’existe plus.

Working with files in Docker containers

Mapping des ports réseau

Un autre concept important à connaître est la gestion du réseau par Docker sur Windows. Pour une brève introduction, voyons ce qu’il faut faire pour accéder à un service web exécuté dans un conteneur à partir de l’hôte local.

Tout d’abord, lancez une image de démonstration qui exécutera une page web exemple. Téléchargez et exécutez l’image Docker appelée dockersamples/static-site. Vous utiliserez la commande docker container run pour le faire.

La commande suivante effectue quatre actions en une seule fois :

  • Télécharge une image Docker depuis Docker Hub appelée static-site dans le « répertoire » docker-samples
  • Démarre une instance de conteneur à partir de l’image static-site
  • Détache immédiatement le conteneur du premier plan du terminal (--detach)
  • Rend les ports réseau du conteneur en cours d’exécution accessibles à l’hôte Windows 10 (--publish-all)
docker container run --detach --publish-all dockersamples/static-site
## Syntaxe alternative/abrégée qui fait la même chose :
## docker container run -d -P dockersamples/static-site
## docker run -d -P dockersamples/static-site

Une fois exécuté, Docker renverra l’ID du conteneur qui a été lancé, comme indiqué ci-dessous.

Docker container ID returned from running a container

Publication des ports réseau

Depuis l’utilisation du paramètre --publish-all, les ports locaux de l’hôte sont maintenant mappés sur la pile réseau du conteneur. Vous pouvez utiliser la sous-commande docker ps pour lister tous les conteneurs en cours d’exécution, y compris les ports assignés à chacun d’entre eux. Dans l’exemple ci-dessous, un conteneur est en cours d’exécution, avec le port hôte 32777 mappé sur le port conteneur 80, et le port hôte 32776 mappé sur le port conteneur 443.

Showing port mapping of Docker container

Avec Docker sur Windows, les conteneurs se voient attribuer des ports aléatoires lors de l’utilisation du paramètre --publish-all, sauf s’ils sont explicitement définis.

À présent, ouvrez un navigateur web et accédez à l’adresse http://localhost:32777 ou au port que Docker a assigné pour mapper le port 80, comme indiqué par la commande docker ps. Si tout se passe bien, vous devriez voir la page web ci-dessous s’afficher.

Resulting webpage running in the Docker container

Modification des ports publiés

Vous avez maintenant un conteneur Docker en cours d’exécution dans Docker sur Windows, qui affiche une page web simple. Félicitations ! Mais maintenant, vous devez spécifier un port spécifique sans vous fier à la sélection aléatoire de ports avec --publish-all. Pas de problème. Utilisez le paramètre -p.

Tout d’abord, arrêtez le conteneur en cours d’exécution en spécifiant son identifiant de conteneur unique. Vous pouvez trouver cet identifiant en exécutant la commande docker ps. Une fois que vous connaissez l’identifiant du conteneur, arrêtez-le et démarrez-en un nouveau tout en spécifiant à Docker d’assigner un port spécifique à publier.

La syntaxe pour spécifier un port est <port externe>:<port du conteneur>. Pour chaque port que vous souhaitez publier, utilisez l’option --publish ou -p avec les numéros de port externe et du conteneur comme indiqué ci-dessous.

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

Lorsque vous spécifiez un ID de conteneur, vous n’avez qu’à taper suffisamment de caractères de l’ID pour qu’il soit unique. Si vous exécutez un seul conteneur et que son ID est f766f4ac8d66bf7, vous pouvez identifier le conteneur en utilisant n’importe quel nombre de caractères, y compris simplement f. La seule exigence est que ce que vous tapez permette d’identifier de manière unique un seul conteneur.

Maintenant, allez dans votre navigateur web et accédez à localhost:1337. Rappelez-vous, vous ne modifiez pas l’image et elle écoute toujours sur le port 80 ; vous modifiez la règle de traduction de port dans la configuration de Docker qui vous permet de vous connecter au conteneur.

Webpage being served up on port 1337

Arrêt de tous les conteneurs

En utilisant docker stop, vous pouvez arrêter un conteneur, mais comment arrêter plusieurs conteneurs en même temps ? Une façon de le faire est de fournir plusieurs ID de conteneurs séparés par des espaces. Vous pouvez voir ci-dessous un exemple de comment arrêter trois conteneurs avec les ID fd50b0a446e7, 36ee57c3b7da et 7c45664906ff.

> docker stop fd50 36ee 7c45

Si vous gérez des conteneurs Docker dans PowerShell, vous pouvez également utiliser un raccourci pour arrêter tous les conteneurs. Transmettez une liste d’ID de conteneur via docker ps -q au paramètre « stop » en utilisant l’expansion de commande de PowerShell docker stop (docker ps -q).

Confirmez que tous les conteneurs sont arrêtés en vérifiant qu’aucun conteneur n’est répertorié lorsque vous saisissez docker ps.

Nettoyage

Vous avez téléchargé quelques images de conteneurs et exécuté des conteneurs qui sont maintenant arrêtés. Même s’ils sont arrêtés, leur espace de stockage alloué n’a pas disparu du disque local de l’hôte. Vous devez supprimer les conteneurs pour libérer cet espace et éviter d’encombrer votre espace de travail.

Pour supprimer un seul conteneur, utilisez le paramètre de suppression du conteneur rm comme indiqué ci-dessous.

> docker container rm <container ID>

Ou, pour supprimer tous les conteneurs arrêtés, utilisez le paramètre prune comme indiqué ci-dessous.

> docker container prune

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