Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
technique:docker:general:quemu_cross_running [2021/01/22 13:24] – [QEMU dans Docker : le meilleur des 2 mondes] gblondtechnique:docker:general:quemu_cross_running [2021/10/16 18:19] (Version actuelle) qduchemi
Ligne 1: Ligne 1:
 {{indexmenu_n>70}} {{indexmenu_n>70}}
  
-# QEMU : Utiliser des conteneurs avec une architecture a priori incompatible avec l'hôte+# QEMU : utiliser une architecture incompatible avec l'hôte 
 + 
 +<bootnote warning> 
 +Cet article est très spécifique, vous n'avez probablement pas besoin de le lire si vous voulez découvrir Docker! 
 +</bootnote> 
 Saviez-vous que l'utilisation conjointe de Docker et QEMU permet d'utiliser par exemple un conteneur ARMv7 sur un hôte x86-AMD64 de manière (presque) totalement transparente ? Non vous ne rêvez pas, c'est même très simple à mettre en place ! Saviez-vous que l'utilisation conjointe de Docker et QEMU permet d'utiliser par exemple un conteneur ARMv7 sur un hôte x86-AMD64 de manière (presque) totalement transparente ? Non vous ne rêvez pas, c'est même très simple à mettre en place !
  
Ligne 16: Ligne 21:
 <bootnote question>Mais pourquoi aurait-on besoin de mélanger ces architectures ?</bootnote> <bootnote question>Mais pourquoi aurait-on besoin de mélanger ces architectures ?</bootnote>
  
-Il y a plusieurs cas d’utilisation où il est utile émuler un microprocesseur différent de celui de la machine hôte, notamment durant des phases de développement ou de test d’un programme. Imaginez que vous développez un gros logiciel compilé pour des Raspberry Pi, architecture ARMv7, mais que votre poste de travail est équipé d’un microprocesseur x86-AMD64. Il y a alors 4 manières de compiler ce programme :+Il y a plusieurs cas d’utilisation où il est utile d’émuler un microprocesseur différent de celui de la machine hôte, notamment durant des phases de développement ou de test d’un programme. Imaginez que vous développez un gros logiciel compilé pour des Raspberry Pi, architecture ARMv7, mais que votre poste de travail est équipé d’un microprocesseur x86-AMD64. Il y a alors 4 manières de compiler ce programme :
  
   * Compiler depuis une Raspberry Pi : cette solution fonctionne pour des petits projets, mais montre rapidement ses limites en matières de ressources matérielles disponibles (surtout la RAM), et est en général la plus lente des 4 solutions ;   * Compiler depuis une Raspberry Pi : cette solution fonctionne pour des petits projets, mais montre rapidement ses limites en matières de ressources matérielles disponibles (surtout la RAM), et est en général la plus lente des 4 solutions ;
Ligne 71: Ligne 76:
 ### Exécuter un conteneur d’une architecture incompatible ### Exécuter un conteneur d’une architecture incompatible
  
-Comme indiqué dans l'introduction, ici rien ne change, on peut utiliser docker normalement. Enfin presque, car docker sélectionnera toujours l'architecture hôte pour une image disponible avec plusieurs architecture. Il n'y a malheureusement pas à ce jour de solution pour forcer docker à utiliser une architecture spécifiqueCette fonctionnalité existe pourtant dans d'autres outilscomme [[https://github.com/containers/skopeo skopeo]].+Comme indiqué dans l'introduction, ici rien ne change, on peut utiliser docker normalement. Enfin presque, car docker sélectionnera toujours l'architecture hôte pour une image disponible avec plusieurs architecture. Pour sélectionner l'architecture voulue, il faut utiliser l'option ''--platform=linux/arm64''. À ce jour (docker v19.03.13)cette option n'est disponible que en [[https://docs.docker.com/engine/reference/commandline/dockerd/#description mode experimental]].
  
 Voici un exemple d'exécution : Voici un exemple d'exécution :
Ligne 146: Ligne 151:
 Linux 211b99ac36e4 5.8.0-38-generic #43-Ubuntu SMP Tue Jan 12 12:42:13 UTC 2021 aarch64 GNU/Linux Linux 211b99ac36e4 5.8.0-38-generic #43-Ubuntu SMP Tue Jan 12 12:42:13 UTC 2021 aarch64 GNU/Linux
 </code> </code>
 +
 +De même, il est possible d'utiliser l'option ''--platform=linux/arm64'' dans l'instruction ''FROM'' si docker est en mode experimental.
  
 <bootnote important> <bootnote important>
  • technique/docker/general/quemu_cross_running.1611318255.txt.gz
  • de gblond