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