Docker-OSX permet de virtualiser macOS dans Docker

Nicolas Furno |

Docker est un outil de virtualisation très utilisé dans le monde du web et il sert avant tout à créer des serveurs virtuels dédiés à une tâche précise, des « containers » qui s’assemblent pour créer des services complexes. Mais c’est à la base un outil de virtualisation comme un autre, ce qui veut dire que l’on peut virtualiser n’importe quel système d’exploitation Unix, dont macOS. Avec le projet Docker-OSX disponible sur GitHub depuis quelques semaines, c’est même assez facile à obtenir.

Une instance virtuelle de macOS en fonctionnement sur un ordinateur sous Arch Linux.

Avant toute chose, l’ordinateur hôte sur lequel Docker est installé doit être configuré pour gérer la virtualisation matérielle KVM. Il s’agit en général d’un ordinateur sous Linux, même si cela fonctionne aussi avec Windows et WSL, tant qu’à aimer se compliquer la vie. Notez en revanche qu’il n’est pas possible de virtualiser macOS avec Docker-OSX sur macOS, une limite qui pourrait être levée dans le futur.

Une fois que l’hôte est correctement configuré, Docker-OSX fonctionne comme n’importe quel autre projet Docker. Vous pouvez utiliser l’image proposée sur le Docker Hub et vous obtiendrez à la fin une machine virtuelle avec la dernière version de macOS Catalina installée sur un volume de 200 Go. Le fichier Dockerfile contient toutes les instructions qui seront exécutées à l’installation, y compris pour le téléchargement de macOS. Par défaut, l’image docker sera vidée à chaque exécution, mais vous pouvez créer une installation persistante de macOS en suivant ces instructions.

Au-delà de la démonstration technique, Docker-OSX est une solution intéressante si vous utilisez déjà Docker et que vous ne voulez pas multiplier les solutions de virtualisation. Il reste encore quelques bugs à gérer, notamment si vous comptez l’utiliser pour faire tourner Xcode et développer des apps dans l’écosystème d’Apple. Par exemple, un iPhone relié en USB ne sera pas reconnu correctement par Xcode.

Docker-OSX est un projet open-source et gratuit.

avatar pookitoo | 

Et une app iPad docker pour virtualiser Mac OS ? 😅

avatar Maxmad68 | 

@pookitoo

Regarde UTM (source sur GitHub), mais ne t’attends pas à bcp de fluidité (j’ai mis des heures pour installer Windows et au final c’était inutilisable)

avatar koko256 | 

"il n’est pas possible de virtualiser macOS avec Docker-OSX sur un Mac". Même si l'on met Linux sur ledit Mac ? Il me semble que ce serait la seule solution légale pour faire tourner ce soft.

avatar Nicolas Furno | 

@koko256

Si, aucun souci dans ce cas. Je vais corriger.

avatar koko256 | 

Ceci dit, on voit une fenêtre qemu sur la capture d'écran. Du coup c'est du MacOS sur du qemu dans docker ?

avatar dodomu | 

@koko256

Je pense oui, car pour moi (et d’autres 😉) la phrase « Mais c’est à la base un outil de virtualisation comme un autre » est fausse, docker ne fait justement pas de virtualisation, il exploite différentes technologies du système hôte pour isoler des applications dans des conteneurs. Cette approche est plus légère que de la virtualisation.
Pour plus de détails voir https://fr.wikipedia.org/wiki/Docker_(logiciel) 🙂

avatar Sindanarie | 

Alors c’est possible de virtualiser MacOs sur un Synology qui a docker ?

avatar occam | 

@Sindanárië

En plus des excellentes réponses données plus loin par @messager9, qui éclairent l’essentiel, il faut prendre en compte la dotation matérielle des Synology : sur les DS, tout au plus une CPU de la classe Celeron et 2 à 8 GB RAM maximum. Pas vraiment la joie pour dockeriser macOS, même si les autres conditions étaient réunies.

avatar messager9 | 

oui l'article simplifie un peu trop et donne l'impression de confondre virtualisation et conteneurisation. Là on a qemu (émulation + virtualisation) dans docker (conteneurisation) on dirait; pour ressembler à qemu-kvm. KVM (Kernel-based Virtual Machine), donc avec support réel du hardware sur lequel tourne qemu-kvm (via les passthrough). Donc si pas de kvm alors très mauvaises performances, absence de Metal par exemple pour osx. Pour les synology, la question revient sans cesse; c'est non pour l'instant et ça n'est vraiment pas fait pour.

