Mise à jour le 29/12/2021
Des développeurs de Docker nous ont contacté pour signaler un point important lié aux performances. Plus que le système utilisé pour faire fonctionner l’app, c’est le type de conteneur qui peut faire la différence sur les Mac Apple Silicon. Si l’on exécute un conteneur x86, il faut ajouter une couche d’émulation en plus de la virtualisation qui est toujours présente avec Docker et cela peut ralentir considérablement les performances. Dans l’exemple de notre lecteur, c’est a priori l’explication pour le gain en passant sous Ubuntu : un conteneur arm64 a été créé, ce qui élimine cet intermédiaire supplémentaire.
Cela étant dit, il reste des problèmes de performances connus de Docker sous macOS, liés notamment à la gestion des fichiers. Une tâche est ouverte à ce sujet depuis le printemps 2020 et des versions expérimentales sont proposées pour corriger, au moins en partie, ces problèmes.
Article original
L’app pour macOS de Docker est optimisée pour les Mac Apple Silicon depuis le printemps dernier, mais cela ne veut pas dire que tout fonctionne parfaitement pour autant pour ce gestionnaire de conteneurs logiciels très utilisé dans le monde du développement web. Un lecteur nous a alerté sur un drôle de bug : la construction initiale du conteneur prend énormément de temps sur son MacBook Air M1 doté de 16 Go de RAM. Ce n’est pas l’ordinateur qui est en cause, car il obtient de bien meilleurs résultats sur la même machine et en passant par Linux.
Dans ses tests, il a noté une différence énorme pour créer le même conteneur avec la version macOS de Docker et la version intégrée à Ubuntu, une distribution Linux. Alors qu’il lui faut environ 2 600 secondes pour obtenir son conteneur prêt à emploi avec l’app macOS, il ne lui faut que 210 secondes pour atteindre le même résultat en passant par Linux. C’est plus de 12 fois plus rapide, sur le même MacBook Air et alors même qu’il ajoute une couche de virtualisation en plus de macOS !
Il y a manifestement un gros bug dans Docker qui justifie cet écart important. Quoi qu’il en soit, ce lecteur a noté d’autres témoignages similaires, dont cet article de LifeinTech publié en novembre dernier qui donne des chiffres avec un Apple M1 Max bien plus puissant que l’Apple M1 évoqué précédemment. Le processeur n’est pas en cause et le meilleur résultat de tous les tests réalisés par le site est fourni par le MacBook Pro, mais en virtualisation sous Linux encore une fois.
Ce qui est étonnant, c’est que ce problème n’est pas récent et on trouve facilement des témoignages depuis le printemps. Pourquoi est-ce que les développeurs de Docker ne le corrigent pas ? S’agit-il d’un bug de leur côté, ou bien du côté d’Apple et de macOS ? En fouillant un petit peu plus, on découvre d’autres articles qui datent d’avant la sortie des Mac Apple Silicon et qui se plaignent des mauvaises performances de Docker pour macOS. Le logiciel souffre a priori de mauvaises optimisations que la transition vers les nouvelles puces d’Apple pourrait avoir accentuées.
En attendant un correctif, le plus simple semble être de passer par une distribution Linux en virtualisation par dessus macOS. Cela fait deux couches virtuelles au lieu d’une, mais les chiffres que l’on peut croiser prouvent que cela fonctionne. En utilisant Multipass, on peut obtenir un Ubuntu virtualisé avec une seule ligne de commande et très rapidement, c’est la solution finalement utilisée par notre lecteur sur son MacBook Air M1.
Multipass : Ubuntu sur les Mac M1 en moins d’une minute
Source : Merci Thomas