Dela via


Använda containrar för att skapa Azure Sphere-appar

Viktigt!

Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).

Kommentar

Det här avsnittet beskriver hur du använder Docker Desktop för Windows för att skapa Azure Sphere-program i en container. Om du vill skapa appar i en Docker-container i Linux kan du använda samma azurespheresdk-container från Microsofts artefaktregister eller MAR (även kallat Microsoft Container Registry eller MCR).

Installera Docker Desktop

Du kan använda Docker för att köra en fristående Linux-container med Azure Sphere SDK förinstallerat. Den här avbildningen kan också användas som bas för dina egna distributioner. Avbildningstaggen refererar till den version av SDK som den innehåller.

Innan du kan ladda ned och köra en Docker-container måste du installera Docker Desktop i Windows eller Linux.

När du har installerat Docker Desktop för Windows kontrollerar du att du aktiverar Windows-funktioner för Hyper-V och Containrar. Du kan behöva starta om efter installationen.

När du har installerat det startar du Docker Desktop från Windows-Start-menyn eller från genvägsikonen som lagts till på skrivbordet.

Linux är standardcontainertypen för Docker Desktop i Windows. Azure Sphere använder Linux-containrar. För att kunna köra Linux-containrar måste du se till att Docker riktar in sig på rätt daemon. Om du vill kontrollera att Linux är den aktuella standardtypen för containern högerklickar du på Docker-valikonen i systemfältet. Om du ser Växla till Windows-containrar är du redan inriktad på Linux-daemon. Om du är i Windows-containern kan du växla detta genom att välja Växla till Linux-containrar från åtgärdsmenyn när du högerklickar på Docker-valikonen i systemfältet. Mer information finns i Växla mellan Windows- och Linux-containrar.

Kommentar

Vänta tills docker Desktop-valikonens animering stoppas. Ikonen kan finnas i området dolda meddelanden. Hovra över ikonen för att se Docker Desktop-status.

Använda Azure Sphere SDK-miljöcontainern för att skapa exempelappar

Du kan använda en container interaktivt genom att ange den och utfärda kommandot. Det är dock mer effektivt att samla in de steg som krävs för att skapa dina program i en fil som Docker kan använda för att skapa en anpassad avbildning baserat på den ursprungliga Azure Sphere-avbildningen. Detta säkerställer att byggprocessen är repeterbar och konsekvent. Som standard måste den här filen ha namnet Dockerfile och finnas i $PATH där docker-kommandot körs.

Följande steg innehåller en disposition för att skapa Dockerfile-instruktioner för att skapa Azure Sphere-exempel. Du kan justera de här stegen efter dina egna behov.

  1. Skapa en ny container baserat på den mcr.microsoft.com/azurespheresdk containern.

  2. Klona lagringsplatsen azure sphere-exempel från GitHub.

  3. Skapa en katalog som du vill lagra ditt exempel i när den skapas.

  4. Skapa en miljövariabel för att ange det exempel som du vill skapa.

  5. Kör CMake för att skapa exemplet och placera det i den angivna katalogen.

Skapa en Dockerfile för att skapa exempel

Skapa en Docker-avbildning baserat på Azure Sphere-avbildningen men med anpassade byggfunktioner genom att skapa en textfil (utan filnamnstillägg) med följande Docker-instruktioner:

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

Den här filen använder miljövariabeln ENV för att ange det exempel som ska skapas. Ange ett nytt värde för ENV för att skapa ett exempel som skiljer sig från HelloWorld/HelloWorld_HighLevelApp.

Mer information om Dockerfile-instruktionerna finns i Rad-för-rad-beskrivningen av Dockerfile-instruktionerna.

Skapa standardexempelappen med Dockerfile

