Installer Docker Desktop sous Rocky Linux

Dans mon quotidien, j’utilise Docker selon le principe KISS (Keep It Simple Stupid) : je configure le dépôt de paquets Docker sur ma station de travail, j’installe le paquet docker-ce et j’active le service correspondant. À partir de là, je manipule les conteneurs en utilisant le client en ligne de commande docker.

Sous le capot, les conteneurs utilisent les ressources de mon système Linux. C’est léger et rapide, et ça tourne comme une flèche sur n’importe quel PC, même une vieille rougne avec un processeur double cœur et un ou deux Go de RAM.

J’avoue platement que jusque-là j’ai toujours regardé d’un mauvais œil les clicodromes genre « usine à gaz » comme Docker Desktop. Si j’en viens à m’y intéresser aujourd’hui, c’est que je me suis rendu compte que ça peut constituer une solution assez intéressante dans certains contextes.

La principale différence de Docker Desktop par rapport à une installation traditionnelle de Docker, c’est qu’on utilise un hyperviseur avec un sous-système virtualisé et une instance isolée de Docker sous le capot :

HyperV puis WSL sous Windows
Hyperkit et QEMU sous MacOS
KVM et QEMU sous Linux

Certes, c’est lourd. Mais ça présente également une série d’avantages :

En dehors de la ligne de commande traditionnelle avec le client docker, on se retrouve également avec un clicodrome assez pratique, notamment dans un contexte pédagogique.
Dans le cadre d’une formation, on est souvent confronté en tant que formateur à un parc de machines hétérogènes, avec du Windows, du MacOS et du Linux sur les portables des étudiants ou des stagiaires.
L’approche virtualisée permet d’isoler l’installation Docker du reste du système. Ce qui résout un problème agaçant dans mon quotidien, puisque l’installation traditionnelle de Docker torpille le bridge KVM de mon hyperviseur.
Enfin, Docker Desktop fournit un cluster Kubernetes pédagogique out of the box, et qui JusteMarche(tm).

Voici en grandes lignes comment se déroule une installation de Docker Desktop en fonction du système d’exploitation que vous utilisez :

Sous Windows vous installez le setup.exe correspondant, vous double-cliquez pour lancer l’installation, vous acceptez tous les choix par défaut, et c’est tout.
Sous MacOS, vous sélectionnez la famille de votre processeur (Intel ou Apple), vous téléchargez le .dmg correspondant, vous faites un glisser-déposer vers le dossier Applications, et c’est tout.
Sous Red Hat Enterprise Linux et Rocky Linux, vous lisez d’abord la documentation officielle. Vous repérez toutes les incohérences de celle-ci. Vous passez une heure à chercher le lien de téléchargement. Vous sautez à travers des cerceaux en feu en vous arrachant les cheveux. Au bout de quelques après-midi ensoleillées, vous arrivez enfin à tout faire fonctionner correctement.
Il semblerait que c’est plus facile sous Ubuntu et Fedora, mais vu que j’ai un kink pour la pérennité des clones Red Hat, je n’ai pas vérifié.

Dans cet article, je vais donc décrire l’installation de Docker Desktop sur Rocky Linux. La procédure décrite fonctionne aussi bien sur les versions 8.x que les versions 9.x. J’ai testé et validé pour vous sur une machine bac à sable dans mon bureau.

Prérequis

Le point de départ, c’est n’importe quel poste de travail tournant sous Rocky Linux 8.x ou 9.x. Pour ma part j’utilise l’environnement de bureau KDE en provenance du dépôt tiers EPEL, mais a priori ça fonctionnera tout aussi bien avec Xfce ou GNOME ou n’importe quel autre environnement graphique.

En dehors du dépôt EPEL (Extra Packages for Enterprise Linux) j’ai également activé le dépôt Docker pour récupérer une seule dépendance. Reportez-vous à cet article pour les détails de ce dépôt.

L’hyperviseur KVM doit être installé et activé sur la machine :

# dnf install -y qemu-kvm libvirt virt-install
# systemctl enable libvirtd –now
# systemctl enable libvirt-guests –now

