Créez, partagez et exécutez des applications WebAssembly avec Docker

Projet sandbox WasmEdge  CNCF, machine virtuelle Wasm optimisée pour la périphérie

Cet article est traduit du blog Docker, rédigé par  TYLER CHARBONEAU , nous faisons tous référence à Docker dans cet article. Lien d'origine : https://www.docker.com/blog/build-share-run-webassembly-apps-docker/

Il ne fait aucun doute que WebAssembly (Wasm) a récemment pris de l'ampleur dans le cercle technologique. Même si cela peut sembler une mode passagère pour certains, nous pensons que Wasm joue un rôle clé dans le développement actuel de la conteneurisation. Docker et Wasm peuvent être des technologies complémentaires.

Dans le passé, nous avons exploré  comment Docker pouvait exécuter avec succès des modules Wasm ainsi que des conteneurs Linux ou Windows. Près de cinq mois plus tard, nous avons   fait un autre grand pas en avant avec le Docker+Wasm Technology Preview . Plus que jamais, les développeurs exigent des performances, une portabilité et une isolation d'exécution supérieures.

Chris Crone, directeur de l'ingénierie de Docker, et Michael Yuan, PDG et fondateur de Second State , ont répondu à ces questions lors du CNCF Cloud Native Wasm Day 2022 . Voici la vidéo complète de la présentation de la conférence, mais gardez un œil sur notre démontage détaillé plus tard :

Les développeurs peuvent développer en douceur à l'aide de Docker et Wasm sans avoir à apprendre de nouveaux processus. La commande populaire Docker CLI peut résoudre ce problème. Grâce à son partenariat avec  WasmEdge  , Docker peut même gérer le runtime WebAssembly. Nous expliquerons pourquoi nous abordons ce nouveau projet et les mécanismes techniques qui le rendent possible.

https://github.com/WasmEdge/WasmEdge​github.com/WasmEdge/WasmEdge

Pourquoi WebAssembly + Docker combinés ?

La façon dont les charges de travail et le code sont séparés a un impact significatif sur la rapidité avec laquelle nous fournissons les logiciels aux utilisateurs. Chris le souligne en expliquant la valeur des développeurs :

  • Réutilisez facilement les composants et les interfaces définies dans tous les projets, ce qui accélère la rentabilisation
  • Maximisez les ressources informatiques partagées tout en maintenant des limites sécurisées et solides entre les charges de travail, réduisant ainsi les coûts de livraison des applications
  • Grâce à des mécanismes de packaging pratiques tels que les images de conteneurs, les applications sont livrées de manière transparente aux utilisateurs en quelques secondes, ce qui permet aux utilisateurs de voir la valeur plus rapidement.

Nous savons que l'isolation de la charge de travail joue un rôle dans ces domaines, mais il existe de nombreuses façons d'y parvenir, telles que le portier d'isolation (air gapping), la virtualisation matérielle, la virtualisation de pile (Wasm ou JVM), la conteneurisation, etc. Puisque chacune présente des avantages et des inconvénients uniques, choisir la meilleure solution peut s’avérer délicat.

Trouver les bons outils est également très difficile. Le panorama des outils CNCF est à lui seul plein de variété, et même si nous apprécions l'existence de ces outils, pour de nombreux développeurs, la variété peut être écrasante.

Chris croit aux outils spécialisés pour la tâche à accomplir. Il est également de notre responsabilité chez Docker de guider ces décisions en matière d'outillage. Cela s'appuie sur notre mission continue d'aider les développeurs à créer, partager et exécuter leurs applications le plus rapidement possible.

C'est au tour de WasmEdge et Michael Yuan.

Des opportunités passionnantes pour Docker et WasmEdge

Michael a montré qu'il existe un certain chevauchement entre les cas d'utilisation des conteneurs et de WebAssembly. Par exemple, les développeurs des deux camps voudront peut-être publier des applications de microservices. Wasm permet des temps de démarrage plus rapides et une sécurité au niveau du code, ce qui est avantageux dans de nombreux scénarios.

Cependant, en raison des limitations des threads, du garbage collection et du packaging binaire, WebAssembly ne convient pas à tous les cas d'utilisation. Actuellement, des outils supplémentaires sont nécessaires pour exécuter des applications utilisant Wasm.

WasmEdge en action : interface TensorFlow

Michael a ensuite exécuté une démo d'une application d'apprentissage automatique TensorFlow pour montrer ce que WasmEdge peut faire. Cette application ne fonctionnera pas avec d'autres environnements d'exécution compatibles WASI :

Les points suivants rendent cette démo possible :

  • Rust : Un langage de programmation sûr et rapide avec un support citoyen de premier ordre pour les cibles compilées Wasm.
  • Tokio : un runtime asynchrone populaire qui gère plusieurs requêtes HTTP parallèles sans multithreading.
  • TensorFlow pour WasmEdge : Un plugin compatible avec la spécification WASI-NN. En plus de Tensorflow, WasmEdge prend également en charge PyTorch et OpenVINO.

Remarque :  la prise en charge de Tokio et TensorFlow sont des fonctionnalités de WasmEdge, les autres environnements d'exécution compatibles WASI ne sont actuellement pas pris en charge.