Det krävs tre steg för att skapa en exempelapp med en anpassad Dockerfile:

  1. Skapa avbildningen från Dockerfile med hjälp av ett kommandoradsgränssnitt som PowerShell, Windows-kommandotolken eller Linux-kommandogränssnittet:

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

    Alternativet --target anger vilken del av en flerstegsversion som ska användas. Alternativet --tag anger ett namn på bilden och får endast vara gemener. Docker-avbildningar får alltid endast använda gemener. Om du inte anger ett namn med --taghar bilden ett 12-siffrigt tal som inte är lätt att arbeta med. Glöm inte punkten i slutet av kommandot. Du kan visa en lista över bilderna med docker images kommandot .

    Docker skapar en avbildning med namnet azsphere-sampleapp-build baserat på filen med namnet "Dockerfile". Om din Dockerfile heter något annat använder du alternativet --file för att ange namnet.

  2. Ge containern ett enklare namn med hjälp av --name alternativet . Kommandot run anger containern och skapar det exempel som anges av miljövariabeln ENV . Använd kommandoradsgränssnittet för att ange det här kommandot:

    docker run --name hello_hl azsphere-sampleapp-build
    

    Exempelappen (HelloWorld/HelloWorld_HighLevelApp) skapas och placeras i /build katalogen i containern. När containern är klar avslutas den och tar dig tillbaka till kommandoradsgränssnittet.

    Kommentar

    Det här kommandot skapar appen utan någon interaktion och avslutar containern när bygget är klart. Containern är fortfarande aktiv när du har avslutat den. Det beror på att du inte har angett -it alternativen eller --rm . Du kan senare använda docker run kommandot igen i containern utan att återskapa det, så länge Docker Desktop körs.

  3. Kopiera resultatet av bygget inifrån containern till värddatormiljön. Använd kommandoradsgränssnittet för att ange det här kommandot:

    docker cp hello_hl:/build .
    

    Det här kommandot kopierar innehållet i /build katalogen i den hello_h1 containern till katalogen på värddatorn som du utfärdar kommandot från. Katalogen /build anges som arbetskatalogen (WORKDIR) som exemplet ska kompileras till. Observera att du fortfarande är utanför containern men att du utfärdar kommandon till den med kommandot docker cp . Glöm inte punkten i slutet av kommandot.

Skapa ett annat exempel med den anpassade Dockerfile

Om du vill skapa ett annat exempel, till exempel GPIO-exemplet, anger du sökvägen till GPIO-exemplet.

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

När bygget är klart kopierar du resultatet från containern till värddatormiljön:

docker cp gpio_hl:/build .

Glöm inte punkten i slutet av kommandot.

När paketet har kopierats till värddatormiljön kan du använda Azure Sphere CLI-kommandon från Windows eller Linux för att distribuera ditt program. Mer information finns i Distribuera programmet.

Enhetsinteraktion via USB från en container stöds inte.

Rad för rad-diskussion om Dockerfile-instruktionerna

Varje del av Dockerfile som skapades i Skapa en Dockerfile för att skapa exempel beskrivs nedan.

Förbereda för flera versioner

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

Den här raden konfigurerar en ny version, azsphere-samples-repo, baserat på den ursprungliga microsoft.com/azurespheresdk containern.

Ladda ned Azure Sphere-exemplen

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

Den här raden klonar alla exempel från Lagringsplatsen för Azure Sphere-exempel.

Lägga till en annan målinriktad flerstegsversion

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

Den här raden lägger till en ny version baserad på azsphere-samples-repo-build .

Ange arbetskatalogen i containern

RUN mkdir /build
WORKDIR /build

Dessa rader skapar en ny arbetskatalog.

Skapa en standardmiljövariabel för att ange exempel

ENV sample=HelloWorld/HelloWorld_HighLevelApp

Den här raden skapar en miljövariabel som anger vilket exempel som ska skapas. I det här fallet är det det HelloWorld_HighLevelApp exemplet. Miljövariabeln kan åsidosättas för att ange valfritt exempelnamn och sökväg.

Kör CMake och Ninja för att skapa ett paket

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

Det här avsnittet använder CMake för att ange parametrar som används när du anropar Ninja för att skapa paketet.

När bygget är klart slutar containern att köras.

Docker-tips

De här tipsen kan hjälpa dig att arbeta mer effektivt med Docker.

