⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Invoquer des binaires hôte

Dans certains cas, votre extension peut avoir besoin d'invoquer une commande depuis l'hôte. Par exemple, vous pourriez vouloir invoquer la CLI de votre fournisseur cloud pour créer une nouvelle ressource, ou la CLI d'un outil que votre extension fournit, ou même un script shell que vous voulez exécuter sur l'hôte.

Vous pourriez le faire en exécutant la CLI depuis un conteneur avec le SDK d'extension. Mais cette CLI a besoin d'accéder au système de fichiers de l'hôte, ce qui n'est ni facile ni rapide si elle s'exécute dans un conteneur.

Cependant, les invocations de binaires hôte depuis l'extension sont des exécutables (comme des binaires, des scripts shell) livrés dans le cadre de votre extension et déployés sur l'hôte. Comme les extensions peuvent s'exécuter sur plusieurs plateformes, cela signifie que vous devez livrer les exécutables pour toutes les plateformes que vous voulez supporter.

Apprenez-en plus sur l'architecture des extensions.

Note

Seuls les exécutables livrés dans le cadre de l'extension peuvent être invoqués avec le SDK.

Dans cet exemple, la CLI est un script simple Hello world qui doit être invoqué avec un paramètre et retourne une chaîne.

Ajouter les exécutables à l'extension

Créez un script bash pour macOS et Linux, dans le fichier binaries/unix/hello.sh avec le contenu suivant :

#!/bin/sh
echo "Hello, $1!"

Créez un script batch pour Windows dans un autre fichier binaries/windows/hello.cmd avec le contenu suivant :

@echo off
echo "Hello, %1!"

Puis mettez à jour le Dockerfile pour copier le dossier binaries dans le système de fichiers du conteneur de l'extension et rendre les fichiers exécutables.

# Copier les binaires dans le bon dossier
COPY --chmod=0755 binaries/windows/hello.cmd /windows/hello.cmd
COPY --chmod=0755 binaries/unix/hello.sh /linux/hello.sh
COPY --chmod=0755 binaries/unix/hello.sh /darwin/hello.sh

Invoquer l'exécutable depuis l'UI

Dans votre extension, utilisez l'objet Client Docker Desktop pour invoquer le script shell fourni par l'extension avec la fonction ddClient.extension.host.cli.exec(). Dans cet exemple, le binaire retourne une chaîne comme résultat, obtenue par result?.stdout, dès que la vue d'extension est rendue.

export function App() {
  const ddClient = createDockerDesktopClient();
  const [hello, setHello] = useState("");

  useEffect(() => {
    const run = async () => {
      let binary = "hello.sh";
      if (ddClient.host.platform === 'win32') {
        binary = "hello.cmd";
      }

      const result = await ddClient.extension.host?.cli.exec(binary, ["world"]);
      setHello(result?.stdout);

    };
    run();
  }, [ddClient]);
    
  return (
    <div>
      {hello}
    </div>
  );
}
Important

Nous n'avons pas encore d'exemple pour Vue. Remplissez le formulaire et faites-nous savoir si vous souhaitez un exemple avec Vue.

Important

Nous n'avons pas encore d'exemple pour Angular. Remplissez le formulaire et faites-nous savoir si vous souhaitez un exemple avec Angular.

Important

Nous n'avons pas encore d'exemple pour Svelte. Remplissez le formulaire et faites-nous savoir si vous souhaitez un exemple avec Svelte.

Configurer le fichier de métadonnées

Les binaires hôte doivent être spécifiés dans le fichier metadata.json afin que Docker Desktop les copie sur l'hôte lors de l'installation de l'extension. Une fois l'extension désinstallée, les binaires qui ont été copiés sont également supprimés.

{
  "vm": {
    ...
  },
  "ui": {
    ...
  },
  "host": {
    "binaries": [
      {
        "darwin": [
          {
            "path": "/darwin/hello.sh"
          }
        ],
        "linux": [
          {
            "path": "/linux/hello.sh"
          }
        ],
        "windows": [
          {
            "path": "/windows/hello.cmd"
          }
        ]
      }
    ]
  }
}

Le path doit référencer le chemin du binaire à l'intérieur du conteneur.