Installer Docker Desktop et activer Kubernetes

12 min
Public
débutant, Windows 10/11, macOS ou Linux
Durée
30 à 45 min (plus le téléchargement des images, 5 à 15 min selon la connexion)
Module
1/8
Compétence visée
installer Docker Desktop, lui donner assez de mémoire, activer le cluster Kubernetes intégré et prouver qu'il tourne avec docker desktop kubernetes status et kubectl get nodes

En une image

Activer Kubernetes dans Docker Desktop, c'est comme ajouter une extension à un appartement que tu habites déjà : les fondations (la machine virtuelle Linux, le moteur Docker, le réseau vers localhost) sont posées, il reste à cocher une case et à laisser l'application télécharger une dizaine d'images, monter le control plane et écrire une ligne dans ton fichier ~/.kube/config. Cinq minutes plus tard, kubectl get nodes répond docker-desktop Ready. Dans cette leçon, tu déroules l'installation pas à pas pour ton système, tu vérifies chaque étape par une commande dont tu connais la sortie attendue, et tu repars avec la liste des cinq pannes qui bloquent neuf étudiants sur dix au premier jour, avec le message exact et le remède.

Comment ça marche

Docker Desktop fait tourner une machine virtuelle Linux légère : sous Windows c'est une distribution WSL 2 nommée docker-desktop, sous macOS une VM Apple Virtualization, sous Linux une VM QEMU. Le moteur Docker vit dedans, et Kubernetes aussi : quand tu l'actives, Docker Desktop télécharge les images du control plane depuis Docker Hub (docker/desktop-kubernetes, desktop-kubernetes-etcd, desktop-kubernetes-apiserver…), les lance comme des conteneurs privilégiés dans cette VM, génère les certificats, puis ajoute dans ton ~/.kube/config un contexte docker-desktop qui pointe vers https://kubernetes.docker.internal:6443. Il installe aussi kubectl (dans C:\Program Files\Docker\Docker\resources\bin sous Windows, /usr/local/bin/kubectl sous macOS) : tu n'as rien d'autre à télécharger.

Deux façons de provisionner le cluster existent depuis Docker Desktop 4.38. Kubeadm crée un seul nœud, avec la version de Kubernetes choisie par Docker Desktop (v1.34.1 dans la 4.68) ; c'est le mode par défaut et celui du cours. kind (Kubernetes in Docker) crée plusieurs nœuds, chacun étant un conteneur, et te laisse choisir la version ; il démarre plus vite mais ne partage pas le magasin d'images Docker classique (il faut le mode « containerd image store »). Tant que tu apprends, un nœud suffit : tout ce que le cours fait tient sur docker-desktop.

SystèmeCe que tu installesOù se règle la mémoireKubernetes intégré ?
Windows 10 (21H2+) / 11Docker Desktop, moteur WSL 2fichier %UserProfile%\.wslconfig, puis wsl --shutdownoui
macOS 13+ (Intel ou Apple Silicon)Docker Desktop (.dmg de ta puce)Settings → Resources → Memory, « Apply & restart »oui
Linux (Ubuntu, Debian, Fedora…)Docker Desktop pour Linux (.deb / .rpm) ou Docker Engine seulSettings → Resources (Desktop) ; toute la RAM (Engine)oui avec Docker Desktop ; non avec Docker Engine seul (utilise alors minikube ou kind)
Réglage Kubernetes (Settings → Kubernetes)Ce qu'il faitNotre choix
Enable KubernetesInstalle et démarre le cluster ; le décocher stoppe et supprime les conteneurs du cluster et retire kubectlcoché
Cluster provisioning methodKubeadm (1 nœud, version imposée) ou kind (multi-nœuds, version au choix)Kubeadm
Show system containers (advanced)Montre les conteneurs k8s_… du cluster dans docker pscoché (utile pour comprendre, leçon 01 étape 7)
Reset Kubernetes clusterSupprime tout le cluster (namespaces, Deployments, volumes) et le recrée vierge ; seul moyen de changer de version de Kubernetesseulement en dépannage

Le réglage est stocké dans un fichier JSON : sous Windows %APPDATA%\Docker\settings-store.json, clé KubernetesEnabled (true/false) et KubernetesMode (kubeadm/kind). Le connaître sert quand l'interface refuse de s'ouvrir.

