Použití kontejnerů k vytváření aplikací Azure Sphere
Poznámka
Toto téma popisuje, jak pomocí Desktopu Dockeru pro Windows vytvářet aplikace Azure Sphere v kontejneru. Pokud chcete vytvářet aplikace v kontejneru Dockeru v Linuxu, můžete použít stejný kontejner azurespheresdk z Registr artefaktů Microsoft nebo MAR (označovaného také jako Microsoft Container Registry nebo MCR).
Instalace Docker Desktopu
Pomocí Dockeru můžete spustit samostatný kontejner Linuxu s předinstalovanou sadou Azure Sphere SDK. Tuto image můžete také použít jako základ pro vaše vlastní nasazení. Značka image odkazuje na verzi sady SDK, která obsahuje.
Před stažením a spuštěním kontejneru Dockeru musíte nainstalovat Docker Desktop ve Windows nebo Linuxu.
Po instalaci Docker Desktopu pro Windows se ujistěte, že jste povolili funkce Systému Windows hyper-V a kontejnery. Po instalaci možná budete muset restartovat počítač.
Po instalaci spusťte Docker Desktop z nabídky Start ve Windows nebo z ikony zástupce přidané na plochu.
Linux je výchozí typ kontejneru pro Docker Desktop ve Windows. Azure Sphere používá kontejnery Linuxu. Abyste mohli spouštět linuxové kontejnery, musíte se ujistit, že Docker cílí na správného démona. Pokud chcete ověřit, že linux je aktuálním výchozím typem kontejneru, klikněte pravým tlačítkem na ikonu Docker whale na hlavním panelu systému. Pokud se zobrazí možnost Přepnout na kontejnery Windows, pak už cílíte na linuxový proces démon. Pokud jste v kontejneru Windows, můžete to přepnout tak, že v nabídce akcí vyberete Přepnout na kontejnery Linuxu , když kliknete pravým tlačítkem na ikonu Docker whale na hlavním panelu systému. Další informace najdete v tématu Přepínání mezi kontejnery Windows a Linuxu.
Poznámka
Počkejte, až se zastaví animace ikony velryby na ploše Dockeru. Ikona může být ve skryté oblasti Oznámení. Když najedete myší na ikonu, zobrazí se stav Docker Desktopu.
Použití kontejneru prostředí sestavení sady Azure Sphere SDK k sestavení ukázkových aplikací
Kontejner můžete používat interaktivně tak, že ho zadáte a vydáte příkaz. Je však efektivnější zachytit kroky potřebné k sestavení aplikací v souboru, který Docker může použít k vytvoření vlastní image založené na původní imagi Azure Sphere. Tím se zajistí, že proces sestavení bude opakovatelný a konzistentní. Ve výchozím nastavení musí mít tento soubor název Dockerfile a musí být v $PATH, kde je spuštěn příkaz dockeru.
Následující kroky poskytují osnovu pro vytvoření pokynů k vytvoření souboru Dockerfile pro sestavení ukázek Azure Sphere. Tyto kroky můžete upravit pro vlastní potřeby.
Na základě kontejneru mcr.microsoft.com/azurespheresdk vytvořte nový kontejner.
Naklonujte úložiště ukázek Azure Sphere z GitHubu.
Vytvořte adresář, do něhož se bude ukázka ukládat, když se sestaví.
Vytvořte proměnnou prostředí pro určení ukázky, kterou chcete sestavit.
Spuštěním CMake sestavte ukázku a umístěte ji do zadaného adresáře.
Vytvoření souboru Dockerfile pro sestavení ukázek
Pokud chcete vytvořit image Dockeru založenou na imagi Azure Sphere, ale s vlastními funkcemi sestavení, vytvořte textový soubor (bez přípony souboru) s následujícími pokyny k Dockeru:
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
Tento soubor používá proměnnou prostředí ENV k určení ukázky, která se má sestavit. Nastavte novou hodnotu pro ENV , abyste vytvořili ukázku odlišnou od HelloWorld/HelloWorld_HighLevelApp.
Další podrobnosti o pokynech k souboru Dockerfile najdete v podrobné diskuzi o pokynech k souboru Dockerfile.
Sestavení výchozí ukázkové aplikace pomocí souboru Dockerfile
K vytvoření ukázkové aplikace pomocí vlastního souboru Dockerfile je potřeba provést tři kroky:
Sestavte image ze souboru Dockerfile pomocí rozhraní příkazového řádku, jako je PowerShell, příkazový řádek Windows nebo příkazové prostředí Linuxu:
docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
Možnost
--target
určuje, která část vícefázového sestavení se má použít. Možnost--tag
určuje název obrázku a musí být pouze malá písmena. Image Dockeru musí vždy používat jenom malá písmena. Pokud nezadáte název pomocí--tag
, bude mít obrázek 12místné číslo, se kterým se nebude moc dobře pracovat. Nezapomeňte na tečku na konci příkazu. Pomocí příkazu můžete zobrazit seznam imagídocker images
.Docker sestaví image s názvem azsphere-sampleapp-build na základě souboru s názvem "Dockerfile". Pokud má váš soubor Dockerfile jiný název, zadejte ho
--file
pomocí možnosti .Dejte kontejneru jednodušší název pomocí
--name
možnosti . Příkazrun
zadá kontejner a sestaví ukázku určenou proměnnou prostředí ENV . Pomocí rozhraní příkazového řádku zadejte tento příkaz:docker run --name hello_hl azsphere-sampleapp-build
Vytvoří se ukázková aplikace (HelloWorld/HelloWorld_HighLevelApp) a umístí se do
/build
adresáře uvnitř kontejneru. Po dokončení spuštění kontejneru se kontejner ukončí a vrátí se zpět do rozhraní příkazového řádku.Poznámka
Tento příkaz sestaví aplikaci bez jakékoli interakce a po dokončení sestavení kontejner ukončí. Kontejner je i po ukončení stále aktivní. Je to proto, že jste nezadali
-it
možnosti nebo--rm
. Později můžete příkaz znovu použítdocker run
v kontejneru, aniž byste ho znovu sestavili, pokud je Docker Desktop spuštěný.Zkopírujte výsledky sestavení z kontejneru do prostředí hostitelského počítače. Pomocí rozhraní příkazového řádku zadejte tento příkaz:
docker cp hello_hl:/build .
Tento příkaz zkopíruje obsah
/build
adresáře uvnitř kontejneru hello_h1 do adresáře na hostitelském počítači, ze kterého příkaz vydáváte. Adresář/build
je určený jako pracovní adresář (WORKDIR), do kterého se má ukázka zkompilovat. Všimněte si, že jste stále mimo kontejner, ale vydáváte do něj příkazy pomocí příkazu docker cp . Nezapomeňte na tečku na konci příkazu.
Vytvoření jiné ukázky pomocí vlastního souboru Dockerfile
Pokud chcete vytvořit jinou ukázku, například ukázku GPIO, zadejte cestu k ukázce GPIO.
docker run --name gpio_hl --env sample=GPIO/GPIO_HighLevelApp azsphere-sampleapp-build
Po dokončení sestavení zkopírujte výsledek z kontejneru do prostředí hostitelského počítače:
docker cp gpio_hl:/build .
Nezapomeňte na tečku na konci příkazu.
Po zkopírování balíčku do prostředí hostitelského počítače můžete k nasazení aplikace použít příkazy Azure CLI z Windows nebo Linuxu. Další informace najdete v tématu Nasazení aplikace.
Interakce zařízení z kontejneru přes USB se nepodporuje.
Řádková diskuze s pokyny k souboru Dockerfile
Jednotlivé části souboru Dockerfile vytvořené v části Vytvoření souboru Dockerfile pro sestavení ukázek jsou vysvětleny níže.
Příprava na více sestavení
FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo
Tento řádek nastaví nový build azsphere-samples-repo na základě původního kontejneru microsoft.com/azurespheresdk .
Stažení ukázek Azure Sphere
RUN git clone https://github.com/Azure/azure-sphere-samples.git
Tento řádek naklonuje všechny ukázky z úložiště ukázek Azure Sphere.
Přidání dalšího vícefázového sestavení s možností cílení
FROM azsphere-samples-repo AS azsphere-sampleapp-build
Tento řádek přidá nový build založený na sestavení azsphere-samples-repo .
Nastavení pracovního adresáře uvnitř kontejneru
RUN mkdir /build
WORKDIR /build
Tyto řádky vytvoří nový pracovní adresář.
Vytvoření výchozí proměnné prostředí pro zadání ukázky
ENV sample=HelloWorld/HelloWorld_HighLevelApp
Tento řádek vytvoří proměnnou prostředí, která určuje ukázku, která se má sestavit. V tomto případě je to HelloWorld_HighLevelApp ukázka. Proměnnou prostředí je možné přepsat a zadat libovolný ukázkový název a cestu.
Spuštěním CMake a Ninja vytvořte balíček.
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
Tato část používá CMake k určení parametrů, které se použijí při vyvolání Ninja k sestavení balíčku.
Po dokončení sestavení se kontejner přestane spouštět.
Tipy k Dockeru
Tyto tipy vám můžou pomoct efektivněji pracovat s Dockerem.
Interaktivní prozkoumání základního kontejneru pomocí příkazu docker run
Pomocí rozhraní příkazového řádku zadejte tento příkaz:
docker run --rm -it mcr.microsoft.com/azurespheresdk
V tomto příkladu je název image, mcr.microsoft.com/azurespheresdk
ze které je kontejner vytvořen. Všimněte si, že možnost --rm
po spuštění kontejneru vypne a -it
možnost určuje interaktivní přístup ke kontejneru.
Kontejner Dockeru prostředí sestavení sady Azure Sphere SDK poskytuje Registr artefaktů Microsoft (MAR) a je dostupný pro veřejnost.
Pokud je kontejner již na místním počítači, nebude se znovu stahovat.
Stažení a nastavení může trvat několik minut. Prostředí sestavení obsahuje vše potřebné k sestavení balíčku pomocí sady Azure Sphere Linux SDK.
run
Po dokončení příkazu se příkazový řádek změní na znaménko "#". Teď jste v kontejneru Dockeru založeném na Linuxu. Když zadáte ls , zobrazí se aktuální linuxový adresář v kontejneru, podobně jako v tomto výpisu:
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
Zadáním exit
příkazu kontejner opustíte. Kontejner už nebude k dispozici a budete ho muset znovu vytvořit pomocí tohoto příkazu:
docker run --rm -it mcr.microsoft.com/azurespheresdk
Pokud tuto možnost nepoužijete --rm
, kontejner se po ukončení neodstraní.
Identifikace kontejneru
Když vytvoříte nový kontejner, bude mít ID, například a250ade97090
(vaše ID se bude lišit). U mnoha příkazů Dockeru musíte místo microsoft.com/azurespheresdk adresy použít ID.
Tady je typický seznam základních informací o kontejnerech ve vašem systému pomocí tohoto příkazu:
docker ps --all
Výsledek bude vypadat nějak takto:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a250ade97090 microsoft.com/azurespheresdk "/bin/bash" 15 minutes ago Up 9 seconds pedantic_kilby
Vaše ID se bude lišit. Všimněte si, že Docker vytváří pro vlastníka kontejneru náhodná jména. Všimněte si, že v tomto příkladu je pouze jeden kontejner.
Práce uvnitř kontejneru
Pokud chcete pracovat v kontejneru na počítači bez použití příkazu run , použijte příkaz exec s ID kontejneru a skript v kontejneru, který chcete spustit (/bin/bash), zadáním:
docker exec -t a250ade97090 /bin/bash
Příkazový řádek se změní na znaménko "#". Teď jste v kontejneru Dockeru založeném na Linuxu. Když zadáte ls , zobrazí se aktuální adresář Linuxu uvnitř kontejneru:
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
Pokud chcete kontejner opustit, zadejte příkaz exit
.
Omezení kontejneru sestavení sady Azure Sphere SDK
Kontejner sestavení sady Azure Sphere SDK je navržený jenom pro sestavování balíčků Azure Sphere. Není určen pro spouštění příkazů Azure CLI, obnovení nebo zkušební načtení zařízení ani ladění. Kontejner nemá přístup k funkcím USB.
Omezení kontejneru Dockeru Linux
Kontejner Dockeru Pro Linux není totéž jako úplná instalace Linuxu. Nemůžete například spouštět aplikace grafického uživatelského rozhraní pro Linux v kontejneru Dockeru Linux.
Použití vícefázových kontejnerů sestavení k omezení závislostí
Funkce vícefázového sestavení Dockeru umožňuje použít v souboru Dockerfile více příkazů FROM, abyste snížili závislosti. Každá instrukce FROM může používat jiný základ a každá z nich začíná novou fázi sestavení.
Další informace o vícefázových buildech Dockeru najdete v tématu Použití vícefázových sestavení.
Docker doporučuje vícefázová sestavení jako osvědčený postup. Další informace o osvědčených postupech pro Docker najdete v úvodní příručce k osvědčeným postupům pro Dockerfile.
Přidání smysluplného názvu do fáze pomocí argumentu AS
Ve výchozím nastavení nejsou fáze pojmenované, ale mají číslo ID. Soubor Dockerfile můžete lépe přečíst tak, že do fáze přidáte smysluplný název tak, že připojíte AS a název. Příklad:
FROM mcr.microsoft.com/azurespheresdk AS azsphere-samples-repo
Další informace o použití argumentu AS ve vícefázových příkazech najdete v tématu Pojmenování fází sestavení.
Osvědčeným postupem vytvoření cíle se smysluplným názvem
Když vytváříte cíl, můžete mu dát smysluplný název pomocí možnosti --tag . Smysluplné názvy jsou užitečné. Příklad:
docker build --target azsphere-sampleapp-build --tag azsphere-sampleapp-build .
Další informace o používání názvů s příkazem docker build najdete v referenčních informacích k sestavení Dockeru.