avatar RonDex | 

@messager9

Merci pour ces précisions. 👍

avatar messager9 | 

pour ceux qui se posent la question, pourquoi le KVM natif Apple de Mac OS X n'est-il pas supporté par Qemu ? Parceque ça bloque quelque part depuis 2016, je ne sais pas trop où mais des tas de spécialistes s'y sont cassés les reins (peut être une protection juridique également…). Ça permettrait pas mal de choses en effet.

avatar unixorn | 

"Docker est un outil de virtualisation très utilisé dans le monde du web et il sert avant tout à créer des serveurs virtuels dédiés à une tâche précise, des « containers » qui s’assemblent pour créer des services complexes. Mais c’est à la base un outil de virtualisation comme un autre, ce qui veut dire que l’on peut virtualiser n’importe quel système d’exploitation Unix, dont macOS. Avec le projet Docker-OSX disponible sur GitHub depuis quelques semaines, c’est même assez facile à obtenir."

J'ai rarement lu autant de conneries dans un seul paragraphe. Docker n'est pas un outil de virtualisation. C'est d'ailleurs pour ça qu'il se base sur VirtualBox, Hyper-V ou WSL 2 (qui utilise Hyper-V) pour fonctionner sur macOS ou Windows, mais n'a pas besoin d'un logiciel de virtualisation sur Linux, puisqu'il utilise alors directement les fonctions du noyau.

avatar Nicolas Furno | 

@unixorn

C'est de la virtualisation, ce n'est pas parce qu'elle fonctionne à un bas niveau que ça change quoi que ce soit au constat. L'idée est de faire tourner un système d'exploitation virtuel, certes souvent minimal, sur un autre système d'exploitation. En quoi est-ce que ça ne serait pas de la virtualisation ?

Docker fait tout pour troubler les lignes en parlant systématiquement de conteneurs et non de machines virtuelles, mais c'est le même principe.

avatar hirtrey | 

@nicolasf

Docker ne crée pas de machine virtuel dans le sens fusion ou //. Dans une VM, un application fait appel à l’OS installé dans la VM, puis sera ensuite géré par l’hyperviseur qui simule une machine physique.

Docker à besoin de l’OS hôte ( il existe des images docker de 2 Mo ) car ne contient pas d’OS. Le container fait directement appel à l’OS.

Au final tu te dis que c’est pareil, mais c’est vraiment deux technologies différentes.

avatar Nicolas Furno | 

@hirtrey

Je n'ai jamais écrit que c'était la même technologie que Fusion, Parallels ou encore VirtualBox. Je dis que c'est de la virtualisation, pas plus…

avatar hirtrey | 

@nicolasf

C’est pour cela que l’on ne parle jamais de virtualization mais de conteneurisation. C’est deux technologies et approche différentes.

avatar fornorst | 

@nicolasf

En l’occurrence ça ne l’est pas ;) c’est vraiment de la « containerisation » dans le sens où c’est bien l’OS du hôte qui est mis à partie ! Docker ce n’est guère plus que l’utilisation des cgroup du noyau Linux avec un bout de gestion du cache des layers via des file system qui le permettent. On peut très bien faire des applications containérisées avec cgroup sans docker d’ailleurs ;)

avatar oomu | 

@Nicolas Furno

les puristes de l'industrie parlent de conteneur et donc conteneurisation. Docker est la solution la plus populaire de conteneurisation et qui fournit divers facilités.

Après, dans un soucis de vulgarisation pour un public qui ne va jamais mettre en placer un ordonnanceur kubernetes, je suppose que ce n'est pas grave de passer ce détail pour parler du but final de faire tourner un système dans un système.

Mais si vous voulez insister sur la technique, NON, la conceteurisation n'est pas de la virtualisation.

-
... Maintenant parlons du cas des LXC (Linux Containers) dans un hyperviseur proxmox :)

avatar Nicolas Furno | 

@oomu

Je sais bien tout cela, mais je ne suis pas un puriste et ça reste fondamentalement une virtualisation d'un système sur un autre dans tous les cas.

Et puis dans la catégorie des mots bien moches, la conteneurisation se pose là. Bref, pour un article dédié au grand public et non à des administrateurs réseau, parler de virtualisation convient très bien selon moi.

avatar oomu | 

Oui bien sur, je suppose qu'on peut pardonner l'abus sur MacG. ça serait plus génant sur LinuxFr ou dans une documentation Redhat.

Mais sur mon lieu de travail, si je dis virtualisation pour du docker, y a un ingénieur qui me gifle direct :)
Je comprends l'intérêt de commenter l'article pour apporter de la précision technique, pour ceux que ça passionne.

