Skip to main content

Lab 3 - Dockerfile Linux vs Dockerfile Windows

Dans ce laboratoire, vous allez créer :

  1. Un Dockerfile Linux basé sur Ubuntu, qui exécute des outils sur Linux.
  2. Un Dockerfile Windows basé sur Windows Server Core, qui exécute des outils Microsoft.

Ce lab démontre que :

  • Un conteneur Linux ne peut exécuter que des binaires Linux.
  • Un conteneur Windows ne peut exécuter que des binaires Windows à moins d’utiliser WSL.
  • Docker utilise le noyau du système hôte pour exécuter les conteneurs.

Dockerfile Linux (Ubuntu)

1. Créez un dossier de travail

mkdir docker-linux-test
cd docker-linux-test

2. Créez un fichier Dockerfile

# distribution de linux très légère fait pour les conteneurs
FROM alpine:latest

# Mettre à jour et installer des outils Linux
RUN apk update && apk add \
    curl \
    iproute2 \
    vim \
    htop

# Commande par défaut
CMD ["/bin/sh"]

3. Construisez l’image

docker build -t linux-tools .

4. Lancez un conteneur

docker run -it linux-tools

5. Testez des outils Linux dans le conteneur

Dans le conteneur :

vim

6. Sur le host Ubuntu, ouvrez un autre terminal et exécutez :

ps aux | grep vim

7. Supprimer le conteneur

docker ps -a
docker stop <ID>
docker rm <ID>

8. Sur le host Ubuntu, refait

ps aux | grep vim

Quel est le résultat ? (Faites une capture d’écran et collez l’image dans votre journal)



Dockerfile Windows (Windows Server Core)

Cette partie doit être faite dans votre VM Windows avec Docker Desktop configuré en mode Windows Containers.

Basculer vers les conteneurs Windows

Pour utiliser Windows et non wsl comme environnement host, il faut passer Docker Desktop en mode conteneurs Windows :

Faites un clic droit sur l’icône Docker Desktop dans la zone de notification (en bas à droite de la barre des tâches Windows, près de l’horloge).

Cliquez sur “Switch to Windows containers…” (Basculez vers les conteneurs Windows).

Ensuite

Ouvrez Docker Desktop.

Cliquez sur l’icône d’engrenage Settings (Paramètres) en haut à droite.

Allez dans la section Docker Engine.

Dans le fichier JSON de configuration, ajoutez ou modifiez la clé “exec-opts” :

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "exec-opts": ["isolation=process"]
}

1. Créer un dossier de travail et ouvrir VSCode

cd ~/Documents
mkdir docker-windows-test
cd docker-windows-test
code

2. Créez un fichier Dockerfile

# Image Windows Server Core
FROM mcr.microsoft.com/windows/servercore:ltsc2022

# Installer des outils Windows
RUN powershell -Command \
    Install-WindowsFeature Net-Framework-Features

# Commande par défaut
CMD ["powershell.exe"]

3. Construisez l’image

docker build -t windows-tools .

4. Lancez un conteneur

docker run -it --isolation=process windows-tools

5. Testez des outils Windows

Dans le conteneur :

notepad.exe

6. Testez un outil Linux (échec attendu)

Toujours dans le conteneur :

bash

7. Sur l’host Windows, ouvrez le Gestionnaire des tâches :

  • Ctrl + Shift + Esc
  • Onglet Processes
  • Cherchez notepad.exe
  • ou dans une nouvelle fenêtre terminale
    • Get-Process notepad

Quel est le résultat du point 5 et 6 ? (Faites une capture d’écran et collez l’image dans votre journal)




Questions à remettre dans votre journal

  1. Quelle commande permet de construire une image Docker ?
  2. Pourquoi le conteneur Windows ne peut-il pas exécuter bash ?
  3. Est-ce que Docker émule un OS ?
  4. Dans vos mots, quel est le rôle du noyau de l’host dans l’exécution d’un conteneur ?
  5. Quelle est la différence fondamentale entre une vm et un conteneur ?
  6. N’oubliez pas de mettre les captures d’écran demandées plus haut.