Verwenden von Containern zum Erstellen von Azure Sphere-Apps
Wichtig
Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.
Hinweis
In diesem Thema wird beschrieben, wie Sie Docker Desktop für Windows verwenden, um Azure Sphere-Anwendungen in einem Container zu erstellen. Um Apps in einem Docker-Container unter Linux zu erstellen, können Sie den gleichen Azurespheresdk-Container aus dem Microsoft-Artefaktregistrierung oder MAR (auch bekannt als Microsoft Container Registry oder MCR) verwenden.
Installation von Docker Desktop
Sie können Docker verwenden, um einen eigenständigen Linux-Container mit vorinstalliertem Azure Sphere SDK auszuführen. Dieses Image kann auch als Basis für Ihre eigenen Bereitstellungen verwendet werden. Das Imagetag bezieht sich auf die Version des darin enthaltenen SDK.
Bevor Sie einen Docker-Container herunterladen und ausführen können, müssen Sie den Docker-Desktop unter Windows oder Linux installieren.
Nachdem Sie Docker Desktop für Windows installiert haben, stellen Sie sicher, dass Sie Hyper-V- und Container-Windows-Features aktivieren. Möglicherweise müssen Sie nach der Installation neu starten.
Starten Sie nach der Installation Docker Desktop aus dem Windows-Menü oder aus dem Verknüpfungssymbol, das Ihrem Desktop hinzugefügt wurde.
Linux ist der Standardcontainertyp für Docker Desktop unter Windows. Azure Sphere verwendet Linux-Container. Beim Ausführen von Linux-Containern müssen Sie darauf achten, dass Docker den richtigen Daemon anzielt. Um zu überprüfen, ob Linux der aktuelle Standardcontainertyp ist, klicken Sie mit der rechten Maustaste auf das Docker-Walsymbol in der Taskleiste. Wenn "Zu Windows-Container wechseln" angezeigt wird, sind Sie bereits auf den Linux-Daemon ausgerichtet. Wenn Sie sich im Windows-Container befinden, können Sie dies umschalten, indem Sie im Aktionsmenü auf Linux-Container wechseln, wenn Sie im Taskleiste mit der rechten Maustaste auf das Docker-Walsymbol klicken. Weitere Informationen finden Sie unter Switch between Windows and Linux containers (Umschalten zwischen Windows- und Linux-Containern).
Hinweis
Warten Sie, bis die Docker Desktop-Walsymbolanimation beendet wird. Das Symbol befindet sich möglicherweise im ausgeblendeten Benachrichtigungsbereich. Zeigen Sie mit der Maus auf das Symbol, um den Docker Desktop-Status anzuzeigen.
Verwenden des Azure Sphere SDK-Buildumgebungscontainers zum Erstellen von Beispiel-Apps
Sie können einen Container interaktiv verwenden, indem Sie ihn eingeben und befehle ausgeben; Es ist jedoch effizienter, die schritte zu erfassen, die zum Erstellen Ihrer Anwendungen in einer Datei erforderlich sind, die Docker verwenden kann, um ein benutzerdefiniertes Image basierend auf dem ursprünglichen Azure Sphere-Image zu erstellen. Dadurch wird sichergestellt, dass der Buildprozess wiederholbar und konsistent ist. Standardmäßig muss diese Datei "Dockerfile" genannt werden und sich in der $PATH befinden, in der der Docker-Befehl ausgeführt wird.
Die folgenden Schritte enthalten eine Gliederung zum Erstellen von Dockerfile-Anweisungen zum Erstellen von Azure Sphere-Beispielen. Sie können diese Schritte für Ihre eigenen Anforderungen anpassen.
Erstellen Sie einen neuen Container basierend auf dem mcr.microsoft.com/azurespheresdk-Container.
Klonen Sie das Azure Sphere-Beispiel-Repository von GitHub.
Erstellen Sie ein Verzeichnis, in dem Ihr Beispiel gespeichert wird, wenn es erstellt wird.
Erstellen Sie eine Umgebungsvariable, um das Beispiel anzugeben, das Sie erstellen möchten.
Führen Sie CMake aus, um das Beispiel zu erstellen und es im angegebenen Verzeichnis zu platzieren.
Erstellen einer Dockerfile-Datei zum Erstellen von Beispielen
Um ein Docker-Image basierend auf dem Azure Sphere-Image zu erstellen, aber mit benutzerdefinierten Buildfunktionen, erstellen Sie eine Textdatei (ohne Dateierweiterung) mit den folgenden Docker-Anweisungen:
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
Diese Datei verwendet die ENV-Umgebungsvariable , um das zu erstellende Beispiel anzugeben. Legen Sie einen neuen Wert für ENV fest, um ein Beispiel zu erstellen, das sich von HelloWorld/HelloWorld_HighLevelApp unterscheidet.
Weitere Details zu den Dockerfile-Anweisungen finden Sie in der Line-by-Line-Erläuterung der Dockerfile-Anweisungen .
Erstellen der Standardbeispiel-App mithilfe der Dockerfile-Datei
Zum Erstellen einer Beispiel-App mit einer benutzerdefinierten Dockerfile-Datei sind drei Schritte erforderlich:
Erstellen Sie das Image aus der Dockerfile-Datei mithilfe einer Befehlszeilenschnittstelle wie PowerShell, Windows-Eingabeaufforderung oder Linux-Befehlsshell:
docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
Die
--target
Option gibt an, welcher Teil eines mehrstufigen Builds verwendet werden soll. Die--tag
Option gibt einen Namen des Bilds an und muss nur Kleinbuchstaben sein. Docker-Images dürfen immer nur Kleinbuchstaben verwenden. Wenn Sie keinen Namen angeben--tag
, weist das Bild eine 12-stellige Zahl auf, mit der nicht einfach zu arbeiten ist. Vergessen Sie nicht den Punkt am Ende des Befehls. Sie können die Bilder mit demdocker images
Befehl auflisten.Docker erstellt ein Image namens azsphere-sampleapp-build basierend auf der Datei namens "Dockerfile". Wenn Ihre Dockerfile-Datei einen anderen Namen hat, verwenden Sie die
--file
Option, um den Namen anzugeben.Weisen Sie dem Container einen einfacheren Namen mithilfe der
--name
Option zu. Derrun
Befehl gibt den Container ein und erstellt das von der ENV-Umgebungsvariable angegebene Beispiel. Verwenden Sie die Befehlszeilenschnittstelle, um diesen Befehl einzugeben:docker run --name hello_hl azsphere-sampleapp-build
Die Beispiel-App (HelloWorld/HelloWorld_HighLevelApp) wird erstellt und im
/build
Verzeichnis im Container platziert. Wenn der Container ausgeführt wird, wird er beendet und führt Sie zurück zur Befehlszeilenschnittstelle.Hinweis
Mit diesem Befehl wird die App ohne Interaktion erstellt und der Container nach Abschluss des Builds beendet. Der Container ist nach dem Beenden noch aktiv. Dies liegt daran, dass Sie die
-it
Optionen nicht--rm
angegeben haben. Sie können dendocker run
Befehl später erneut auf dem Container verwenden, ohne ihn neu zu erstellen, solange Docker Desktop ausgeführt wird.Kopieren Sie die Ergebnisse Ihres Builds aus Ihrem Container in Ihre Hostcomputerumgebung. Verwenden Sie die Befehlszeilenschnittstelle, um diesen Befehl einzugeben:
docker cp hello_hl:/build .
Dieser Befehl kopiert den Inhalt des Verzeichnisses innerhalb des
/build
hello_h1 Containers in das Verzeichnis auf Ihrem Hostcomputer, von dem Sie den Befehl ausstellen. Das/build
Verzeichnis wird als Arbeitsverzeichnis (WORKDIR) angegeben, in das das Beispiel kompiliert werden soll. Beachten Sie, dass Sie sich noch außerhalb des Containers befinden, aber Befehle mit dem Docker CP-Befehl ausgeben. Vergessen Sie nicht den Punkt am Ende des Befehls.
Erstellen eines anderen Beispiels mithilfe der benutzerdefinierten Dockerfile-Datei
Um ein anderes Beispiel zu erstellen, z. B. das GPIO-Beispiel, geben Sie den Pfad zum GPIO-Beispiel an.
docker run --name gpio_hl --env sample=GPIO/GPIO_HighLevelApp azsphere-sampleapp-build
Kopieren Sie nach Abschluss des Builds das Ergebnis aus Ihrem Container in die Hostcomputerumgebung:
docker cp gpio_hl:/build .
Vergessen Sie nicht den Punkt am Ende des Befehls.
Nachdem Ihr Paket in Ihre Hostcomputerumgebung kopiert wurde, können Sie Azure Sphere CLI-Befehle von Windows oder Linux verwenden, um Ihre Anwendung bereitzustellen. Weitere Informationen finden Sie unter Bereitstellen der Anwendung.
Die Geräteinteraktion über USB von einem Container wird nicht unterstützt.
Line-by-Line-Diskussion über die Dockerfile-Anweisungen
Jeder Teil der Dockerfile-Datei, die in Create a Dockerfile zum Erstellen von Beispielen erstellt wurde, wird unten erläutert.
Vorbereiten auf mehrere Builds
FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo
Diese Linie richtet einen neuen Build, azsphere-samples-repo, basierend auf dem ursprünglichen microsoft.com/azurespheresdk Container ein.
Herunterladen der Azure Sphere-Beispiele
RUN git clone https://github.com/Azure/azure-sphere-samples.git
In dieser Zeile werden alle Beispiele aus dem Azure Sphere-Beispiel-Repository geklont.
Hinzufügen eines weiteren zielfähigen mehrstufigen Builds
FROM azsphere-samples-repo AS azsphere-sampleapp-build
Diese Linie fügt einen neuen Build basierend auf dem Azsphere-Samples-Repo-Build hinzu.
Festlegen des Arbeitsverzeichnisses innerhalb des Containers
RUN mkdir /build
WORKDIR /build
Diese Zeilen erstellen ein neues Arbeitsverzeichnis.
Erstellen einer Standardumgebungsvariable zum Angeben eines Beispiels
ENV sample=HelloWorld/HelloWorld_HighLevelApp
Diese Zeile erstellt eine Umgebungsvariable, die das zu erstellende Beispiel angibt. In diesem Fall handelt es sich um das HelloWorld_HighLevelApp Beispiel. Die Umgebungsvariable kann überschrieben werden, um einen beliebigen Beispielnamen und Pfad anzugeben.
Führen Sie CMake und Ninja aus, um ein Paket zu erstellen
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
In diesem Abschnitt wird CMake verwendet, um Parameter anzugeben, die beim Aufrufen von Ninja zum Erstellen des Pakets verwendet werden.
Nach Abschluss des Builds wird der Container nicht mehr ausgeführt.
Docker-Tipps
Diese Tipps helfen Ihnen möglicherweise, effektiver mit Docker zu arbeiten.
Verwenden des Befehls "Docker-Ausführen" zum interaktiven Erkunden des Basiscontainers
Verwenden Sie die Befehlszeilenschnittstelle, um diesen Befehl einzugeben:
docker run --rm -it mcr.microsoft.com/azurespheresdk
In diesem Beispiel ist der Name des Images, mcr.microsoft.com/azurespheresdk
aus dem der Container erstellt wird. Beachten Sie, dass die --rm
Option den Container nach der Ausführung herunterfahren und die -it
Option den interaktiven Zugriff auf den Container angibt.
Der Docker-Container für die Azure Sphere SDK-Buildumgebung wird vom Microsoft-Artefaktregistrierung (MAR) bereitgestellt und ist für die Öffentlichkeit verfügbar.
Wenn sich der Container bereits auf Ihrem lokalen Computer befindet, wird er nicht erneut heruntergeladen.
Der Download und das Setup können mehrere Minuten dauern. Die Buildumgebung enthält alles, was zum Erstellen eines Pakets mit dem Azure Sphere Linux SDK erforderlich ist.
Nachdem der run
Befehl abgeschlossen ist, ändert sich die Eingabeaufforderung in ein "#"-Zeichen. Sie befinden sich jetzt in einem Linux-basierten Docker-Container. Die Eingabe von ls zeigt Ihnen das aktuelle Linux-Verzeichnis innerhalb des Containers an, ähnlich wie in diesem Eintrag:
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
Geben Sie exit
den Container ein, um den Container zu verlassen. Der Container steht Ihnen nicht mehr zur Verfügung, und Sie müssen ihn mit diesem Befehl erneut erstellen:
docker run --rm -it mcr.microsoft.com/azurespheresdk
Wenn Sie die --rm
Option nicht verwenden, wird der Container beim Beenden nicht gelöscht.
Containeridentifikation
Wenn Sie einen neuen Container erstellen, verfügt er über eine ID, z a250ade97090
. B. (Ihre ID ist anders). Für viele Docker-Befehle müssen Sie die ID anstelle der microsoft.com/azurespheresdk Adresse verwenden.
Nachfolgend finden Sie eine typische Auflistung grundlegender Informationen zu den Containern auf Ihrem System mit diesem Befehl:
docker ps --all
Das Ergebnis sieht ähnlich wie folgt aus:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a250ade97090 microsoft.com/azurespheresdk "/bin/bash" 15 minutes ago Up 9 seconds pedantic_kilby
Ihre ID unterscheidet sich. Beachten Sie, dass Docker zufällige Namen für den Containerbesitzer ausgibt. Beachten Sie, dass in diesem Beispiel nur ein Container vorhanden ist.
Arbeiten im Container
Wenn Sie innerhalb eines Containers auf Ihrem Computer arbeiten möchten, ohne den Befehl "Ausführen " zu verwenden, verwenden Sie den Befehl "exec " mit der Container-ID und dem Skript im Container, den Sie ausführen möchten (/bin/bash), indem Sie Folgendes eingeben:
docker exec -t a250ade97090 /bin/bash
Die Eingabeaufforderung ändert sich in ein "#"-Zeichen. Sie befinden sich jetzt in einem Linux-basierten Docker-Container. Die Eingabe von ls zeigt Ihnen das aktuelle Linux-Verzeichnis innerhalb des Containers an:
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
Geben Sie exit
den Befehl ein, um den Container zu verlassen.
Einschränkungen des Azure Sphere SDK-Buildcontainers
Der Azure Sphere SDK-Buildcontainer wurde nur zum Erstellen von Azure Sphere-Paketen entwickelt. Es wurde nicht für die Ausführung von Azure Sphere CLI-Befehlen, zum Wiederherstellen oder Querladen von Geräten oder zum Debuggen entwickelt. Der Container hat keinen Zugriff auf USB-Funktionen.
Einschränkungen von Docker Linux-Containern
Ein Docker Linux-Container ist nicht identisch mit einer vollständigen Installation von Linux. Sie können beispielsweise keine Linux-GUI-Anwendungen in einem Docker Linux-Container ausführen.
Verwenden von mehrstufigen Buildcontainern zum Reduzieren von Abhängigkeiten
Mit dem mehrstufigen Docker-Buildfeature können Sie mehrere FROM-Anweisungen in Ihrer Dockerfile-Datei verwenden, um Abhängigkeiten zu reduzieren. Jede FROM-Anweisung kann eine andere Basis verwenden, und jede von ihnen beginnt eine neue Phase des Builds.
Weitere Informationen zu Mehrstufigen Docker-Builds finden Sie unter Verwenden von mehrstufigen Builds.
Mehrstufige Builds werden von Docker als bewährte Methode empfohlen. Weitere Informationen zu bewährten Docker-Methoden finden Sie im Einführungshandbuch zu bewährten Dockerfile-Methoden.
Hinzufügen eines aussagekräftigen Namens zu Ihrer Phase mit dem ARGUMENT AS
Standardmäßig werden die Phasen nicht benannt, weisen jedoch eine ID-Nummer auf. Sie können Ihre Dockerfile besser lesbar machen, indem Sie der Phase einen aussagekräftigen Namen hinzufügen, indem Sie AS und einen Namen anfügen. Zum Beispiel:
FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo
Weitere Informationen zur Verwendung des AS-Arguments in mehrstufigen Befehlen finden Sie unter Benennen der Buildphasen.
Erstellen des Ziels mit einem aussagekräftigen Namen als bewährte Methode
Wenn Sie ein Ziel erstellen, können Sie ihm einen aussagekräftigen Namen geben, indem Sie die Option "-tag " verwenden. Aussagekräftige Namen sind nützlich. Zum Beispiel:
docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
Weitere Informationen zur Verwendung von Namen mit dem Docker-Buildbefehl finden Sie in der Docker-Buildreferenz.