À l'aide des commandes de Rust  cargo build , nous pouvons  wasm32-wasi compiler des programmes en modules Wasm en utilisant la plateforme cible. Le WasmEdge Runtime peut exécuter les fichiers .wasm générés. Une fois l'application en cours d'exécution, nous pouvons effectuer des requêtes HTTP pour exécuter des tâches de reconnaissance d'images vraiment intéressantes.

Cet exemple montre WasmEdge comme un environnement d'exécution compatible WASI. Selon les responsables de WasmEdge , « WasmEdge est un environnement d'exécution WebAssembly léger, hautes performances et évolutif pour les applications cloud natives, périphériques et décentralisées. Il prend en charge les applications sans serveur, les fonctions intégrées, les microservices, les contrats intelligents et les appareils IoT. »

Rendre Wasm disponible avec Docker

Docker possède deux propriétés étonnantes. Premièrement, Docker et les conteneurs peuvent fonctionner sur n’importe quelle machine et n’importe où dans la production. Deuxièmement, Docker facilite la création, le partage et la réutilisation des composants de n'importe quel projet. Les images de conteneurs et autres artefacts OCI sont faciles à utiliser (et à partager). L'isolement est la valeur par défaut. Des millions de développeurs connaissent également très bien de nombreux workflows Docker, par exemple  docker compose up.

Chris décrit comment la standardisation et un écosystème ouvert rendent les outils Docker et conteneurs disponibles partout. La spécification OCI est ici cruciale, nous permettant de créer de nouvelles solutions qui fonctionnent pour presque tout le monde et pour toutes les technologies prises en charge comme Wasm.

D'un autre côté, la mise en place d'un environnement de développement Wasm multiplateforme est délicate. Vous devez également apprendre de nouveaux outils et flux de travail, ce qui rend la productivité exaspérante et entravante. Nous croyons qu'il est important d'aider les développeurs à surmonter ces défis et nous sommes ravis de tirer parti de notre plateforme pour rendre Wasm encore plus facile à utiliser.

Démo Docker+WasmEdge

Comment le support Wasm fonctionne-t-il dans la pratique ? Chris a démarré une démo en utilisant l'aperçu de Docker Desktop avec la prise en charge de WASI. Il crée un fichier Docker Compose contenant trois services :

Le serveur Rust fonctionne comme un module Wasm, tandis que les serveurs NGINX et MariaDB s'exécutent dans des conteneurs Linux. Chris  Dockerfile a construit ce serveur Rust  Dockerfile avec une cible compilée à partir de sa plateforme locale  wasm32-wasi . Il exécute également le compilateur AOT propriétaire de WasmEdge pour optimiser les modules Wasm intégrés. Cependant, cette étape est facultative et les modules optimisés nécessitent le Runtime WasmEdge.

Je laisse les détails à Chris pour l'instant (voir  la démo à 19:43 dans la vidéo  ). Cependant, sachez que vous pouvez exécuter un build Compose et obtenir une  wasi/wasm32 image de plateforme. Run  docker compose up démarre votre application, avec laquelle vous pouvez ensuite interagir via votre navigateur Web. C'est un moyen d'exécuter des conteneurs et Wasm côte à côte.

Dans la CLI Docker, vous verrez que le microservice Wasm fait moins de 2 Mo. Il comprend un serveur HTTP hautes performances et un client de base de données MySQL. Les serveurs NGINX et MariaDB font respectivement 10 Mo et 120 Mo. Ou jetez également un œil, vos microservices Rust feront des dizaines de Mo lorsqu'ils seront construits sur un binaire Linux et exécutés dans un conteneur Linux. Cela met grandement en évidence l’avantage de légèreté des images Wasm.

Étant donné que la sortie est une image OCI, vous pouvez la stocker ou la partager à l'aide d'un registre compatible OCI comme Docker Hub sans avoir à apprendre de nouveaux flux de travail complexes. Alors que Chris et Michael se concentraient sur WasmEdge, Docker devrait prendre en charge n'importe quel moteur d'exécution WASI.

Cette approche est interopérable avec les conteneurs et bénéficie d'une prise en charge précoce dans Docker Desktop. Bien que Wasm puisse sembler inconnu au départ, l'intégration avec l'écosystème Docker facilite considérablement la courbe d'apprentissage.

L'avenir de Docker + Wasm

Comme Chris l'a mentionné, nous travaillons à ce que Docker et Wasm fonctionnent bien ensemble. Notre récent aperçu de la technologie Docker+Wasm a constitué une étape majeure vers une interopérabilité accrue. Cependant, nous aimerions également explorer davantage comment les outils Docker peuvent améliorer l'expérience des développeurs qui aiment Wasm, quels que soient leurs objectifs.

Docker souhaite rejoindre la communauté Wasm pour mieux comprendre comment les développeurs comme vous créent des applications WebAssembly. Nous attachons une grande importance à vos scénarios d’application et à vos défis. En partageant notre expérience de l'écosystème des conteneurs avec la communauté, nous espérons accélérer le développement de Wasm et vous aider à aborder votre prochain grand projet.

Commencez et apprenez-en davantage

Vous souhaitez tester Docker et Wasm ? Consultez  la page d'accueil GitHub de Chris  pour une version spéciale compatible Wasm de Docker Desktop, un dépôt de démonstration et bien plus encore. Alors que nous continuons à ajouter la prise en charge de Docker+Wasm, nous sommes vraiment impatients d'entendre vos commentaires !

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42376823/article/details/128472131
conseillé
Classement