Partager via


Utiliser des conteneurs pour créer des applications Azure Sphere

Important

Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).

Remarque

Cette rubrique explique comment utiliser Docker Desktop pour Windows pour générer des applications Azure Sphere dans un conteneur. Pour créer des applications dans un conteneur Docker sur Linux, vous pouvez utiliser le même conteneur azurespheresdk à partir du Registre des artefacts Microsoft ou mar (également appelé Microsoft Container Registry ou MCR).

Installer Docker Desktop

Vous pouvez utiliser Docker pour exécuter un conteneur Linux autonome avec le Kit de développement logiciel (SDK) Azure Sphere préinstallé. Cette image peut également être utilisée comme base pour vos propres déploiements. La balise d’image fait référence à la version du Kit de développement logiciel (SDK) qu’elle contient.

Avant de pouvoir télécharger et exécuter un conteneur Docker, vous devez installer Docker Desktop sur Windows ou Linux.

Après avoir installé Docker Desktop pour Windows, veillez à activer les fonctionnalités Windows Hyper-V et Conteneurs. Vous devrez peut-être redémarrer après l’installation.

Une fois installé, démarrez Docker Desktop à partir de windows menu Démarrer ou à partir de l’icône de raccourci ajoutée à votre bureau.

Linux est le type de conteneur par défaut pour Docker Desktop sur Windows. Azure Sphere utilise des conteneurs Linux. Pour exécuter des conteneurs Linux, vous devez vous assurer que Docker cible le démon approprié. Pour vérifier que Linux est le type de conteneur par défaut actuel, cliquez avec le bouton droit sur l’icône Docker whale dans la barre d’état système. Si vous voyez Basculer vers des conteneurs Windows, vous ciblez déjà le démon Linux. Si vous êtes sur le conteneur Windows, vous pouvez activer cette option en sélectionnant Basculer vers les conteneurs Linux dans le menu d’action lorsque vous cliquez avec le bouton droit sur l’icône de baleine Docker dans la barre d’état système. Pour plus d’informations, consultez Switch between Windows and Linux containers.

Remarque

Attendez que l’animation de l’icône baleine docker Desktop s’arrête. L’icône peut se trouver dans la zone Notifications masquée. Pointez sur l’icône pour afficher l’état docker Desktop.

Utiliser le conteneur d’environnement de génération du Kit de développement logiciel (SDK) Azure Sphere pour générer des exemples d’applications

Vous pouvez utiliser un conteneur de manière interactive en l’entrant et en émettant une commande ; Toutefois, il est plus efficace de capturer les étapes nécessaires à la création de vos applications dans un fichier que Docker peut utiliser pour générer une image personnalisée basée sur l’image Azure Sphere d’origine. Cela garantit que le processus de génération est reproductible et cohérent. Par défaut, ce fichier doit être nommé Dockerfile et se trouver dans le $PATH où la commande Docker est exécutée.

Les étapes suivantes fournissent un plan pour créer des instructions Dockerfile pour générer des exemples Azure Sphere. Vous pouvez ajuster ces étapes pour vos propres besoins.

  1. Créez un conteneur basé sur le conteneur mcr.microsoft.com/azurespheresdk.

  2. Clonez le référentiel d’exemples Azure Sphere à partir de GitHub.

  3. Créez un répertoire dans lequel stocker votre exemple lors de sa génération.

  4. Créez une variable d’environnement pour spécifier l’exemple que vous souhaitez générer.

  5. Exécutez CMake pour générer l’exemple et le placer dans le répertoire spécifié.

Créer un fichier Dockerfile pour créer des exemples

Pour créer une image Docker basée sur l’image Azure Sphere, mais avec des fonctionnalités de génération personnalisées, créez un fichier texte (sans extension de fichier) avec les instructions Docker suivantes :

FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo

RUN git clone https://github.com/Azure/azure-sphere-samples.git

FROM azsphere-samples-repo AS azsphere-sampleapp-build