J’ajoute mon utilisateur commun mortel (non root) au groupe système libvirt :

# usermod -aG libvirt microlinux

Lors de ma première tentative d’installation de Docker Desktop, je me suis rendu compte que l’application cherchait en vain un binaire /usr/bin/qemu-system-x86_64 sous le capot. Le problème, c’est que sur les systèmes Red Hat, ce binaire s’appelle qemu-kvm et se trouve dans /usr/libexec. La solution la plus simple consiste ici à créer un lien symbolique :

# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-system-x86_64

Téléchargement

Si vous êtes sous Windows ou sous MacOS, vous vous contentez de vous rendre sur la page du projet en identifiant clairement le lien de téléchargement qui correspond à votre système.

Les utilisateurs de Red Hat Enterprise Linux ou Rocky Linux n’ont pas cette chance. Un clic sur le lien de téléchargement avec le petit pingouin vous renvoie vers la documentation officielle, qui constitue un amalgame assez déplaisant de rigueur et de bordel.

L’index de la documentation cite explicitement Ubuntu, Debian, Fedora et Arch.
Une fois que vous cliquez sur la section correspondante, le chapitre Supported platforms cite Ubuntu, Debian, Red Hat Enterprise Linux et Fedora. WTF.
Partant de là, amusez-vous bien pour trouver les liens de téléchargement dans ce fatras d’informations.

En fin de compte, j’ai jeté un œil sur les Docker Desktop Release Notes, et c’est là où j’ai trouvé mon bonheur :

Je crée un répertoire de téléchargement :

# mkdir docker
# cd docker

Je copie le lien RPM dans le presse-papier et je récupère la cible du lien :

# wget -c https://desktop.docker.com/linux/main/amd64/167172/docker-desktop-x86_64.rpm

Je note en passant qu’il manque la version dans le nom du paquet et que rien n’indique non plus si c’est un binaire pour Fedora, RHEL 8.x ou RHEL 9.x. J’ai posé la question dans le forum du projet Docker, et j’ai reçu une série d’informations contradictoires. Pour le dire poliment.

Installation

Soyons sur nos gardes et jetons un regard curieux et vaguement inquiet sur les dépendances du paquet :

# rpm -ivh –test docker-desktop-x86_64.rpm
error: Failed dependencies:
docker-ce-cli is needed by docker-desktop-4.34.2-167172.x86_64
gtk3-devel is needed by docker-desktop-4.34.2-167172.x86_64
pass is needed by docker-desktop-4.34.2-167172.x86_64
qemu-system-x86 >= 5.2.0 is needed by docker-desktop-4.34.2-167172.x86_64

Je peux déjà récupérer trois des quatre dépendances depuis les dépôts officiels et tiers :

# dnf install -y docker-ce-cli gtk3-devel pass

Pour la suite des événements, j’utilise l’option –nodeps en connaissance de cause. Le paquet qemu-system-x86 n’est certes pas trouvé, mais la dépendance logicielle est bien satisfaite par le lien symbolique que j’ai créé plus haut :

# rpm -ivh –nodeps docker-desktop-x86_64.rpm
Verifying… ################################# [100%]
Preparing… ################################# [100%]
Updating / installing…
1:docker-desktop-4.34.2-167172 ################################# [100%]
Enabling use of privileged ports by Docker Desktop
kubernetes.docker.internal added to /etc/hosts
Reloading systemd daemon for logged in users
Cannot access user instance remotely.
Done reloading systemd daemon for logged in users
Enabling use of privileged ports by Docker Desktop

Les développeurs de Docker Desktop n’ont vraisemblablement jamais essayé d’installer leur propre paquet RPM sur un système Red Hat, alors même que cette distribution est citée dans la liste des systèmes officiellement supportés. Quant à Red Hat, ça doit leur en secouer une sans faire bouger l’autre, vu qu’ils préfèrent leur propre solution Podman à Docker.

Authentification

