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.
Skapa en ny behållare baserat på den mcr.microsoft.com/azurespheresdk behållaren.
Klona Azure Sphere-exempelrepooken från GitHub.
Skapa en katalog som du vill lagra ditt exempel i när det skapas.
Skapa en miljövariabel för att ange det exempel du vill skapa.
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:
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--tag
få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 meddocker 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.Ge behållaren ett enklare namn med
--name
alternativet. Kommandotrun
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ändadocker run
kommandot igen i behållaren utan att återskapa det, så länge Docker Desktop körs.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.