RUN mkdir /build
WORKDIR /build

ENV sample=HelloWorld/HelloWorld_HighLevelApp

CMD cmake -G "Ninja" \
-DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
-DAZURE_SPHERE_TARGET_API_SET="latest-lts" \
-DCMAKE_BUILD_TYPE="Debug" \
/azure-sphere-samples/Samples/${sample} && \
ninja

Ce fichier utilise la variable d’environnement ENV pour spécifier l’exemple à générer. Définissez une nouvelle valeur pour ENV pour générer un exemple différent de HelloWorld/HelloWorld_HighLevelApp.

Pour plus d’informations sur les instructions dockerfile, consultez la discussion en ligne sur les instructions dockerfile.

Générer l’exemple d’application par défaut à l’aide du fichier Dockerfile

Il existe trois étapes nécessaires pour générer un exemple d’application à l’aide d’un fichier Dockerfile personnalisé :

  1. Générez l’image à partir du fichier Dockerfile à l’aide d’une interface de ligne de commande telle que PowerShell, l’invite de commandes Windows ou l’interpréteur de commandes Linux :

    docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
    
    

    L’option --target spécifie la partie d’une build à plusieurs étapes à utiliser. L’option --tag spécifie un nom de l’image et doit être en minuscules uniquement. Les images Docker doivent toujours utiliser des lettres minuscules uniquement. Si vous ne spécifiez pas de nom avec --tag, l’image aura un nombre à 12 chiffres qui n’est pas facile à utiliser. N’oubliez pas le point à la fin de la commande. Vous pouvez répertorier les images avec la docker images commande.

    Docker génère une image nommée azsphere-sampleapp-build basée sur le fichier nommé « Dockerfile ». Si votre fichier Dockerfile est nommé autre chose, utilisez l’option --file pour spécifier le nom.

  2. Donnez au conteneur un nom plus simple à l’aide de l’option --name . La run commande entre le conteneur et génère l’exemple spécifié par la variable d’environnement ENV . Utilisez l’interface de ligne de commande pour entrer cette commande :

    docker run --name hello_hl azsphere-sampleapp-build
    

    L’exemple d’application (HelloWorld/HelloWorld_HighLevelApp) sera généré et sera placé dans le répertoire à l’intérieur /build du conteneur. Une fois le conteneur en cours d’exécution, il se ferme et vous ramène à l’interface de ligne de commande.

    Remarque

    Cette commande génère l’application sans interaction et quitte le conteneur une fois la build terminée. Le conteneur est toujours actif une fois que vous avez quitté. Cela est dû au fait que vous n’avez pas spécifié les options ou --rm les -it options. Vous pouvez ultérieurement utiliser la docker run commande sur le conteneur sans la reconstruire, tant que Docker Desktop est en cours d’exécution.

  3. Copiez les résultats de votre build à partir de votre conteneur dans votre environnement d’ordinateur hôte. Utilisez l’interface de ligne de commande pour entrer cette commande :

    docker cp hello_hl:/build .
    

    Cette commande copie le contenu du /build répertoire à l’intérieur du conteneur hello_h1 vers le répertoire de votre ordinateur hôte à partir duquel vous émettez la commande. Le /build répertoire est spécifié en tant que répertoire de travail (WORKDIR) dans lequel l’exemple doit être compilé. Notez que vous êtes toujours en dehors du conteneur, mais que vous lui émettez des commandes à l’aide de la commande docker cp . N’oubliez pas le point à la fin de la commande.

Créer un autre exemple à l’aide du fichier Dockerfile personnalisé

Pour générer un autre exemple, par exemple, l’exemple GPIO, fournissez le chemin d’accès à l’exemple GPIO.

docker run --name gpio_hl --env sample=GPIO/GPIO_HighLevelApp azsphere-sampleapp-build

Une fois la build terminée, copiez le résultat à partir de votre conteneur dans votre environnement d’ordinateur hôte :