Pour la suite des événements nous avons besoin d’un compte chez Docker. Si vous n’en avez pas, c’est le moment d’en créer un. Non, ce n’est pas la peine de sortir la carte bleue. Oui, c’est gratuit.

Docker Desktop est installé, mais il nous reste un problème à régler avant le premier lancement. C’est que la gestion de l’authentification avec les credential helpers ne fonctionne pas dans la configuration par défaut.

La solution la plus simple consiste ici à utiliser la simple commande docker login dans un terminal. Si tout se passe bien, cette commande crée un fichier local ~/.docker/config.json.

$ docker login -u kikinovak
Password: ************

Login Succeeded

Attention : l’utilisateur fourni en argument à l’option -u c’est bien l’identifiant de connexion de votre compte Docker, et non pas votre utilisateur Linux dans le shell.

Premier lancement

Repérez Docker Desktop dans le menu des applications et démarrez-le. La fenêtre de bienvenue vous affiche un lien vers la licence d’utilisateur qui stipule que votre maison, votre voiture, votre femme et votre chien appartiennent désormais à Docker Inc. Acceptez tout ça sans broncher :

Cliquez trois fois sur Skip dans les fenêtres subséquentes pour échapper à toute une série de questions intrusives.

Si tout se passe bien, vous vous retrouvez dans la fenêtre principale de Docker Desktop. Repérez en bas à gauche la zone de notification de l’application qui vous indique que le moteur Docker est en cours d’exécution (Engine running) :

Si vous utilisez un thème clair, l’icône de Docker Desktop dans la zone de notification de votre environnement de bureau est à peu près invisible. Dans mon bureau KDE, elle s’affiche en blanc sur un fond gris clair. Essayez quand-même de la repérer et d’afficher le menu contextuel en cliquant dessus.

Ouvrez les Paramètres > Software Updates et décochez l’option Automatically check for updates :

Kubernetes

Docker Desktop inclut une installation pédagogique de Kubernetes. Pour l’activer, ouvrez la section Kubernetes dans les Paramètres et cliquez successivement sur Enable Kubernetes et Install :

Patientez quelques minutes lors de la mise en place initiale du cluster. Si tout se passe bien, la zone de notification de Docker Desktop vous indiquera que Kubernetes est en cours d’exécution :

La commande kubectl ne fait pas partie d’une installation par défaut de Docker Desktop. Pour la récupérer, on va d’abord configurer le dépôt de paquet tiers correspondant :

# /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
priority=10
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key

Ma version de Docker Desktop inclut Kubernetes dans la version 1.30. La configuration du dépôt de paquets Kubernetes correspondant est codée « en dur » dans le fichier /etc/yum.repos.d/kubernetes.repo.

À présent, on installe le paquet kubectl :

# dnf install -y kubectl

Et on vérifie l’état du cluster :

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 14m v1.30.2

L’authentification revisitée

J’ai finalement réussi à faire fonctionner les credential helpers avec un peu d’obstination. Voici ce qu’il faut faire dans un premier temps :

Arrêter Docker Desktop.
Supprimer ~/.docker/config.json.
Supprimer ~/.password-store.

Partant de là, j’affiche ma clé GPG :

$ gpg –list-keys
/home/kikinovak/.gnupg/pubring.kbx
———————————-
pub rsa2048 2024-07-16 [SC] [expire : 2034-07-14]
6D3F50F62695ABBE918B67AEABE6139C1DB74F6E
uid [ ultime ] Nicolas Kovacs <info@microlinux.fr>
sub rsa2048 2024-07-16 [E] [expire : 2026-07-16]

J’initialise l’enregistrement chiffré des mots de passe :

$ pass init 6D3F50F62695ABBE918B67AEABE6139C1DB74F6E
mkdir: création du répertoire ‘/home/kikinovak/.password-store/’
Password store initialized for 6D3F50F62695ABBE918B67AEABE6139C1DB74F6E

Si tout s’est bien passé, je peux désormais utiliser le bouton Sign In de Docker Desktop en renseignant mon identifiant de connexion et mon mot de passe Docker dans une fenêtre de Firefox :

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Me contacter