Partager via


Utiliser des conteneurs pour créer des applications Azure Sphere

Note

Cette rubrique explique comment utiliser Docker Desktop pour Windows pour créer 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 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 du menu Démarrer de Windows ou 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 correct. Pour vérifier que Linux est le type actuel de conteneur par défaut, 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 le désactiver en sélectionnant Basculer vers les conteneurs Linux dans le menu d’action lorsque vous cliquez avec le bouton droit sur l’icône Docker whale dans la barre d’état système. Pour plus d’informations, consultez Basculer entre des conteneurs Windows et Linux.

Note

Attendez que l’animation de l’icône de 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’status 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 créer 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 la création d’instructions dockerfile pour générer des exemples Azure Sphere. Vous pouvez ajuster ces étapes en fonction de 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 générer des exemples

Pour générer une image Docker basée sur l’image Azure Sphere, mais avec une fonctionnalité de génération personnalisée, créez un fichier texte (sans extension de fichier) en suivant 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 afin de générer un exemple différent de HelloWorld/HelloWorld_HighLevelApp.

Pour plus d’informations sur les instructions du fichier Dockerfile, consultez Discussion ligne par ligne sur les instructions dockerfile.

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

Trois étapes sont nécessaires pour créer 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 multiphase à 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 lister 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 dans 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 placé dans le /build répertoire à l’intérieur du conteneur. Une fois l’exécution du conteneur terminée, il se ferme et vous ramène à l’interface de ligne de commande.

    Note

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

  3. Copiez les résultats de votre build de l’intérieur de votre conteneur vers votre environnement de machine hôte. Utilisez l’interface de ligne de commande pour entrer cette commande :

    docker cp hello_hl:/build .
    

    Cette commande copie le contenu du répertoire à l’intérieur /build du conteneur hello_h1 dans 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 de l’intérieur de votre conteneur dans votre environnement de machine 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 de machine hôte, vous pouvez utiliser les commandes Azure CLI à 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.

Présentation ligne par ligne des instructions dockerfile

Chaque partie du fichier Dockerfile créée dans Créer un fichier Dockerfile pour générer 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 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 multiphase 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 l’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 créer 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 de s’exécuter.

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 qu’elle spécifie l’accès -it interactif au conteneur.

Le conteneur Docker de l’environnement de build du SDK Azure Sphere est fourni par le Registre des artefacts Microsoft (MAR) et est disponible pour le public.

Si le conteneur se trouve déjà sur votre ordinateur local, il n’est pas téléchargé à nouveau.

Le téléchargement et l’installation peuvent prendre plusieurs minutes. L’environnement de build 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 devient 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 et vous devrez le créer à nouveau avec cette commande :

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

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

Identification du conteneur

Lorsque vous générez un nouveau conteneur, il a 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 d’informations de base sur les conteneurs de 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’y a 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 run , 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 devient 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 des conteneurs de build du SDK Azure Sphere

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

Limitations des conteneurs Docker Linux

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

Utiliser des conteneurs de build multiphases pour réduire les dépendances

La fonctionnalité de génération multiphase 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’elles commence une nouvelle étape de la génération.

Pour plus d’informations sur les builds multiphases Docker, consultez Utiliser des builds multiphases.

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

Ajouter un nom explicite à votre phase avec l’argument AS

Par défaut, les étapes ne sont pas nommées, mais ont un numéro d’identification. Vous pouvez rendre votre fichier Dockerfile plus lisible en ajoutant un nom explicite à la phase 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 attribuer 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.