docker cp gpio_hl:/build .

N’oubliez pas le point à la fin de la commande.

Une fois que votre package a été copié dans votre environnement d’ordinateur hôte, vous pouvez utiliser des commandes CLI Azure Sphere à partir de Windows ou Linux pour déployer votre application. Pour plus d’informations, consultez Déployer l’application.

L’interaction de l’appareil via USB à partir d’un conteneur n’est pas prise en charge.

Discussion line-by-line des instructions Dockerfile

Chaque partie du fichier Dockerfile créé dans Créer un fichier Dockerfile pour créer des exemples est expliquée ci-dessous.

Préparer plusieurs builds

FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo

Cette ligne configure une nouvelle build, azsphere-samples-repo, basée sur le conteneur de microsoft.com/azurespheresdk d’origine.

Télécharger les exemples Azure Sphere

RUN git clone https://github.com/Azure/azure-sphere-samples.git

Cette ligne clone tous les exemples du référentiel d’exemples Azure Sphere.

Ajouter une autre build multi-phases ciblable

FROM azsphere-samples-repo AS azsphere-sampleapp-build

Cette ligne ajoute une nouvelle build basée sur la build azsphere-samples-repo .

Définir le répertoire de travail à l’intérieur du conteneur

RUN mkdir /build
WORKDIR /build

Ces lignes créent un répertoire de travail.

Créer une variable d’environnement par défaut pour spécifier un exemple

ENV sample=HelloWorld/HelloWorld_HighLevelApp

Cette ligne crée une variable d’environnement qui spécifie l’exemple à générer. Dans ce cas, il s’agit de l’exemple HelloWorld_HighLevelApp. La variable d’environnement peut être remplacée pour spécifier n’importe quel exemple de nom et de chemin d’accès.

Exécuter CMake et Ninja pour générer un package

CMD cmake -G "Ninja" \
-DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
-DAZURE_SPHERE_TARGET_API_SET="latest-lts" \
-DCMAKE_BUILD_TYPE="Debug" \
/azure-sphere-samples/Samples/${sample} && \
ninja

Cette section utilise CMake pour spécifier les paramètres utilisés lors de l’appel de Ninja pour générer le package.

Une fois la build terminée, le conteneur cesse d’être en cours d’exécution.

Conseils Docker

Ces conseils peuvent vous aider à utiliser Docker plus efficacement.

Utiliser la commande Docker Run pour explorer le conteneur de base de manière interactive

Utilisez l’interface de ligne de commande pour entrer cette commande :

docker run --rm -it mcr.microsoft.com/azurespheresdk

Dans cet exemple, mcr.microsoft.com/azurespheresdk est le nom de l’image à partir de laquelle le conteneur est créé. Notez que l’option --rm arrête le conteneur après son exécution et que l’option -it spécifie un accès interactif au conteneur.

Le conteneur Docker de l’environnement de génération du Kit de développement logiciel (SDK) Azure Sphere est fourni par le Registre des artefacts Microsoft (MAR) et est disponible pour le public.

Si le conteneur est déjà sur votre ordinateur local, il ne sera pas téléchargé à nouveau.

Le téléchargement et la configuration peuvent prendre plusieurs minutes. L’environnement de génération inclut tout ce qui est nécessaire pour générer un package à l’aide du Kit de développement logiciel (SDK) Linux Azure Sphere.

Une fois la run commande terminée, votre invite de commandes passe à un signe « # ». Vous êtes maintenant à l’intérieur d’un conteneur Docker linux. La saisie de ls affiche le répertoire Linux actuel à l’intérieur du conteneur, comme dans cette liste :

bin   cmake-3.14.5-Linux-x86_64  etc   lib    makeazsphere.sh  mnt    opt   root  sbin  sys  usr
boot  dev                        home  lib64  media            ninja  proc  run   srv   tmp  var

Tapez exit pour quitter le conteneur. Le conteneur ne sera plus disponible pour vous et vous devrez le recréer avec cette commande :