Använd kommandot docker run för att utforska bascontainern interaktivt

Använd kommandoradsgränssnittet för att ange det här kommandot:

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

I det här exemplet mcr.microsoft.com/azurespheresdk är namnet på den avbildning som containern skapas från. Observera att alternativet --rm stänger av containern när den -it har körts och alternativet anger interaktiv åtkomst till containern.

Docker-containern för Azure Sphere SDK-byggmiljön tillhandahålls av Microsofts artefaktregister (MAR) och är tillgänglig för allmänheten.

Om containern redan finns på den lokala datorn laddas den inte ned igen.

Nedladdningen och installationen kan ta flera minuter. Byggmiljön innehåller allt som behövs för att skapa ett paket med Hjälp av Azure Sphere Linux SDK.

run När kommandot är klart ändras kommandotolken till ett "#"-tecken. Du befinner dig nu i en Linux-baserad Docker-container. Om du skriver ls visas den aktuella Linux-katalogen i containern, ungefär som i den här listan:

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

Skriv exit för att lämna containern. Containern kommer inte längre att vara tillgänglig för dig och du måste skapa den igen med det här kommandot:

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

Om du inte använder alternativet --rm tas containern inte bort när du avslutar.

Containeridentifiering

När du skapar en ny container har den ett ID som a250ade97090 (ditt ID kommer att vara annorlunda). För många Docker-kommandon måste du använda ID:t i stället för den microsoft.com/azurespheresdk adressen.

Här är en typisk lista över grundläggande information om containrar i systemet med hjälp av det här kommandot:

docker ps --all

Resultatet ser ut ungefär så här:

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

Ditt ID kommer att vara annorlunda. Observera att Docker utgör slumpmässiga namn för containerägaren. Observera att det i det här exemplet bara finns en container.

Arbeta i containern

Om du vill arbeta i en container på datorn utan att använda körningskommandot använder du kommandot exec med container-ID:t och skriptet i containern som du vill köra (/bin/bash) genom att skriva:

docker exec -t a250ade97090 /bin/bash

Kommandotolken ändras till ett "#"-tecken. Du befinner dig nu i en Linux-baserad Docker-container. Om du skriver ls visas den aktuella Linux-katalogen i containern:

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

Om du vill lämna containern skriver du exit kommandot .

Begränsningar för Azure Sphere SDK-kompileringscontainer

Azure Sphere SDK-byggcontainern är utformad för att endast skapa Azure Sphere-paket. Den är inte utformad för att köra Azure Sphere CLI-kommandon, återställa eller separat läsa in enheter eller felsöka. Containern har inte åtkomst till USB-funktioner.

Begränsningar för Docker Linux-containrar

En Docker Linux-container är inte samma som en fullständig installation av Linux. Du kan till exempel inte köra Linux GUI-program i en Docker Linux-container.

Använda flerstegsversionscontainrar för att minska beroenden

Med docker-funktionen för flerstegsversion kan du använda flera FROM-instruktioner i Din Dockerfile för att minska beroenden. Varje FROM-instruktion kan använda en annan bas och var och en av dem påbörjar ett nytt steg i bygget.

Mer information om Docker-versioner i flera steg finns i Använda flerstegsversioner.

Flerstegsversioner rekommenderas av Docker som bästa praxis. Mer information om Metodtips för Docker finns i Introduktionsguide till Metodtips för Dockerfile.

Lägga till ett beskrivande namn i fasen med AS-argumentet

Som standard namnges inte stegen men har ett ID-nummer. Du kan göra Dockerfile mer läsbar genom att lägga till ett beskrivande namn i fasen genom att lägga till AS och ett namn. Till exempel:

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

Mer information om hur du använder AS-argumentet i flerstegskommandon finns i Namnge dina byggfaser.

Skapa målet med ett beskrivande namn som bästa praxis

När du skapar ett mål kan du ge det ett meningsfullt namn med hjälp av alternativet --tag . Meningsfulla namn är användbara. Till exempel:

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

Mer information om hur du använder namn med Kommandot Docker build finns i docker build-referensen.