Dans le genre, j'adore l'article LXC de wikipedia, première ligne, déjà les pieds dans le plat.

---
pour le plaisir de papoter : "conteneurisation" ne me choque pas. c'est un néologisme, oui, mais c'est le mot "conteneur" qui existe en français, et donc on secoue notre propre langue entre nous, ça me va :). et puis qui n'a jamais Rotater un schéma aussi ? :)

avatar bompi | 

Les conteneurs ne sont pas des VMs : ils partagent tous le même noyau, celui de leur système hôte, et ne contiennent pas de système complet.

On peut voir le conteneur comme un prolongement (sophistiqué et abouti) de chroot : l'isolement d'une application qui, idéalement, ne vient qu'avec le strict nécessaire pour fonctionner.
L'ennui est qu'une certaine logique du (mauvais) développement amène à créer des images de conteneur bien trop lourdes : on met le nécessaire mais on dépasse largement le suffisant.

Je me demande qu'elles peuvent être les performances d'une image Docker QEMU+OSX...

Avec l'annonce possible du passage à ARM, on ne pourra plus si simplement utiliser Docker et ses conteneurs sur un Mac. Ou alors on va avoir des images x86 et des images ARM.

avatar fornorst | 

@bompi

Docker tourne déjà dans une VM sur macOS étant donné que le kernel de macOS ne supporte ni les chroot ni les cgroup. Ça ne va donc pas changer beaucoup de choses pour faire tourner docker sur mac.
Par contre pour faire tourner macOS dans docker (sujet de cet article) ça peut changer des choses.

avatar mp_ | 

J’ai un peu de mal à voir l’intérêt, Dicker n’est pas spécialement fait pour faire tourner une UI.

C’est un système de conteneurisation, prévu pour faire tourner une application par conteneur, pas une VM qui fait tourner un système entier.

avatar hirtrey | 

@mp_

C’est pour l’exploit, il n’y a aucun intérêt.

avatar oomu | 

spawner des macos qui font tourner llvm et les utilitaires xcode ?

avatar messager9 | 

oui exact avec les mac ARM ça en sera terminé de beaucoup de projets de virtualisation (basé sur processeur Intel en tout cas). C'est là que Qemu va prendre du poids probablement en proposant une émulation Intel sur ARM, tout comme il propose aujourd'hui une émulation PowerPC très performante sur Intel (ce que faisait en partie le regretté Rosetta à l'époque). Avec cette émulation PPC on peut faire tourner MacOS 9 sur Mac OS 10.15 avec des performances inédites sur un G4 de l'époque.

avatar Artefact3000 | 

Bon, peut-être que les développeurs de LibreOffice, majoritairement sur Linux, pourront mieux améliorer leur suite pour MacOS.

avatar Bozzo (non vérifié) | 

Et ça fonctionnerait sur un raspberry pi4 ?

avatar aspartame | 

puisqu'il y a une référence à un ancienne techno de virtu macOS ( on sent les vieux de la vielle ), j'ai une questions pour ceux qui sont - aussi - sous windows (non ,sérieux ?? il n'y en a pas ??) :

la machine virtuelle DOS sous windows NT/2000/XP/VISTA/7/10 c'est un émulateur ou un virtualiseur ?

pareil pour la machine virtuelle Interix sous NT ( là je m'adresse aux très vieux ).

et une troisième question pour les plus jeunes : si j'ai bien compris l'implémentation de docker sous macOS utilise hyperKit , donc un hyperviseur maison ... donc on n'est pas conteneurisé puisqu'on ne repose pas sur le noyau sous-jacent mais sur un hyperviseur ...

allez-y , éclairez moi un peu

avatar pascol | 

C’est inception!

Est que dans le conteneur qui fait tourner un qemu pour virtualiser macOS, on peut mettre un virtual box pour virtualiser un Windows 10 qui aurait un VMWare player pour faire tourner un Linux?

avatar pakal | 

il existe un moyen de faire de la virtualisation par qemu-kvm donc d'avoir de meilleure performance (en théorie).

avatar Gulivert | 

Personnellement j’utilise directement qemu, pourquoi se compliquer avec une couche supplémentaire qui fait tourner un linux dans docker qui lui utilise qemu pour virtualiser MacOS.
Pour les intéressés voici une manière simple de mettre en place qemu avec OSx https://github.com/foxlet/macOS-Simple-KVM

CONNEXION UTILISATEUR