Dela via


Använda behållare för att skapa Azure Sphere-appar

Observera

I det här avsnittet beskrivs hur du använder Docker Desktop för Windows för att skapa Azure Sphere-program i en behållare. Om du vill skapa appar i en Docker-behållare på Linux kan du använda samma azuresfärsdk-behållare från Microsofts artefaktregister eller MAR (kallas även Microsoft Container Registry eller MCR).

Installera Docker Desktop

Du kan använda Docker för att köra en fristående Linux-behållare 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-behållare måste du installera Docker Desktop på Windows eller Linux.

När du har installerat Docker Desktop för Windows måste du aktivera Windows-funktioner för Hyper-V och Behållare. Du kan behöva starta om efter installationen.

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

Linux är standardtyp för dockningsskrivbord i Windows. Azure Sphere använder Linux-behållare. För att kunna köra Linux-behållare 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 behållare högerklickar du på dockervalsikonen i systemfältet. Om du ser Växla till Windows-behållare riktar du redan in dig på Linux-daemon. Om du befinner dig i Windows-behållaren kan du ändra detta genom att välja Växla till Linux-behållare från åtgärdsmenyn när du högerklickar på dockervalsikonen i systemfältet. Mer information finns i Växla mellan Windows- och Linux-behållare.

Observera

Vänta tills docker desktop whale-ikonanimeringen upphör. Ikonen kan finnas i det dolda meddelandeområdet. Hovra över ikonen för att se dockningsskrivbordsstatus.

Använda Azure Sphere SDK-byggmiljöbehållaren för att skapa exempelappar

Du kan använda en behållare interaktivt genom att ange den och utfärda ett kommando. Men det är mer effektivt att registrera 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 kan upprepas och vara konsekvent. Som standard måste den här filen heta Dockerfile och finnas i den $PATH där docker-kommandot körs.

Följande steg ger en disposition för att skapa dockerfilinstruktioner för att skapa Azure Sphere-exempel. Du kan justera de här stegen efter dina egna behov.

  1. Skapa en ny behållare baserat på den mcr.microsoft.com/azurespheresdk behållaren.

  2. Klona Azure Sphere-exempelrepooken från GitHub.

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

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

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

Skapa en dockerfil för att skapa exempel

Skapa en textfil (utan filnamnstillägg) med följande dockningsinstruktioner om du vill skapa en Docker-avbildning baserad på Azure Sphere-avbildningen men med anpassade build-funktioner:

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 vilket exempel som ska byggas. Ange ett nytt värde för ENV om du vill skapa ett annat exempel än HelloWorld/HelloWorld_HighLevelApp.

Mer information om Dockerfile-instruktionerna finns i Rad för rad-diskussion om 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 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å avbildningen och får endast vara gemener. Docker-bilder får alltid endast använda gemener. Om du inte anger ett namn med --tagfår bilden ett 12-siffrigt nummer som inte är lätt att arbeta med. Glöm inte punkten i slutet av kommandot. Du kan visa en lista med bilderna med docker images kommandot.

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

  2. Ge behållaren ett enklare namn med --name alternativet. Kommandot run anger behållaren och bygger det exempel som anges av variabeln ENV-miljö . 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 katalogen i /build behållaren. När behållaren är klar avslutas den och tar dig tillbaka till kommandoradsgränssnittet.

    Observera

    Det här kommandot skapar appen utan interaktion och avslutar behållaren när versionen är klar. Behållaren är fortfarande aktiv när du avslutar. Det beror på att du inte har angett -it eller --rm alternativ. Du kan senare använda docker run kommandot igen i behållaren utan att återskapa det, så länge Docker Desktop körs.

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

    docker cp hello_hl:/build .
    

    Med det här kommandot kopieras innehållet i /build katalogen i hello_h1-behållaren 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 befinner dig utanför behållaren men 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 versionen är klar kopierar du resultatet inifrån behållaren 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 CLI-kommandon från Windows eller Linux för att distribuera programmet. Mer information finns i Distribuera programmet.

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

Rad för rad-diskussion om dockerfilinstruktionerna

Nedan förklaras varje del av Dockerfile som skapats i Skapa en dockerfil för byggnadsexempel .

Förbereda för flera versioner

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

Den här raden konfigurerar en ny version, azsfär-samples-repo, baserad på den ursprungliga microsoft.com/azurespheresdk behållaren.

Ladda ned Azure Sphere-exempel

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

Den här raden klonar alla exempel från Azure Sphere-exempelrepo.

Lägga till en annan målbaserad flerstegsversion

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

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

Ange arbetskatalogen i behållaren

RUN mkdir /build
WORKDIR /build

De här raderna 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 byggas. I det här fallet är det det HelloWorld_HighLevelApp exemplet. Miljövariabeln kan åsidosättas för att ange ett exempelnamn och en sökväg.

Kör CMake och Ninja för att bygga 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

I det här avsnittet används CMake för att ange parametrar som används när Ninja anropas för att skapa paketet.

När versionen är klar slutar behållaren att köras.

Dockertips

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

Använda kommandot för att köra docker för att interaktivt utforska basbehållaren

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å avbildningen som behållaren skapas från. Observera att --rm alternativet stänger av behållaren när den -it har körts och alternativet anger interaktiv åtkomst till behållaren.

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

Om behållaren redan finns på din lokala dator laddas den inte ned igen.

Nedladdningen och konfigurationen kan ta flera minuter. Byggmiljön innehåller allt som behövs för att bygga ett paket med Azure Sphere Linux SDK.

run När kommandot är klart ändras kommandotolken till ett #-tecken. Du är nu i en Linux-baserad Docker-behållare. När du skriver ls visas den aktuella Linux-katalogen i behållaren, ungefär som 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 behållaren. Behållaren är inte längre 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 --rm alternativet tas behållaren inte bort när du avslutar.

Behållaridentifiering

När du skapar en ny behållare får den ett ID, till exempel 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 vanlig lista över grundläggande information om behållare i systemet med 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 behållarägaren. Observera att det i det här exemplet bara finns en behållare.

Arbeta i behållaren

Om du vill arbeta i en behållare på datorn utan att använda kommandot Kör använder du kommandot exec med behållar-ID:t och skriptet i den behållare 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-behållare. När du skriver ls visas den aktuella Linux-katalogen i behållaren:

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 kommandot om du vill lämna behållaren exit .

Azure Sphere SDK-behållarbegränsningar

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

Linux-behållarbegränsningar för Docker

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

Minska beroenden med hjälp av flerstegsversionsbehållare

Med flerstegsversionsfunktionen i Docker kan du använda flera FROM-uttryck i Dockerfile för att minska beroenden. Varje FROM-instruktion kan använda olika baser och var och en av dem påbörjar ett nytt steg i versionen.

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

Flerstegsversioner rekommenderas av Docker som en metod. Mer information om metodtips för Docker finns i Introduktionsguide till Metodtips för Dockerfile.

Lägga till ett beskrivande namn på scenen med AS-argumentet

Som standard namnges inte stegen, men de har ett ID-nummer. Du kan göra dockerfilen mer lättläst genom att lägga till ett beskrivande namn på scenen 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 meningsfullt namn som metodtips

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-bygge finns i Docker-byggreferensen.