Pas à pas

  1. Windows : installer WSL 2, puis Docker Desktop. Ouvre PowerShell en administrateur et installe WSL si ce n'est pas déjà fait (la commande ne fait rien si WSL est présent) :

    powershell
    wsl --install
    wsl --status

    Redémarre si on te le demande. Télécharge ensuite « Docker Desktop for Windows » sur docs.docker.com/desktop, lance l'installeur, laisse coché Use WSL 2 instead of Hyper-V, puis démarre Docker Desktop et attends que l'icône de la baleine dans la barre des tâches cesse de clignoter. Ce qu'il faut voir :

    powershell
    wsl --list --verbose
    text
      NAME              STATE           VERSION
    * docker-desktop    Running         2
    

    La distribution docker-desktop est la VM dans laquelle tourneront Docker et Kubernetes. Si VERSION affiche 1, convertis-la : wsl --set-version docker-desktop 2.

  2. Windows : donner de la mémoire à WSL 2. Par défaut WSL prend la moitié de ta RAM ; c'est souvent suffisant, mais pour ne pas dépendre du hasard, fixe-le. Crée le fichier %UserProfile%\.wslconfig :

    powershell
    notepad $env:UserProfile\.wslconfig

    Colle, enregistre, puis relance la VM WSL (Docker Desktop redémarre tout seul derrière) :

    ini
    [wsl2]
    memory=8GB
    processors=4
    powershell
    wsl --shutdown

    Ce qu'il faut voir, une fois Docker Desktop revenu : docker info --format '{{.MemTotal}}' renvoie un nombre proche de 8 000 000 000 (sur la machine du cours, sans limite, il renvoie 33480151040, soit 31 Go). Le cours fonctionne à partir de 4 Go ; 8 Go te mettent à l'aise jusqu'au module 8.

  3. macOS : installer et régler la mémoire. Télécharge le .dmg correspondant à ta puce (Apple Silicon ou Intel), glisse Docker dans Applications, lance-le. Puis Settings (roue dentée) → ResourcesAdvanced : pousse Memory à 8 Go (4 Go minimum) et CPUs à 4, puis Apply & restart. Ce qu'il faut voir : docker info --format '{{.MemTotal}}' reflète ta valeur. kubectl sera installé dans /usr/local/bin/kubectl à l'activation de Kubernetes ; si tu en avais un via Homebrew et que les deux se disputent, supprime celui de Docker ou de Homebrew, pas les deux (leçon 03).

  4. Linux : Docker Desktop, ou pas. Deux chemins. Docker Desktop pour Linux (paquet .deb ou .rpm sur docs.docker.com/desktop/setup/install/linux) donne exactement le même Kubernetes intégré que sous Windows et macOS ; il exige KVM (lsmod | grep kvm doit lister le module) et une session graphique. Docker Engine seul (docker-ce via apt/dnf) n'inclut pas Kubernetes : si tu es sur un serveur ou que tu préfères Engine, installe kind ou minikube ; toutes les commandes kubectl du cours resteront identiques, seul l'accès aux Services changera (leçon 04). Sur Docker Desktop pour Linux, kubectl n'est pas fourni : installe-le depuis kubernetes.io/docs/tasks/tools dans /usr/local/bin/kubectl.

  5. Activer Kubernetes. Ouvre Docker Desktop → Settings → Kubernetes → coche Enable Kubernetes. Laisse Cluster provisioning method sur Kubeadm (un nœud), coche Show system containers (advanced), puis Apply & restart. Dans les versions 4.51 et plus, tu peux aussi passer par la vue Kubernetes du tableau de bord (icône dans la barre latérale) → Create cluster → même choix Kubeadm / kind → Create. Docker Desktop télécharge alors les images du control plane ; tu peux les lister pendant qu'il travaille :

    bash
    docker desktop kubernetes images list

    Sortie réelle (Docker Desktop 4.68.0) :

    text
    Mode                Repo                Name                                    Tag
    kind                docker              desktop-containerd-registry-mirror      v0.0.3
    kind                docker              desktop-cloud-provider-kind             v0.5.0
    kind                envoyproxy          envoy                                   v1.36.4
    kind                kindest             node
    kubeadm             docker              desktop-kubernetes                      kubernetes-v1.34.1-cni-v1.7.1-critools-v1.33.0-cri-dockerd-v0.3.20-1-debian
    kubeadm             docker              desktop-storage-provisioner             v3.0
    kubeadm             docker              desktop-vpnkit-controller               v4.0
    kubeadm             docker              desktop-kubernetes-etcd                 3.6.4-0
    kubeadm             docker              desktop-kubernetes-coredns              v1.12.1
    kubeadm             docker              desktop-kubernetes-pause                3.10
    kubeadm             docker              desktop-kubernetes-apiserver            v1.34.1
    kubeadm             docker              desktop-kubernetes-controller-manager   v1.34.1
    kubeadm             docker              desktop-kubernetes-scheduler            v1.34.1
    kubeadm             docker              desktop-kubernetes-proxy                v1.34.1

    Ce qu'il faut voir : dix images pour le mode kubeadm, toutes taguées v1.34.1 pour les composants du control plane. Tu reconnais etcd, apiserver, controller-manager, scheduler, proxy et coredns de la leçon 01. Le téléchargement prend de deux à quinze minutes ; l'icône Kubernetes en bas à gauche de la fenêtre passe d'orange (starting) à vert.

  6. Regarde bien ce qui va se passer : interroger Docker Desktop lui-même. La commande docker desktop (sous-commandes kubernetes disponibles depuis la version 4.44) parle à l'application, pas au démon. C'est la vérification la plus fiable, avant même kubectl.

    bash
    docker desktop status
    docker desktop kubernetes status

    Sortie réelle :

    text
    Name                Value
    Status              running
    SessionID           5bc01282-499f-4434-b135-f8ecf0a79886
    Field               Value
    ID:                 1758e244
    State:              running
    Mode:               kubeadm
    Node Count:         1
    Version:            v1.34.1
    Started At:         2026-09-10 21:27:23.469 -0400 EDT
    Progress Message:   Kubernetes is up and running
    Error:              None

    Ce qu'il faut voir : Status running pour l'application, puis State: running, Mode: kubeadm, Node Count: 1, Version: v1.34.1, Progress Message: Kubernetes is up and running, Error: None. Pendant le démarrage, State vaut starting et Progress Message décrit l'étape en cours (Pulling images…, Starting control plane…). Si ta version de Docker Desktop est antérieure à 4.44, la commande n'existe pas : passe directement à l'étape suivante.

  7. Vérifier le nœud avec kubectl. Ferme et rouvre ton terminal (le PATH a changé), puis :

    bash
    kubectl get nodes -o wide

    Sortie réelle :

    text
    NAME             STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION                     CONTAINER-RUNTIME
    docker-desktop   Ready    control-plane   18d   v1.34.1   192.168.65.3   <none>        Docker Desktop   6.6.87.2-microsoft-standard-WSL2   docker://29.3.1

    Ce qu'il faut voir : Ready, v1.34.1, l'IP interne 192.168.65.3 (celle de la VM, pas de ta machine), le noyau WSL 2 (sous macOS tu liras un noyau linuxkit), et le runtime docker://29.3.1 : Kubernetes lance ses conteneurs avec le même Docker que toi. Chez toi AGE se compte en secondes ou minutes.

  8. Voir le contexte que Docker Desktop a écrit. Tout ce que kubectl sait de ton cluster tient dans ~/.kube/config (C:\Users\<toi>\.kube\config sous Windows).

    bash
    kubectl config get-contexts
    kubectl config view --minify

    Sortie réelle (la machine du cours garde un ancien contexte minikube, éteint ; chez toi il n'y aura que docker-desktop) :

    text
    CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
    *         docker-desktop   docker-desktop   docker-desktop
              minikube         minikube         minikube         default
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: DATA+OMITTED
        server: https://kubernetes.docker.internal:6443
      name: docker-desktop
    contexts:
    - context:
        cluster: docker-desktop
        user: docker-desktop
      name: docker-desktop
    current-context: docker-desktop
    kind: Config
    users:
    - name: docker-desktop
      user:
        client-certificate-data: DATA+OMITTED
        client-key-data: DATA+OMITTED

    Ce qu'il faut voir : l'étoile sur docker-desktop, le serveur https://kubernetes.docker.internal:6443, et une authentification par certificat client (client-certificate-data) générée à l'activation. La leçon 03 revient sur les contextes.

  9. Windows : lire le réglage dans son fichier. Utile le jour où l'interface refuse de s'ouvrir, ou pour vérifier ce qu'a fait un collègue.

    powershell
    (Get-Content "$env:APPDATA\Docker\settings-store.json" -Raw | ConvertFrom-Json) | Select-Object KubernetesEnabled, KubernetesMode, ShowKubernetesSystemContainers | Format-List

    Sortie réelle :

    text
    KubernetesEnabled              : True
    KubernetesMode                 : kubeadm
    ShowKubernetesSystemContainers : True

    Ce qu'il faut voir : les trois valeurs cochées à l'étape 5. Ne modifie pas ce fichier à la main pendant que Docker Desktop tourne ; passe par l'interface. Rien à nettoyer dans cette leçon : tu n'as rien créé dans le cluster.

Si ça coince

  • L'icône Kubernetes reste orange, docker desktop kubernetes status affiche State: starting depuis plus de quinze minutes → les images de l'étape 5 ne se téléchargent pas. Trois causes dans l'ordre : pas d'accès à Docker Hub (réseau d'entreprise avec proxy : Settings → Resources → Proxies, ou demande à ton administrateur le réglage KubernetesImagesRepository), disque plein (docker system df), ou un état corrompu après une mise à jour. Dans ce dernier cas : Settings → Kubernetes → Reset Kubernetes cluster, puis Apply & restart.
  • Unable to connect to the server: dial tcp 127.0.0.1:6443: connectex: No connection could be made because the target machine actively refused it. (macOS/Linux : connect: connection refused) → personne n'écoute sur le port 6443 : Docker Desktop est arrêté, ou Kubernetes n'est pas (ou plus) activé. Lance Docker Desktop, vérifie docker desktop kubernetes statusState: running, réessaie. Si c'est Error: … au lieu de None, lis le message : c'est le plus souvent la mémoire.
  • docker desktop kubernetes status répond State: running mais kubectl get nodes échoue, ou répond pour un autre cluster → ton kubectl regarde ailleurs (contexte minikube, kind-…, un cluster d'entreprise). kubectl config current-context doit dire docker-desktop ; sinon kubectl config use-context docker-desktop. Détail en leçon 03.
  • Windows : WSL 2 installation is incomplete ou wsl --status échoue → le sous-système Windows pour Linux n'est pas installé ou le noyau WSL 2 manque. wsl --install en PowerShell administrateur, redémarrage, puis relance Docker Desktop. Si la fenêtre parle de Virtual Machine Platform ou de virtualisation, active Virtualization Technology (VT-x / AMD-V) dans le BIOS/UEFI : sans ça ni WSL 2 ni Docker Desktop ne démarrent.
  • Kubernetes démarre puis retombe, Error: mentionne OOM ou les conteneurs k8s_… redémarrent en boucle → pas assez de mémoire pour la VM. Retour à l'étape 2 (Windows : .wslconfig, wsl --shutdown) ou 3 (macOS : Resources → Memory), puis Reset Kubernetes cluster si l'état reste incohérent.
  • Le kubectl de Docker Desktop n'est pas trouvé alors que Kubernetes tourne → sous Windows, l'installation « par utilisateur » le place dans %LOCALAPPDATA%\Programs\DockerDesktop\resources\bin\kubectl.exe au lieu de C:\Program Files\Docker\Docker\resources\bin ; ajoute le bon dossier au PATH (leçon 03) et rouvre le terminal.

À retenir

  • Kubernetes de Docker Desktop tourne dans la même VM Linux que Docker (docker-desktop sous WSL 2) ; l'activer = Settings → Kubernetes → Enable Kubernetes → Apply & restart, ou vue Kubernetes → Create cluster (4.51+).
  • Kubeadm = un nœud, version imposée (v1.34.1 en 4.68) : le mode du cours ; kind = multi-nœuds, version au choix, sans le magasin d'images Docker classique.
  • Mémoire : 4 Go minimum, 8 Go conseillés ; sous Windows %UserProfile%\.wslconfig (memory=8GB, processors=4) puis wsl --shutdown.
  • docker desktop kubernetes status doit afficher State: running, Node Count: 1, Version: v1.34.1, Progress Message: Kubernetes is up and running ; kubectl get nodes -o wide doit afficher docker-desktop Ready control-plane.
  • dial tcp 127.0.0.1:6443 … refused = Docker Desktop arrêté ou Kubernetes désactivé, jamais un problème de ton YAML.
  • Prochaine leçon : kubectl, la télécommande — versions, contextes, anatomie d'une commande, et ton premier namespace premiers-pas.

Pour aller plus loin

Docker Desktop ne met pas à jour le cluster Kubernetes quand l'application se met à jour : ton nœud restera en v1.34.1 jusqu'à ce que tu fasses Reset Kubernetes cluster, qui recrée un cluster vierge avec la version embarquée par la nouvelle Docker Desktop. C'est une différence de fond avec un cluster managé (EKS, GKE, AKS), où l'on migre le control plane puis les nœuds sans perdre les objets. La page officielle Deploy on Kubernetes with Docker Desktop décrit les deux provisionneurs, la vue Kubernetes du tableau de bord et le réglage KubernetesImagesRepository pour les réseaux sans accès à Docker Hub ; côté Kubernetes, Install Tools explique comment installer kubectl séparément si tu en as besoin sur une autre machine.