Freigeben über


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.

  1. Erstellen Sie einen neuen Container basierend auf dem mcr.microsoft.com/azurespheresdk-Container.

  2. Klonen Sie das Azure Sphere-Beispiel-Repository von GitHub.

  3. Erstellen Sie ein Verzeichnis, in dem Ihr Beispiel gespeichert wird, wenn es erstellt wird.

  4. Erstellen Sie eine Umgebungsvariable, um das Beispiel anzugeben, das Sie erstellen möchten.

  5. 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:

  1. 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 dem docker 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.

  2. Weisen Sie dem Container einen einfacheren Namen mithilfe der --name Option zu. Der run 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 den docker run Befehl später erneut auf dem Container verwenden, ohne ihn neu zu erstellen, solange Docker Desktop ausgeführt wird.

  3. 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.