docker run --rm -it mcr.microsoft.com/azurespheresdk

Si vous n’utilisez pas l’option --rm , le conteneur ne sera pas supprimé lorsque vous quittez.

Identification du conteneur

Lorsque vous générez un nouveau conteneur, il aura un ID tel que a250ade97090 (votre ID sera différent). Pour de nombreuses commandes Docker, vous devez utiliser l’ID au lieu de l’adresse microsoft.com/azurespheresdk .

Voici une liste classique des informations de base sur les conteneurs sur votre système à l’aide de cette commande :

docker ps --all

Le résultat ressemble à ceci :

CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
a250ade97090        microsoft.com/azurespheresdk   "/bin/bash"         15 minutes ago      Up 9 seconds                            pedantic_kilby

Votre ID sera différent. Notez que Docker compose des noms aléatoires pour le propriétaire du conteneur. Notez que dans cet exemple, il n’existe qu’un seul conteneur.

Utilisation à l’intérieur du conteneur

Si vous souhaitez travailler à l’intérieur d’un conteneur sur votre ordinateur sans utiliser la commande d’exécution, utilisez la commande exec avec l’ID de conteneur et le script dans le conteneur que vous souhaitez exécuter (/bin/bash) en tapant :

docker exec -t a250ade97090 /bin/bash

Votre invite de commandes passe à un signe « # ». Vous êtes maintenant dans un conteneur Docker Linux. La saisie de ls affiche le répertoire Linux actuel à l’intérieur du conteneur :

bin   cmake-3.14.5-Linux-x86_64  etc   lib    makeazsphere.sh  mnt    opt   root  sbin  sys  usr
boot  dev                        home  lib64  media            ninja  proc  run   srv   tmp  var

Pour quitter le conteneur, tapez la exit commande.

Limitations du conteneur de build du Kit de développement logiciel (SDK) Azure Sphere

Le conteneur de build du Kit de développement logiciel (SDK) Azure Sphere est conçu pour générer uniquement des packages Azure Sphere. Il n’est pas conçu pour exécuter des commandes Azure Sphere CLI, récupérer ou charger des appareils ou déboguer. Le conteneur n’a pas accès aux fonctions USB.

Limitations du conteneur Docker Linux

Un conteneur Docker Linux n’est pas identique à une installation complète de Linux. Par exemple, vous ne pouvez pas exécuter d’applications GUI Linux dans un conteneur Docker Linux.

Utiliser des conteneurs de build à plusieurs étapes pour réduire les dépendances

La fonctionnalité de génération multi-phase Docker vous permet d’utiliser plusieurs instructions FROM dans votre fichier Dockerfile pour réduire les dépendances. Chaque instruction FROM peut utiliser une base différente, et chacune d’entre elles commence une nouvelle étape de la build.

Pour plus d’informations sur les builds à plusieurs étapes Docker, consultez Utiliser des builds multi-phases.

Les builds à plusieurs étapes sont recommandées par Docker comme meilleure pratique. Pour plus d’informations sur les meilleures pratiques Docker, consultez le Guide d’introduction des meilleures pratiques dockerfile.

Ajouter un nom explicite à votre étape avec l’argument AS

Par défaut, les étapes ne sont pas nommées, mais ont un numéro d’ID. Vous pouvez rendre votre fichier Dockerfile plus lisible en ajoutant un nom explicite à l’étape en ajoutant AS et un nom. Par exemple :

FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo

Pour plus d’informations sur l’utilisation de l’argument AS dans les commandes à plusieurs étapes, consultez Nommer vos phases de génération.

Créer la cible avec un nom explicite comme meilleure pratique

Lorsque vous générez une cible, vous pouvez lui donner un nom explicite à l’aide de l’option --tag . Les noms explicites sont utiles. Par exemple :

docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .

Pour plus d’informations sur l’utilisation de noms avec la commande de build Docker, consultez la référence de build Docker.