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.
Créez un conteneur basé sur le conteneur mcr.microsoft.com/azurespheresdk.
Clonez le référentiel d’exemples Azure Sphere à partir de GitHub.
Créez un répertoire dans lequel stocker votre exemple lors de sa génération.
Créez une variable d’environnement pour spécifier l’exemple que vous souhaitez générer.
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é :
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 ladocker 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.Donnez au conteneur un nom plus simple à l’aide de l’option
--name
. Larun
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 ladocker run
commande sur le conteneur sans la reconstruire, tant que Docker Desktop est en cours d’exécution.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.